音频技术知识-基础
一、音频术语1、PCM是什么简单说PCM就是把声音“翻译”成电脑能懂的数字。翻译过程采样、量化、编码PCMPulse Code Modulation又称脉冲编码调制是一种用于数字通信和音频记录的技术。PCM通过对模拟信号进行采样、量化、编码将连续的模拟信号转换为离散的数字信号从而实现信号的高保真传输和存储。自然界中的声音通过麦克风等采集设备处理后首先会将声音信号转换成电信号但此时的电信号是连续的模拟信号将这些音频模拟信号在坐标系表示就类似于下图然而计算机只认识0和1这样连续的模拟信号要被计算机传输或存储等处理的话就需要先转换成数字信号。通过模数转换器(A/D)将音频模拟信号转换成数字信号后就可以被计算机处理经过模数转换器处理后的音频数字信号就是PCM是声音的原始数据。在音视频编程中常被称为音频裸数据它还可以继续被编码或封装成其他格式的音频数据如wav、mp3、aac、ogg计算机处理后的数字音频信号再通过数模转换器(D/A)转换成音频模拟信号最后通过扬声器等设备转成声音信号进行播放。把电脑想象成一个工厂声音就是原材料。第一步收货模数转换A/D自然界的声音是连绵不断的“水流”模拟信号电脑这个“工厂”只认“乐高积木”数字信号0和1。所以需要一台“水流切片机”模数转换器把连续的水流切成一片一片的再给每片标上精确的尺寸数字。切好并标好数字后的这些“积木块”就是PCM数据——它是声音最原始、最赤裸的形态也叫“音频裸数据”。第二步加工或储存拿到这些“裸数据”积木后电脑就可以随便处理了。你可以直接堆成原始模型存成.wav也可以压缩打包节省仓库空间压成.mp3、.aac等或者通过网络传给别的工厂。第三步发货数模转换D/A当需要让人听到声音时电脑不能直接把0和1扔给人耳。需要另一台“积木还原机”数模转换器把那些标着数字的积木块重新拼成一条连续的水流模拟信号再通过“水龙头”扬声器喷出来变成我们能听到的声音。2、PCM编码过程-采样因为声音是连续性数据需要将其转换为离散型数据因此需要每隔一个时间(很微小的时间)采取一个点的数据保存这就是采样。每个时间内容(1s内)采样多少次就是采样率例如每秒采样100次就是采样率。如图所示采样就是将模拟信号的音频连续性数据转换成数字信号音频离散型数据的过程通过模/数转换器A/D对声波进行采样每一次采样都记录下了原始模拟声波在某一时刻的状态称之为样本将一串的样本连接起来就可以描述一段声波。把每一秒钟所采样的次数称为采样频率单位为HZ赫兹。其实采样就是在时间轴上对信号进行数字化。采用过程如上图用若干个黑点来表示红色的曲线。红色的曲线是音频模拟信号各个黑点就是样本。采样率每一秒钟所采样的样本个数如果每秒所采集的样本越多越能精确的表示曲线。常见的采样率有8000Hz常用于电话语音通信。电话系统对音质要求相对不高该采样率能满足基本语音通话需求有效降低数据传输量和存储成本 。16000Hz在一些对音质有一定要求的语音录制场景使用如部分语音助手的音频采集相比 8000Hz 能更好还原语音细节。44.1kHz是音频 CD 的标准采样率。它能较好还原人耳可听范围的声音涵盖了音乐等丰富音频内容所需频率范围是音乐制作、消费级音频存储播放常见采样率 。48kHz广泛应用于专业音频录制、影视制作等领域。像电影音频制作、录音棚专业录制等该采样率与视频帧率配合较好且能提供高质量音频录制效果 。96kHz和192kHz属于高分辨率音频采样率。用于对音质要求极高的专业音频制作如高端音乐录制、母带处理等。高采样率能更精准捕捉声音细节提供更宽广频率响应和动态范围但数据量大幅增加 。3、PCM编码过程-量化位宽就是尺子的精细度——格子越多量得越准声音越真但数据也越多。就像照片像素像素越高越清楚但照片也越大。把声音想象成一把“音量尺”。16位这把尺子上有 2的16次幂 即65536个刻度从-32768到32767每个刻度都特别细就像用毫米尺量东西量得特别准。声音的高低起伏都能记下来音质好但记录的内容多文件就大。8位这把尺子上只有2的8次幂 即256个刻度从0到255就像用厘米尺量东西大概其能知道多高多矮细的地方就凑合了。声音细节少一些音质普通但文件小省地方。8位尺子的特殊情况普通8位尺子是0~2550是最小声255是最大声。如果标“有符号”的就是-128~127相当于把0刻度放在中间上下各一半。16位尺子固定是 -32768~32767最高一格用来标是正数还是负数。量化就是为采集的样本确定一个取值范围。比如用16比特的二进制信号来表示声音的一个样本 而16比特一个short 所表示的范围是[-3276832767] 共有65536个可能取值 因此最终音频的数字信号在幅度上也分为了65536层。而如果用8比特的二进制信号来表示声音的一个样本8比特(一个unsigned char)所表示的范围是[0,255]共有256个层级。注意在8位的PCM音频数据中样本的取值范围是从0到255。对于有符号的8位PCM编码取值范围为-128到127。每个样本使用一个8位字节来表示其幅度值其中最低位LSB表示0最高位MSB表示255。这种编码方式使得正负幅度能够均匀地分布在取值范围内方便存储和处理。如果没有明确指定是有符号还是无符号的情况下通常默认为无符号的0到255取值范围。在16位PCM音频数据中样本的取值范围是-32768到32767。16位PCM音频数据使用两个字节16个比特来表示每个样本的取值其中一个比特用于表示正负号16位中最高位为符号位。位宽越大能够描述声音的振幅层次越多也就能保留更多原始声音信号的细节但是响应大存储和处理的开销也会越大。4、PCM编码过程-编码想象你去菜市场买菜采样 你每隔一会儿看一眼秤上的重量比如0.5kg、0.6kg、0.55kg…。量化 你把这些重量四舍五入成固定的刻度比如精确到两0.5kg、0.6kg…。编码 你拿出小本本按固定格式记下来“第一笔土豆0.5kg5块钱第二笔白菜0.6kg3块钱……”你可以按顺序记顺序存储也可以把同类东西归到一起记压缩存储。但不管怎么记本子上写的都是统一的数字和文字二进制码。放到声音上采样和量化做完声音就变成了一串数字比如-3, 5, -2, 7, -4…。编码就是把这串数字按固定规则写成计算机认识的0和1比如规定好每个数字用16位二进制表示正数怎么写、负数怎么写顺序怎么排。写完之后这串0和1就是PCM数据——声音的原始“电子账本”。编码就是按照一定的格式记录采样和量化后的样本数据将量化后的数字信号转换为二进制码的过程。比如顺序存储或压缩存储等等。采样、量化后的数据经过编码后产生的二进制数据就是PCM数据。5、PCM相关的音频参数想象你去一家饮品店买奶茶店员记了一笔“声音订单”1. 采样率 “每隔多久看一眼杯子的刻度”如果店员每秒看1次1Hz就只能知道大概的水位变化声音听起来像卡顿的幻灯片。如果每秒看48000次48kHz就能把水位每一瞬间的变化都记下来声音连续又顺滑。一句话采样率越高声音“画面”越流畅细节越丰富。2. 位深度 “量杯上的刻度有多细”8位256格 量杯上只有厘米刻度大概知道水位高低但细微抖动看不出。16位65536格 量杯上有毫米刻度水位哪怕只动了一丁点都能记录下来。一句话位深度越大声音的“精细度”越高音量变化的层次更丰富。3. 声道数 “用了几个麦克风同时记录”单声道 只用了1个麦克风像一个人站在你面前说话声音从中间来。立体声 用了2个麦克风左右各一个像你坐在音乐厅中间左右耳听到不同声音有空间感。5.1/7.1声道 用了更多麦克风围成一圈像在电影院声音从四面八方包围你。一句话声道越多声音的“空间感”和“方位感”越强。4. 字节序 “数字怎么往本子上写”假如有一个16位的数字高8位是“12”低8位是“34”大端序 按正常习惯写先写“12”再写“34”高位在前。小端序 倒着写先写“34”再写“12”低位在前。电脑里必须统一用一种规则不然读数据时会“看反”导致声音错乱。一句话字节序就是“写数字时的前后顺序”约好了大家都按同一个规矩来。5. 是否有符号 “刻度尺有没有正负号”有符号 刻度尺中间是0左边负、右边正比如-32768 ~ 32767。适合记录声音波形正负对应声波的“推”和“拉”。无符号 刻度尺从0开始到正数比如0 ~ 255只有正方向。通常老式设备或8位音频用这种。一句话有符号像温度计有零上零下无符号像身高尺只能从0往上量。采样率Sampling Rate表示每秒钟采样的样本数量单位为赫兹Hz。它决定了PCM音频的时间分辨率和频率范围。位深度Bit Depth也叫位宽表示每个样本的取值精度通常以位数表示。它决定了PCM音频的动态范围和信噪比一般为16bit。声道数Number of Channels表示PCM音频中的独立声道数量。常见的声道数有单声道Mono和立体声Stereo还可以有更多声道如5.1声道、7.1声道等。字节序Byte OrderPCM 字节序指的是在存储 PCM脉冲编码调制音频数据时字节的排列顺序位深度非8位时需要考虑。主要分为大端序Big - Endian和小端序Little - Endian 大端序Big - Endian低地址存放最高有效字节MSBMost Significant Bit 。比如对于一个 16 位2 字节的 PCM 数据假设数值用二进制表示为font stylecolor:rgb(0, 0, 0);10101100 01010101/font大端序会将高字节font stylecolor:rgb(0, 0, 0);10101100/font存放在低地址低字节font stylecolor:rgb(0, 0, 0);01010101/font存放在高地址 。这种方式类似于人们习惯的数字书写顺序高位在前。小端序Little - Endian低地址存放最低有效字节LSBLeast Significant Bit 。对于上述 16 位 PCM 数据小端序会先将低字节font stylecolor:rgb(0, 0, 0);01010101/font存放在低地址高字节font stylecolor:rgb(0, 0, 0);10101100/font存放在高地址 。采样数据是否有符号Signed or Unsigned Samples表示每个样本的取值是否包含符号位。有符号PCM样本的取值范围涵盖正负值而无符号PCM样本的取值范围仅包含非负值。以 s16le 为例它描述的是有符号16位小端PCM数据。二、I2S协议简介1、I2S协议简介想象一个乐队演出需要指挥、乐手和音响师紧密配合位时钟BCLK 指挥的节拍器每打一拍就传一个数据位。节拍越快数据传得越快。帧时钟LRCK 指挥的左右手左手挥表示“该左声道了”右手挥表示“该右声道了”。挥一次就传完一个声道的完整数据挥的频率就是采样率比如每秒挥48000次。数据信号SD 乐手演奏的音符在节拍和左右手的指挥下一个接一个地传出去。I2S的核心规则数据比帧时钟晚一个节拍——就像乐手听到指挥抬手后稍微慢半拍再演奏这样接收方能准确判断哪个数据属于哪个声道。一句话总结I2SI2S就是音频设备之间的“标准乐谱”和“指挥手势”让数字音频数据能整齐有序地传输。I2SInter-IC Sound是由飞利浦公司开发的一种数字音频传输协议主要用于连接音频编解码器、数字麦克风和扬声器等音频设备。I2S 协议通过差分信号传输数字音频数据主要包含以下几种关键信号时钟信号位时钟BCLK/SCK用于同步数据传输的时钟信号。帧时钟LRCK/WS用于区分左右声道数据频率等于音频采样率。当 LRCK 为高电平时表示传输左声道数据为低电平时表示传输右声道数据。数据信号串行数据输出SDO/Dout从主设备发送到从设备的音频数据。串行数据输入SDI/Din从从设备接收至主设备的音频数据。2、ESP32-S3对I2S的支持想象ESP32-S3是一个“智能音乐中转站”1. 硬件特性两个控制器I2S0和I2S1 中控台有两个独立工位可以同时处理两路音频比如一路放音乐一路录麦克风。全双工 每个工位可以一边说话一边听同时收发不耽误。独立FIFO缓冲区 每个工位都有自己的临时储物柜数据先暂存再处理不会乱也不会丢。2. 配置参数采样率范围8kHz~192kHz 中转站可以适应不同速度的“指挥频率”——电话音质用8kHzHi-Fi音质用192kHz。数据位宽16/24/32位 中转站可以处理不同精细度的“音符”——16位够用32位更精细。声道数单声道/立体声 可以只接一个麦克风单声道也可以接左右两个立体声。一句话总结ESP32-S3的I2S能力ESP32-S3就像有两个工位、能同时收发、可调速度快慢和精度高低、支持单双声道的“音频数据中转站”灵活适配各种数字音频设备。ESP32 集成了两个 I2S 控制器I2S0 和 I2S1具有以下特性硬件特性支持全双工数据传输可同时进行音频数据的发送和接收。每个 I2S 控制器有独立的发送和接收 FIFO 缓冲区减少数据传输延迟。支持多种音频格式包括I2S 标准格式、左对齐格式和右对齐格式。配置参数采样率范围8kHz 至 192kHz可灵活适应不同音频应用需求。数据位宽支持 16 位、24 位和 32 位满足不同精度的音频数据传输。声道数支持单声道和立体声模式。