积分交易网站开发,群晖手动安装wordpress,wordpress语言包插件,个人网站不能放广告怎么赚钱最近调试音频驱动#xff0c;顺便整理学习了一下i2s、alsa相关知识#xff0c;整理成了几篇文章#xff0c;后续会陆续更新。
喜欢嵌入式、Li怒晓得老铁可以关注一口君账号。
1. 音频常用术语
名称含义ADC#xff08;Analog to Digit Conversion#xff09;模拟信号转换…最近调试音频驱动顺便整理学习了一下i2s、alsa相关知识整理成了几篇文章后续会陆续更新。
喜欢嵌入式、Li怒晓得老铁可以关注一口君账号。
1. 音频常用术语
名称含义ADCAnalog to Digit Conversion模拟信号转换为数字信号AECAcoustic Echo Cancellor回声消除AGCAutomatic Gain Control自动增益补偿调整MIC收音量ALSAAdvanced Linux Sound Architecture高级Linux声音架构ANSAutomatic Noise Suppression背景噪音抑制ANS可探测出背景固定频率的杂音并消除背景噪音BCKBit Clock Line位时钟对应数字音频的每一位数据。标准称为SCKSerial Clock串行时钟。SCK2x采样频率x采样位数CodecCoder/DecoderDACDigit to Analog Conversion数字信号转换为模拟信号DAIDigital Audio Interface数字音频接口DAPMDynamic Audio Power Management动态电源管理DAPM可使基于linux的移动设备上的音频子系统在任何时候都工作在最小功耗状态DRCDynamic Range Control动态压缩将音频输出控制在一定范围内DSPDigital Signal ProcessorEQEqualiser均衡器通过对声音某一个或多个频段进行增益或衰减达到调整音色的目的I2SInter-IC SoundIC间传输数字音频资料的一种接口标准采用序列的方式传输2组左右声道Codec与CPU间音频的通信协议/接口/总线LRCKLeft-Right Clock帧时钟用于切换左右声道数据0左声道1右声道。标准称为WS(World Select)声道选择或称为FSFrame Sync帧同步LRCK的频率采样频率MCLKMaster Clock主时钟一般MCLK256*LRCK。不是I2S标准中的一部分主要用来同步模拟/数字转换器的内部操作Mixer混音器将来自不同通道的几种音频模拟信号混合成一种模拟信号Mono单声道Mute消音屏蔽信号通道OSS(Open Sound System)开放声音系统老的Linux音频体系结构被ASLA取代并兼容PCMPulse Code Modulation脉冲编码调制一种从音频模拟信号转换成数字信号的技术区别于PCM音频通信协议I2S是PCM的子集ramp逐步增加或减少音量等级避免声音急速变化用于暂停或恢复音乐SSISerial Sound InterfaceStereo双声道TDMTime Division Multiplexing时分复用。I2S最多只能传2声道数据TDM最多支持16通道
2. Pcm playback 、capture
PCM 是英文 Pulse-code modulation 的缩写中文译名是脉冲编码调制。PCM就是要把声音从模拟转换成数字信号的一种技术简单的来说就是利用一个固定的频率对模拟信号进行采样采样后的信号的幅值按一定的采样精度进行量化量化后的数值被连续地输出、传输、处理或记录到存储介质中。
PCM 信号的两个重要指标是采样频率和量化精度。
通常播放音乐时用程序从存储介质中读取音频数据(MP3、WMA、AAC…)经过解码后最终送到音频驱动程序中的就是PCM数据反过来在录音时音频驱动不停地把采样所得的PCM数据送回给应用程序由应用程序完成压缩、存储等任务。所以音频驱动的两大核心任务就是 playback 如何把用户空间的应用程序发过来的PCM数据,转化为人耳可以辨别的模拟音频 capture 把mic拾取到得模拟信号,经过采样、量化,转换为PCM信号送回给用户空间的应用程序。
3. 声音要素
声音三要素 - 音调、响度、音色 1、音调 “刺耳、低沉”这其实是我们对声音高低的感觉描述这一特征我们称之为音调。 在物理定义上声音是物体振动比如我们的声带产生的波而音调由发声体振动的频率决定频率越高振动越快则音调越高听起来就越“刺耳”反之音调越低、听起来就越低沉。 我们声带的振动频率约在100Hz~10KHz之间基本对应于常说的男低音至女高音的频率。 而我们耳朵的听力范围仅限于频率20Hz ~ 20KHz低于或者高于这个频率范围的声音分别被称为次声波20Hz和超声波20KHz无法被人耳感知。不难发现虽然人耳的感知范围有限但人类的发声频率完全包含于人耳的感知范围之内这意味着任何人说的话总能被耳朵捕捉到每个人都有发声的权力也总有一双耳朵能倾听到你的声音。 2、响度 “响亮、微弱”是我们对声音强弱的感觉描述这种特征我们称之为响度。响度由发声体振动的幅度决定当传播的距离相同时振动幅度越大、则响度越大相反当振幅一定时传播距离越远响度越小就是我们常说的“距离太远了听不见”的原因。 3、音色 “风声、雨声、人声”是我们对各种音调、各种响度声音的综合感受这种特征我们称之为“音色”。音色是一种“感官属性”我们利用这种“感官属性”能区分发声的物体发声的状态还能评价听感上的优劣比如“钢琴声、二胡声”比如“只闻其声如见其人”比如“悦耳、动听”等等。那么音色是怎么“产生”的又由什么“决定”呢前面我们了解到声音是由物体振动产生的波而物体整体振动发出的只是基音其各部分还有复合的振动这些复合的振动也会发出声音并形成泛音基音泛音的不同组合就产生了多样化的音色声音世界才变得丰富多彩起来。我们一般认为音色由发声体的材质决定。 4. 声音采样-ADC/DAC 处理器要想“听到”外界的声音必须要把外界的声音转化为自己能够理解的“语言”处理器能理解的就是 0 和 1也就是二进制数据。
所以我们需要先把外界的声音转换为处理器能理解的 0 和 1在信号处理领域外界的声音是模拟信号处理器能理解的是数字信号因 此这里就涉及到一个模拟信号转换为数字信号的过程而完成这个功能的就是 ADC 芯片。
1采样
以一定采样率在时间轴上对模拟信号进行数字化。
首先我们沿着时间轴按照固定的时间间隔 T假设 T0.1s依次取多个点如图中 1~10 所对应波上的点。
此时 T 称为取样周期T 的倒数为本次取样的采样率f1/T10Hzf 即表示每秒钟进行采样的次数单位为赫兹Hz。显然采样率越高、单位时间的采样点越多就能越好的表示原波形如果高频率、密集地采集无数个点就相当于完整地记录了原波形。
2量化
以一定精度在幅度轴上对模拟信号进行数字化。
完成采样后我们接下来进行音频数字化的第二步量化。采样是在时间轴上对音频信号进行数字化得到多个采样点而量化则是在幅度方向上进行数字化得到每个采样点的幅度值。
如下图所示我们设定纵轴的坐标取值范围为 0 ~8得到每个采样点的纵坐标向上取整这里的坐标值即为量化后的幅度值。 因为我们将幅度轴分为了 8 段有 8 个值用于量化取整即本次量化的精度为 8。
显然如果分段越多则幅度的量化取值将越准确取整带来的误差就越小也能越好的表示原波形。对于幅度的量化精度有一个专有术语描述 – 位深我们后面会详细说明。 3编码
编码是整个声音数字化的最后一步其实声音模拟信号经过采样量化之后已经变为了数字形式但是为了方便计算机的储存和处理我们需要对它进行编码以减少数据量。
常见的音频编码格式有PCM、PDM。
经过量化后我们得到了每个采样点的幅度值。接下来就是音频信号数字化的最后一步编码。编码是将每个采样点的幅度量化值转化为计算机可理解的二进制字节序列。
如下图所示参照编码部分的表格样本序号为样本采样顺序样本值十进制为量化的幅度值。而样本值二进制即为幅度值转换后的编码数据。最终我们就得到了“0”、“1”形式的二进制字节序列也即离散的数字信号。
这里得到的是未经压缩的音频采样数据裸流也叫做PCM 音频数据(Pulse Code Modulation脉冲编码调制)。实际应用中往往还会使用其他编码算法做进一步压缩以后的文章我们会再展开讨论。 同理如果处理器要向外界传达自己的“心声”也就是放音那么就涉及到将处理器能理解的 0 和 1 转化为外界能理解的连续变化的声音这个过程就是将数字信号转化为模拟信号而完成这个功能的是 DAC 芯片。
5. 音频数字信号质量三要素
1采样率
音频采样率指的是单位时间内1s对声音信号的采样次数参考数字化过程-采样。常说的 44.1KHz 采样率也即 1 秒采集了 44100 个样本。
我们前面了解到采样率越高、采样点越多就可以越好的表示原波形这就是采样率的影响。
参考奈奎斯特采样定理采样率 f必须大于原始音频信号最大振动频率fmax 的 2 倍也即 f 2fmaxfmax 被称为奈奎斯特频率采样结果才能用于完整重建原始音频信号如果采样率低于 2fmax那么音频采样就存在失真。
比如要对最高频率fmax8KHz 的原始音频进行采样则采样率 f 至少为 16KHz。
对于最大频率为 f 的音频信号当我们分别采用 f、2f、4f/3 的采样率进行采样时所得到的采样结果参考下图。显然只有当采样率为 2f 时才能有效的保留原信号特征。采样率 f 和3f/4 下得到的结果都和原波形差别很大。 那么我们需要多大的采样率
按前面的讨论采样率似乎越大越好是否如此呢理论上来说最低采样率需要满足奈奎斯特采样定理在该前提下采样率越高则保留的原始音频信息越多声音自然就越真实。
但需要注意的是采样率越高则采样得到的数据量越大对存储和带宽的要求也就越高。在实际应用中我们为了平衡带宽和音质不同场景往往会有不同的选择。常见的选择如下
采样率描述8KHz在语聊、通话场景满足基本的沟通目的同时有效减少数据量、兼容各种传输/存储环境。人说话声音频率一般在300-700Hz之间最大区间一般为60Hz-2000Hz 参考奈奎斯特定理8KHz采样率完全足够16KHz、32KHz在保证基本沟通的基础上进一步提升音质同时平衡带宽、存储的压力。某些音频处理算法会要求使用32KHz的采样率44.1KHz48KHz在比如在线KTV、音乐教学等场景对音质要求比较高可考虑进一步提升采样率。人耳可识别的声音频率范围为 20Hz ~ 20KHz根据奈奎斯特采样定理理论上采样率大于40KHz则完全足够。实际应用中44.1KHz 可满足绝大多数的音视频应用场景。我们一般将 44.1kHz作为CD音质的采样标准96KHz、192KHz更特殊的应用比如需要对采集的音频进行后期加工、二次处理等。96KHz、192KHz等采样率对于人耳听感来说已无明显的提升反而会增大存储、带宽的压力对采集/播放设备也有较高要求RTC场景一般不考虑
当采样率从 8KHz 翻倍至 16KHz 时听感明显变得更清晰、空灵和舒适。
此时采样率的提升带来了明显的音质提升。而采样率从 16KHz 提升至 44.1KHz 时实际听感却好像没有太大的变化这是因为采样率到达一定程度后音频质量已经比较高再往上提升带来的优化已经很细微。
借助专业的频谱分析软件或许可以观察到高频谱区域的能量差异但对于人耳来说已经很难进行区分。所以实际应用中我们不需要一味追求高采样率而是要综合带宽、性能、实际听感选择合适的配置即可。
2采样位深/量化精度
位深度也叫位宽量化精度。
指的是在音频采集量化过程中每个采样点幅度值的取值精度一般使用bit作为单位。
常见的位宽有8bit或者16bit。
比如当采样位深为 8bit则每个采样点的幅度值可以用 2^8256 个量化值表示采样位深为 16bit 时则每个采样点的幅度值可以用 2^1665536 个量化值表示。
显然16bit 比 8bit 可存储、表示的数据更多、更精细量化时产生的误差损失就越小。位深影响声音的解析精度、细腻程度我们可以将其理解为声音信号的“分辨率”位深越大音色也越真实、生动。
采样位深选择 和采样率的选择类似虽然理论上来说位深越大越好但是综合带宽、存储、实际听感的考虑我们应该为不同场景选用不同的位深。
采样率描述8bit早期常用的位深精度可满足基础的通话音质需求16bit被认为是达到专业音频质量的位深标准足够完整地收录绝大多数音频场景的动态变化适用范围广。和44.1KHz采样率一起被作为CD音质的标准24bit、32bit、64bit对于使用常见播放设备手机、普通音箱的用户来说32bit与16bit的感官差异很细微音质上的提升不明显反而带来了更大的带宽、存储压力更不用说64bit。并不需要盲目追求
3声道数
我们常说的单声道、双声道其实就是在描述一个音频信号的声道数分别对应于声道数 1 和 2。
声波是可以叠加的音频的采集和播放自然也如此我们可以同时从多个音频源采集声音也可以分别输出到多个扬声器声道数一般指声音采集录制时的音源数量或播放时的扬声器数量。
除了常见的声道数1、2PC上还有468等声道的扩展。一般来说声道数越多声音的方向感、空间感越丰富听感也就越好。
目前很多手机厂商已经将双声道扬声器作为旗舰标配。在RTC音乐场景越来越多的应用也开始采用双声道配置其目的也是进一步提高听感给用户更好的体验。
声道数的选择 实时音视频场景下声道的选择受限于编解码器、前处理算法的能力一般仅支持单、双声道。而双声道配置主要在语音电台、音乐直播、乐器教学、ASMR 直播等场景使用其它场景单声道即可满足。
当然最终能否使用哪一种声道配置还是由实际采集、播放设备的能力决定。解码音频数据时可以获取数据的声道数在实际播放时也要先获取设备属性。
如果设备支持双声道但待播放数据是单声道的就需要将单声道数据转成双声道数据再播放同理如果设备只支持单声道但数据是双声道的也需要将双声道数据转换成单声道数据再播放。
目前CD音频的采样频率通常为 44100 Hz,量化精度是 16bit。
6. 音频码率
数字音频的三要素不仅影响音频质量也会影响音频存储、传输所需的空间、带宽。而实际应用场景下音质决定用户体验、带宽决定成本都是我们必须考虑到。
音质可能更多是主观上的感受但带宽、空间是比较容易量化的我们需要了解音频码率的概念。
音频码率又称为比特率指的是单位时间内一般为1s所包含的音频数据量可以通过公式计算。
数据传输率数据传输率bps 采样频率 × 量化位数 × 声道数。声音信号的数据量数据量byte 数据传输率 * 持续时间 / 8。比如采样率 44.1K Hz位深16bit、双声道音频PCM数据它的原始码率为
原始码率 采样率/s x 位深/bit x 声道数 x 时长(1s)44.1 * 1000 * 16 * 2 * 1 1411200 bps 1411.2 kbps 1.411 Mbps 需要注意单位之间的差异和转换bbit如果一个PCM文件时长为1分钟则传输/存储这个文件需要的数据量为
1.411 Mbps * 60s 86.46Mb上述计算结果是未经压缩的、原始音频PCM数据的码率。
RTC场景下往往还需要再使用 AAC、OPUS 等编码算法做编码压缩进一步减小带宽、存储的压力。码率的选择也是一个综合质量和成本的博弈。
7. 噪声抑制 有上图所示 1、某一时刻用户 A 开始说话产生的语音 A 被麦克风 A 采集、并通过网络传输给用户 B成为待播放的语音 A1
2、语音 A1 被扬声器 B 播放后通过直射、周围环境反射等方式最终又被麦克风 B 采集为语音 A2图中的回声 A2
3、被回采的语音 A2会通过网络传再输给用户 A并通过扬声器 A 播放出来
经过上述过程用户 A 会发现自己刚说完一句话过一会儿居然又听到了自己的“复述”这就是 RTC 场景下的“回声”现象。
噪声抑制技术用于消除背景噪声改善语音信号的信噪比和可懂度让人和机器听得更清楚。
8. I2S
I2S(Inter-IC Sound)总线有时候也写作 IIS I2S 是飞利浦公司提出的一种用于数字音频设备之间进行音频数据传输的总线。
I2S 总线用于主控制器譬如 ZYNQ 7010/7020和音频 CODEC 芯片之间传输音频数据主控制器和音频 CODEC 都得支持 I2S 协议 。
在I2S总线上只能同时存在一个主设备和发送设备主设备可以是发送设备或接收设备。
I2S是PCM的一个分支接口定义相同。
I2S的采样率一般为44.1/48KHZPCM采样频率一般为8/16KHZ等。
I2S接口有4组信号SCK(位时钟)、LRCK(帧时钟)、SDI/SDO数据。
LRCLK
采样时钟也叫WS(Word Select)字段选择线帧时钟 (LRC) 线
用于切换左右声道数据
1 传输左声道的数据0 表示正在传输右声道的数据
WS的频率等于采样频率比如采样率为44.1KHz的音频WS44.1KHz
SCLK/BCLK
串行时钟信号也叫位时钟BCLK、CK(Serial Clock)
数字音频的每一位数据都对应有一个 CK脉冲它的频率为 2* 采样频率 * 量化位数 2 代表左右两个通道数据
比如采样频率为44.1KHz、 16位的立体声音频那么
SCK2×44100×161411200Hz1.4112MHz SD/DATA
SD(Serial Data)串行数据线
用于发送或接收两个时分复用的数据通道上的数据 (仅半双工模式)如果是全双工模式该信号仅用于发送数据。
MCLK
MCLK Master/System clock input也叫做主时钟或系统时钟音频 CODEC 芯片与主控制器之间同步用一般是采样率的 256 倍或 384 倍。
之所以引入MCLK。这是由CODEC内部基于Delta-Sigma (ΔΣ)的架构设计要求使然其主要原因是因为这类的CODEC没有所谓提供芯片的工作时钟晶振电路需要使用控制器为编解码芯片提供的系统时钟。
如果使用MCLK时钟的话MCLK时钟频率一般为采样频率的256倍或384倍具体参考特定器件手册。
下图为一帧立体声音频时序图
逻辑分析仪抓到的数据帧 通道 0 是 LRCK 时钟通道 1 为 BCLK通道 2 是 DACDATA通道 3 是MCLK。
9. codec
处理器如果要想播放或者采集声音 需要用到 DAC 和 ADC 这两款芯片。
那是不是买两颗 DAC 和 ADC 芯片就行了呢
答案肯定是可以的但是音频不单单是能出声、能听到就行。
我们往往需要听到的声音动听、录进去的语音贴近真实、可以调节音效、对声音能够进行一些处理(需要 DSP 单元)、拥有统一的标准接口方便开发等等。
将这些针对声音的各种要求全部叠加到 DAC 和ADC 芯片上那么就会得到一个专门用于音频的芯片也就是音频编解码芯片英文名字就是 Audio CODEC。
codec芯片举例
wolfson(欧胜) 的WM8960顺芯的es8388、es8396瑞芯微的rk809Codec里面包含了I2S接口、D/A、A/D、Mixer、PA功放通常包含多种输入Mic、Line-in、I2S、PCM和多个输出hpheadphone耳机、spkSpeak喇叭、听筒Line-out
下图是codec es8396芯片的模块图。 10. dai
dai(digital audio interface)
数字音频接口全部是硬件接口是实实在在的物理连线方式即同一个PCB板上IC芯片和IC芯片之间的通讯协议。和音频编码格式完全是两回事。
数字音频接口有PCM、I2S、AC97、PDM
I2S和PCMTDM接口传输的数据是PCM编码格式的音频数据PDM接口传输的数据是PDM编码格式的音频数据
下图是数字音频接口硬件接线的一般场景