一、PCM文件的定义 

  PCM文件:模拟音频信号经模数转换(A/D变换)直接形成的二进制序列
,该文件没有附加的文件头和文件结束标志。Windows的Convert工具能够把PCM音频格式的文件转换成Microsoft的WAV格式的文件。将音频数字化,事实上就是将声音数字化。最常见的方式是透过脉冲编码调制PCM(Pulse
Code Modulation) 。

 
上面这段话是博主在网上摘抄的关于PCM文件的定义。其实PCM简单地来说,就是一种无压缩的原始音频格式,而我们熟知的MP3等格式的音频文件是有压缩的(因为无压缩导致的结果就是占用空间会很大,会极大地增加存贮和传输的成本,所以存贮在电脑上的一般是MP3等压缩格式的文件)。播放器要想播放MP3,AAC,APE,FLAC等格式的音频文件,首先得把它们解码成PCM数据(解码出来后一般是FLT的格式,还要通过重采样转为声卡支持的S16格式),然后才能播放。

 

二、通过FFmpeg命令转换得到PCM文件

  如下图所示,工程目录下有audio1.mp3这个MP3文件,下面我们介绍把它转为PCM文件的方法。



 

在命令提示符cmd.exe中进入当前工程所在目录(ffmpeg.exe和audio1.mp3所在目录),然后输入命令:
ffmpeg -i audio1.mp3 -f s16le audio1.pcm
该命令的作用是把所在路径下的audio1.mp3文件转换为s16(声卡支持该格式)、小端格式的PCM文件:audio1.pcm。

注:
-i 表示设定输入流
-f 表示设定输出格式

执行该命令后,我们发现工程目录下会生成audio1.pcm文件,如下图所示:



 

三、PCM文件分析

 
我们可以看到生成的audio1.pcm文件大小为49.5MB,比audio1.mp3文件的11.2MB大了数倍,如下图所示,证明了PCM文件占用空间比MP3文件要大。





 


 至于audio1.pcm文件大小为49.5MB,这个49.5MB,是可以根据公式算出来的。使用博主的另一篇博文《FFmpeg解封装(解复用)并获取本地媒体文件的信息》
https://blog.csdn.net/u014552102/article/details/81709929
<https://blog.csdn.net/u014552102/article/details/81709929>
中的程序可以看到audio1.mp3的采样频率(音频采样率)为44100Hz,采样位数为16位(这个从音频采样格式:AV_SAMPLE_FMT_S16P可以看出),声道(音频信道数目)为2。时间(音频总时长)为294秒,如下图所示:(在这两篇博客中我们都用同一个audio1.mp3文件,下图摘自我上述的那篇博客)



 

根据PCM文件所占容量的公式:存储量 = (采样频率*采样位数*声道)*时间/8(单位:字节数).

计算得出的audio1.pcm的大小 = (44100 * 16 * 2) * 294 / 8 =  51861600(字节) = 49.45MB

这个跟我们在电脑上看到的audio1.pcm文件大小为49.5MB是一致的。由此证明了PCM文件的大小是可以算出来的。

 

四、使用ffplay.exe播放PCM文件

  PCM文件是原始无压缩的音频格式文件,用市面上流行的播放器我们一般无法直接播放。但我们可以通过FFmpeg提供的ffplay.exe播放PCM文件。

  在命令提示符cmd.exe中进入当前工程所在目录(ffplay.exe和audio1.pcm所在目录),然后输入命令:
ffplay -ar 44100 -ac 2 -f s16le -i audio1.pcm
该命令的作用是使用ffplay播放频率为44100Hz,双通道,16位、小端的音频文件audio1.pcm。

注:
-i 表示指定的输入文件
-f 表示强制使用的格式
-ar 表示播放的音频数据的采样率
-ac 表示播放的音频数据的通道数

如下图所示,出现如下画面和能听到音乐,则表示播放成功。



 

五、遇到问题:

如果使用ffplay.exe播放媒体文件遇到错误:WASAPI can't initialize audio client。如下图所示:



 

则先在命令提示符执行命令:
set SDL_AUDIODRIVER=directsound
然后再使用ffplay.exe播放媒体文件。

 

六、资源下载

资源下载地址在https://download.csdn.net/download/u014552102/10671629
<https://download.csdn.net/download/u014552102/10671629>
,包含上述演示用的所有资源。包括上述的ffmpeg.exe,ffplay.exe,mp3文件,pcm文件等。