音频编解码(PCM、G711A、G711U、AAC)理解

转载于:https://blog.csdn.net/weixin_37779156/article/details/102813455

PCM整理

简介

PCM:又称脉冲编码调制。人耳听到的是模拟信号,PCM是把声音从模拟信号转化为数字信号的技术。原理是用一个固定的频率对模拟信号进行采样,采样后的信号在波形上看就像一串连续的幅值不一的脉冲(脉搏短暂起伏的电冲击),把这些脉冲的幅值按一定的精度进行量化,这些量化后的数值被连续的输出、传输、处理或记录到存储介质中,所有这些组成了数字音频的产生过程(抽样、量化、编码三个过程)。

描述PCM数据的6个参数:

  • Sample Rate : 采样频率。8kHz(电话)、44.1kHz(CD)、48kHz(DVD)。
  • Sample Size : 量化位数。通常该值为16-bit。
  • Number of Channels : 通道个数。常见的音频有立体声(stereo)和单声道(mono)两种类型,立体声包含左声道和右声道。另外还有环绕立体声等其它不太常用的类型。
  • Sign : 表示样本数据是否是有符号位,比如用一字节表示的样本数据,有符号的话表示范围为-128 ~ 127,无符号是0 ~ 255。
  • Byte Ordering : 字节序。字节序是little-endian还是big-endian。通常均为little-endian。字节序说明见第4节。
  • Integer Or Floating Point : 整形或浮点型。大多数格式的PCM样本数据使用整形表示,而在一些对精度要求高的应用方面,使用浮点类型表示PCM样本数据。

PCM数据格式

如果是单声道的音频文件,采样数据按时间的先后顺序依次存入(有的时候也会采LRLRLR方式存储,只是另一个声道的数据为0),如果是双声道的话就按照LRLRLR的方式存储,存储的时候与字节序有关。big-endian模式如下图所示:音频编解码(PCM、G711A、G711U、AAC)理解_第1张图片

字节序

谈到字节序的问题,必然牵涉到两大CPU。那就是Motorola的PowerPC系列CPU和Intel的x86系列CPU。PowerPC系列采用big endian方式存储数据,而x86系列则采用little endian方式存储数据。那么究竟什么是big endian,什么又是little endian? big endian是指低地址存放最高有效字节(MSB,Most Significant Bit),而little endian则是低地址存放最低有效字节(LSB,Least Significant Bit)。

下面用图像加以说明。比如数字0x12345678在两种不同字节序CPU中的存储顺序如下所示: Big Endian 低地址 高地址 -----------------------------------------------------------------------------> | 12 | 34 | 56 | 78 | Little Endian 低地址 高地址 -----------------------------------------------------------------------------> | 78 | 56 | 34 | 12 |

所有网络协议都是采用big endian的方式来传输数据的。所以也把big endian方式称之为网络字节序。当两台采用不同字节序的主机通信时,在发送数据之前都必须经过字节序的转换成为网络字节序后再进行传输。

采样频率、量化精度(采样位数)和声道数

采样频率是设备一秒钟内对模拟信号的采样次数,在主流的采集卡上分为:(8Khz的电话采样率就可以达到人的对话程度)

  • 22.05KHz:无线电广播;
  • 44.1KHz:音频 CD,MP3等;
  • 48KHz:miniDV、数字电视、DVD、电影和专业音频。

人耳能够感觉到的最高频率为20KHz,要满足人耳的听觉要求,则需要每秒进行40K次的采样,即40KHz。常见的CD采样率为44.1KHz。

  • 采样位数比如8bit(现在少见)、16bit(常用)和24bit,指的是描述数字信号所使用的位数。
  • 声道数:声音在录制或播放时在不同空间位置采集或回访的相互独立的音频信号。
  • 单声道 采样数据为8位的短整数(short);
  • 双声道 采样数据为16位的证书,(int),高八位(左声道)和低八位(右声道)分别代表两个声道。
  • [时长]s [采样率]Hz [采样位数]bit * [声道数] / 8 = [文件大小]byte
  • 某音频信号是采样率为8kHz、声道数、位宽为16bit,时长为1s,则音频数据的大小为:1 8000 16 *2 = 256000 bit / 8 = 32000 byte / 1024 = 31.25 KB(双声道)

音频帧

音频和视频不一样,视频每一帧都是一张图像,音频数据是流式的,不同的编码格式各自不同的编码标准,拿PCM和MP3做一个对比。PCM因为没有压缩,根据采样率位宽等数据可以得到每秒的音频数据,并不需要帧的概念;MP3是因为压缩后信息比较多,则有了类似H264的帧概念,每一个帧都有帧头。

MP3原理

录播过程

播放音乐时,应用程序从存储介质中读取音频数据(MP3、WMA、AAC),进过解码后,最终送到音频驱动程序中的就是PCM数据,反过来,在录音是,音频驱动不停地把采样所得到的PCM数据送回给应用程序,有应用程序完成压缩、存储等任务。所以,音频驱动的两大核心任务就是:

  • playback:如何把用户空间的应用程序发货来的PCM数据,转化为人耳可以辨别的模拟音频
  • capture:把mic拾取得到的模拟信号,经过采样、量化,转化为PCM信号送回给用户空间的应用程序。

G711整理

  • g711是一种由国际电信联盟制定的一套语音压缩标准,主要用于电话语音通信,而人声最大频率一般在3.4kHz,所以只要以8k的采样频率对人声进行采样,就可以保证完全还原原始声音。
  • g711的内容是将一个13bit或14bit的样本编码成一个8bit的样本。
  • g711标准主要分两种压缩方法:a-law和mu-law,
  • a-law:将一个13bit的pcm样本压缩成一个8bit的pcm样本。
  • mu-law:将一个14bit的pcm样本压缩成一个8bit的pcm样本。

AAC

1:AAC解码整体流程简述

在主控模块开始运行后,主控模块将AAC比特流的一部分放入输入缓冲区,通过查找同步字得到一帧的起始,找到后,根据ISO/IEC 13818-7所述的语法开始进行Noisless Decoding(无噪解码),无噪解码实际上就是哈夫曼解码,通过反量化(Dequantize)、联合立体声(Joint Stereo),知觉噪声替换(PNS),瞬时噪声整形(TNS),反离散余弦变换(IMDCT),频段复制(SBR)这几个模块之后,得出左右声道的PCM码流,再由主控模块将其放入输出缓冲区输出到声音播放设备。

2:主控模块

主控模块的主要任务是操作输入输出缓冲区,调用其它各模块协同工作。其中,输入输出缓冲区均由DSP控制模块提供接口。输出缓冲区中将存放的数据为解码出来的PCM数据,代表了声音的振幅。它由一块固定长度的缓冲区构成,通过调用DSP控制模块的接口函数,得到头指针,在完成输出缓冲区的填充后,调用中断处理输出至I2S接口所连接的音频ADC芯片(立体声音频DAC和DirectDrive耳机放大器)输出模拟声音。

你可能感兴趣的:(音频编解码,PCM,G.711,G.729,A_LAW,MU_LAW)