当前位置: 首页 > news >正文

零基础入门多媒体音频(1)-音频基础

声音的本质是波动,波形图能直观体现声音的特征。我们常用于描述音频的属性有下面这些:
1.采样率:声音中每秒包含的采样点个数。
2.位宽:每个采样点需要多少个bit进行存储。
3.声道数:声音进行回放需要喇叭的个数。
4.频率:声波每秒中包含的周期数。
5.周期:声波两个波峰之间的时间差。
我们看到的波形图一般都是连续的,但在计算机中用于描述声音的是离散的点,连续的波形是通过对这些离散的点进行插值得到。这些点就是常说的采样点。

做音频领域的开发经常能看到PCM这个词。PCM指的是数据脉冲编码调制。具体定义可以从网络上获取,很好理解。一句话概括就是将模拟信号的声音直接编码成数字信号,最原始的音频数据。从软件角度看,PCM数据就是能直接进行播放的最基础的音频格式。与PCM格式相对应的是各种编码格式。包括DDP,DD,AAC,MP3,DTS,AVS3-P3.

当我们知道一段音频 PCM数据的数据量(bytes),声道数(channels),位宽(bitwidth),采样率(samplerate)时,
就可以计算出这段音频数据能播放多长时间。播放时长time = bytes / (bitwidth / 8) / samplerate / channels.
播放时长主要可以用于以下这两种场景:

1.判断数据发送端是否欠载:若数据发送端在时间time_real发送到数据接收端的音频PCM数据对应的时长time_data存在下面的情况时,则数据发送端发送数据不及时。time_real > time_data。

2.算法处理性能不足:若算法处理模块处理一段时长time_data的音频数据花费time_alg存在下面的情况时,则算法性能不足。time_alg > time_data。

我们不仅要知道播放时长的用途,还需要知道这背后的原理。播放一条特定的码流,硬件需要根据采样率,位宽,声道数进行配置,然后按照相应的速率进行数据的传输,转化。也就是硬件会在时长time内消耗掉bytes的数据量。为什么要按照这个速率处理呢?数据的录制媏就是按照这个进行数据录制的。如果播放媏数据输出太快,听到的声音就是加速播放的效果。反之,则是低速播放效果。因为硬件播放媏以恒定速度进行数据的处理,那么整个软件处理通路也必须保持相对稳定的数据处理速度。考虑到CPU调度的波动性,软件处理是不可能维持恒定处理速度。可以通过在不同处理节点增加缓存buffer进行抗抖动处理。(CPU调度不及时,则数据缓存至buffer。获得CPU调度时,则尽快消耗buffer里面的数据。在宏观层面上达到一个稳定的处理速度)

音频名词介绍:
merge:多路音频数据拼凑成一路音频数据,总数据量不变。
mix:多路音频数据混音成一路音频数据,总数据量减倍。
slot:一路TDM音频输出
BE:back end 一路硬件音频输出
FE:front end 一路软件音频输入

相关文章:

零基础入门多媒体音频(1)-音频基础

声音的本质是波动,波形图能直观体现声音的特征。我们常用于描述音频的属性有下面这些: 1.采样率:声音中每秒包含的采样点个数。 2.位宽:每个采样点需要多少个bit进行存储。 3.声道数:声音进行回放需要喇叭的个数。 4.频…...

40 道高频 C++ 面试、笔试题及答案

1. 什么是多态? 答案: 多态允许对象在运行时表现出不同的行为,具体取决于其类型。 2. 虚函数和纯虚函数之间的区别是什么? 答案: 虚函数可以被派生类重写,而纯虚函数必须被派生类实现,否则派生…...

【07】进阶html5

HTML5 包含两个部分的更新,分别是文档和web api 文档 HTML5 元素表 元素语义化 元素语义化是指每个 HTML 元素都代表着某种含义,在开发中应该根据元素含义选择元素 元素语义化的好处: 利于 SEO(搜索引擎优化)利于无障碍访问利于浏览器的插件分析网页新增元素 多媒体…...

Linux|centos7|postgresql数据库|yum和编译方式安装总结(全系版本)

一、 yum方式安装postgresql 这个是官方的yum源,包括postgresql的开发包,lib库什么的,很齐全,关键是包括pgbackrest yum install -y https://download.postgresql.org/pub/repos/yum/reporpms/EL-7-x86_64/pgdg-redhat-repo-la…...

C++提高笔记(五)---STL容器(set/multiset、map/multimap)

1、set / multiset容器 1.1set基本概念 简介:所有元素都会在插入时自动被排序 本质:set和multiset属于关联式容器,底层结构是用二叉树实现 set和multiset区别: set不允许容器中有重复的元素 multiset允许容器中有重复的元素 …...

详解main函数参数argc、argv及如何传参

目录 1、main()函数参数 2、main函数如何传参 2.1 环境准备 2.2 通过 Powershell 窗口传参 2.3 通过vs界面传参 3、int main() 和 int main(int argc, char *argv[]) 特点 1、main()函数参数 在C语言中,main函数可以带参数。main函数的原型通常为以下两种形式…...

解释什么是Web组件化开发及其优势

解释什么是Web组件化开发及其优势 Web组件化开发,是一种将Web应用的界面和功能拆分为独立、可复用的组件的开发方法。这种方法的核心思想是将大型、复杂的Web应用拆分为一系列小型、功能单一的组件,每个组件都负责处理特定的业务逻辑或界面表现。通过组…...

那些场景需要额外注意线程安全问题

主要学习那些场景需要额外注意线程安全问题,在这里总结了四中场景。 访问共享变量或资源 第一种场景是访问共享变量或共享资源的时候,典型的场景有访问共享对象的属性,访问static静态变量,访问共享的缓存,等等。因为…...

(C语言)球球大作战

前言: 这款简易版的球球大作战是一款单人游戏,玩家需要控制一个小球在地图上移动,吞噬其他小球来增大自己的体积。本游戏使用C语言和easyx图形库编写,旨在帮助初学者了解游戏开发的基本概念和技巧。 在开始编写代码之前&#xf…...

高级数据结构 <AVL树>

本文已收录至《数据结构(C/C语言)》专栏! 作者:ARMCSKGT 目录 前言正文AVL树的性质AVL树的定义AVL树的插入函数左单旋右单旋右左双旋左右双旋 检验AVL树的合法性关于AVL树 最后 前言 前面我们学习了二叉树,普通的二叉树没有任何特殊性质&…...

在springboot中利用Redis实现延迟队列

文章目录 前言一、基本思路二、springboot实现案例三、测试总结 前言 在开发过程中,有很多场景都需要用到延迟队列来解决。目前支持延迟队列的中间件也不少,特别是基于JMS模式下的消息中间件基本上都支持延迟队列。但是有时我们项目规模可能比较小&…...

UpGrow评论:AI能将我的Instagram粉丝数增加10倍吗?

UpGrow Review: Can AI Grow My Instagram Followers 10X? 概述 UpGrow是一款专注于Instagram增长的AI驱动型社交媒体工具。它通过其庞大的300多人的网络,先进的定位功能,实时分析以及卓越的客户服务,帮助用户有机地增长Instagram关注者。…...

申请软著提交的演示视频有什么要求

申请软件著作权时,演示视频是一个重要的材料,主要用于展示软件的功能和操作流程。演示视频的要求可能会根据不同的申请机构和项目有所不同,但一般来说,以下是几个常见的要求: 内容完整性:演示视频需要展示…...

mac【启动elasticsearch报错:can not run elasticsearch as root

mac【启动elasticsearch报错:can not run elasticsearch as root 问题原因 es默认不能用root用户启动,生产环境建议为elasticsearch创建用户。 解决方案 为elaticsearch创建用户并赋予相应权限。 尝试了以下命令创建用户,adduser esh 和u…...

面试算法-65-二叉树的层平均值

题目 给定一个非空二叉树的根节点 root , 以数组的形式返回每一层节点的平均值。与实际答案相差 10-5 以内的答案可以被接受。 示例 1: 输入:root [3,9,20,null,null,15,7] 输出:[3.00000,14.50000,11.00000] 解释:第 0 层的…...

Linux: boot: latency启动延迟分析

https://elinux.org/images/6/64/Chris-simmonds-boot-time-elce-2017_0.pdf https://www.hcltech.com/sites/default/files/documents/resources/whitepaper/files/an_insight_to_optimize_embedded_linux_boot_time_performance.pdf 无意看到这个启动延迟分析,虽…...

QT界面制作

#include "widget.h" #include "ui_widget.h"Widget::Widget(QWidget *parent): QWidget(parent), ui(new Ui::Widget) {ui->setupUi(this);this->setWindowFlag(Qt::FramelessWindowHint);//接收动图QMovie *mv new QMovie(":/pictrue/th.gif…...

进阶二叉树

目录 二叉树 二叉搜索树 二叉搜索树的定义 二叉搜索树的操作 哈夫曼树 哈夫曼树的定义 哈夫曼树的构造 哈夫曼树的性质 平衡二叉树 平衡二叉树的定义: 平衡二叉树的插入调整 1.LL插入/LL旋转 2.RR插入/RR旋转 3.LR插入/LR旋转 4.RL插入/RL旋转 二叉树…...

无人机拦截

配置yolo CUDA报错 nvcc fatal : Unsupported gpu architecture compute_30.(1)查看显卡匹配型号:https://blog.csdn.net/u013308762/article/details/121658823 (2)查看显卡:nvidia-smi -a 》NVIDIA GeF…...

CSDN 编辑器设置图片缩放和居中

CSDN 编辑器设置图片缩放和居中 文章目录 CSDN 编辑器设置图片缩放和居中对齐方式比例缩放 对齐方式 Markdown 编辑器插入图片的代码格式为 ![图片描述](图片路径)CSDN 的 Markdown 编辑器中插入图片,默认都是左对齐,需要设置居中对齐的话,…...

国防科技大学计算机基础课程笔记02信息编码

1.机内码和国标码 国标码就是我们非常熟悉的这个GB2312,但是因为都是16进制,因此这个了16进制的数据既可以翻译成为这个机器码,也可以翻译成为这个国标码,所以这个时候很容易会出现这个歧义的情况; 因此,我们的这个国…...

7.4.分块查找

一.分块查找的算法思想: 1.实例: 以上述图片的顺序表为例, 该顺序表的数据元素从整体来看是乱序的,但如果把这些数据元素分成一块一块的小区间, 第一个区间[0,1]索引上的数据元素都是小于等于10的, 第二…...

Lombok 的 @Data 注解失效,未生成 getter/setter 方法引发的HTTP 406 错误

HTTP 状态码 406 (Not Acceptable) 和 500 (Internal Server Error) 是两类完全不同的错误,它们的含义、原因和解决方法都有显著区别。以下是详细对比: 1. HTTP 406 (Not Acceptable) 含义: 客户端请求的内容类型与服务器支持的内容类型不匹…...

反向工程与模型迁移:打造未来商品详情API的可持续创新体系

在电商行业蓬勃发展的当下,商品详情API作为连接电商平台与开发者、商家及用户的关键纽带,其重要性日益凸显。传统商品详情API主要聚焦于商品基本信息(如名称、价格、库存等)的获取与展示,已难以满足市场对个性化、智能…...

【人工智能】神经网络的优化器optimizer(二):Adagrad自适应学习率优化器

一.自适应梯度算法Adagrad概述 Adagrad(Adaptive Gradient Algorithm)是一种自适应学习率的优化算法,由Duchi等人在2011年提出。其核心思想是针对不同参数自动调整学习率,适合处理稀疏数据和不同参数梯度差异较大的场景。Adagrad通…...

React第五十七节 Router中RouterProvider使用详解及注意事项

前言 在 React Router v6.4 中&#xff0c;RouterProvider 是一个核心组件&#xff0c;用于提供基于数据路由&#xff08;data routers&#xff09;的新型路由方案。 它替代了传统的 <BrowserRouter>&#xff0c;支持更强大的数据加载和操作功能&#xff08;如 loader 和…...

云启出海,智联未来|阿里云网络「企业出海」系列客户沙龙上海站圆满落地

借阿里云中企出海大会的东风&#xff0c;以**「云启出海&#xff0c;智联未来&#xff5c;打造安全可靠的出海云网络引擎」为主题的阿里云企业出海客户沙龙云网络&安全专场于5.28日下午在上海顺利举办&#xff0c;现场吸引了来自携程、小红书、米哈游、哔哩哔哩、波克城市、…...

工程地质软件市场:发展现状、趋势与策略建议

一、引言 在工程建设领域&#xff0c;准确把握地质条件是确保项目顺利推进和安全运营的关键。工程地质软件作为处理、分析、模拟和展示工程地质数据的重要工具&#xff0c;正发挥着日益重要的作用。它凭借强大的数据处理能力、三维建模功能、空间分析工具和可视化展示手段&…...

Android 之 kotlin 语言学习笔记三(Kotlin-Java 互操作)

参考官方文档&#xff1a;https://developer.android.google.cn/kotlin/interop?hlzh-cn 一、Java&#xff08;供 Kotlin 使用&#xff09; 1、不得使用硬关键字 不要使用 Kotlin 的任何硬关键字作为方法的名称 或字段。允许使用 Kotlin 的软关键字、修饰符关键字和特殊标识…...

LLMs 系列实操科普(1)

写在前面&#xff1a; 本期内容我们继续 Andrej Karpathy 的《How I use LLMs》讲座内容&#xff0c;原视频时长 ~130 分钟&#xff0c;以实操演示主流的一些 LLMs 的使用&#xff0c;由于涉及到实操&#xff0c;实际上并不适合以文字整理&#xff0c;但还是决定尽量整理一份笔…...