概念
PCM(Pulse Code Modulation)也被称为 脉码编码调制。PCM中的声音数据没有被压缩。可以直接播放,不需要解码。如果是单声道的文件,采样数据按时间的先后顺序依次存入。(它的基本组织单位是BYTE(8bit)或WORD(16bit))。如果是双声道的文件,采样数据按时间先后顺序交叉地存入
衡量参数
采样频率(Sample Rate)对应
8kHz(电话)、44.1kHz(CD)、48kHz(DVD)。采样频率(nb_samples):每秒钟取得声音样本的次数。把音频文件放大,实际上都是一个一个的点,一秒钟有多少个横坐标的点,就是该音频的采样频率
对应AVCodecContext结构体中的sample_rate
声道数(Number of Channels)
常见的音频有立体声(stereo)和单声道(mono)两种类型,立体声包含左声道和右声道。另外还有环绕立体声等其它不太常用的类型。
对应AVCodecContext结构体中的channels
采样深度(Sample Size)
比特深度决定了文件的动态分辨率,类似照片分辨率。每个样本所含的比特越多,代表着动态范围越大。这并不意味,比特深度越高,音量越大;而是更高的比特深度听起来会更加真实,因为它们可以尽量减少音频失真度。也叫量化位数。通常该值为16-bit
对应FFmpeg (sample_fmt)
Sign
表示样本数据是否是有符号位,比如用一字节表示的样本数据,有符号的话表示范围为-128 ~ 127,无符号是0 ~ 255。
Byte Ordering
字节序。字节序是little-endian还是big-endian。通常均为little-endian。字节序说明见第4节。
Integer Or Floating Point
整形或浮点型。大多数格式的PCM样本数据使用整形表示,而在一些对精度要求高的应用方面,使用浮点类型表示PCM样本数据。
packed(交错)和planar(平面概念)
假设有一路音频流,有左右两声道的数据。左声道用L表示,右声道用R表示。
存储时,如果是左右声道数据交替存储成一维数组,这种格式称为packed。格式为LRLRLR....LRLR
如果是分开存储成二维数组,这种格式称为planar。格式为LLLLLLLLLLLLLL和RRRRRRRRRRRRR
音频帧
一般情况下,一帧PCM是由1024次采样组成的,这个由采样的编码格式决定的
对应AVCodecContext结构体中的frame_size
对应AVFrame结构体中的nb_samples
ffplay播放
播放pcm原始音频数据
ffplay -f s16le -ac 2 -ar 44100 song.pcm
ffplay -i file.g711a -f alaw -ac 1 -ar 8000
ffplay -i file.g711u -f mulaw -ac 1 -ar 8000
-f:指定pcm数据的格式,s16se(signed 16 bits little endian, 有符号 16 位小端)
ac:指定音频声道数量
ar:指定音频采样频率ffplay -i file.pcm -f s16le -ac 1 -ar 8000
音视频流媒体开发【二十六】ffplay播放器-音频输出和音频重采样 - 简书 (jianshu.com)