上海公司网站制作价格,网站开发网校,临海高端网站设计新感觉建站,建e室内设计网官网登录wav和pcm音频文件格式详解 一、本文的目的二、wav和pcm格式文件介绍三、pcm格式文件解析四、wav文件内容解析4.1 文件内容描述4.2 实战分析 五、如何在各种音频格式之间进行转换 /******************************************************************************************… wav和pcm音频文件格式详解 一、本文的目的二、wav和pcm格式文件介绍三、pcm格式文件解析四、wav文件内容解析4.1 文件内容描述4.2 实战分析 五、如何在各种音频格式之间进行转换 /*****************************************************************************************************************/
声明: 本博客内容均由https://blog.csdn.net/weixin_47702410原创转载or引用请注明出处谢谢!
创作不易如果文章对你有帮助麻烦点赞 收藏支持~感谢
/*****************************************************************************************************************/
一、本文的目的
tinyalsa中可以直接传输的是wav文件格式无论是tinycap还是tinyplay其使用的都是wav文件格式想要对tinyalsa源码有更详细的了解需要熟悉wav格式的文件内容。
在安卓音频中常见的两种格式为pcm格式和wav格式。本文分析这两种格式。
二、wav和pcm格式文件介绍
以录音为例说明 音频驱动传输的数据一般都是原始数据是由硬件处理得到的一系列数字信号即由ADC得到的原始数据。其本身不会包含对声音信息的记录比如声道数、采样率、位深等等。故此如果你用音乐播放器播放pcm格式的音频文件的时候就需要指定这个文件的声道数、采样率、位深等等信息。
那么能不能将音频的信息存储在音频文件中让播放器去读取音频文件的时候可以顺便读取到音频格式的信息呢这样就不用每次播放都需要去指定音频格式了。
有的那就是mp3、wav、aac等等音频格式其会保存音频的信息采样率、声道数、位深等信息当播放器播放的时候会在文件的指定位置读取音频信息去播放这样就不用用户去指定音频的信息了直接点击播放按钮剩下的就交给软件处理就能让设备发出声音了
简单理解wav格式文件内容 pcm格式文件内容 音频描述内容。
那为什么不用mp3或者aac格式或者其它格式因为类似mp3和aac格式是有损且压缩的格式不仅会丢掉一部分原始音频数据还要需要编解码解压 /压缩处理。 那为什么不用其它无损且不压缩就好了因为用了其它无损不压缩的格式你又会问为啥不用wav是伪逻辑。
三、pcm格式文件解析
如前面分析pcm格式文件的内容是仅且包含音频原始数据的原始就是未压缩未丢失的意思。那么这个文件格式展开就是一系列的声音表示数据了。以某个PCM文件的片段数据“0x01 0x02 0x03 0x04”为例假如地址是从低到高不同的音频格式的声音内容如下表示
音频格式\原始数据0x010x020x030x040x…8位单声道0声道0声道0声道0声道0声道8位双声道左声道右声道左声道右声道左声道16位单声道0声道数据1-低字节0声道数据1-高字节0声道数据2-低字节0声道数据2-高字节0声道数据3-低字节16位双声道左声道数据1-低字节左声道数据1-高字节右声道数据1-告字节右声道数据1-高字节左声道数据2-低字节
四、wav文件内容解析
4.1 文件内容描述
如前面分析wav格式文件内容 pcm格式文件内容 音频描述内容
wav文件的格式是怎么样的呢
可参考网站http://soundfile.sapp.org/doc/WaveFormat/
文件内容的数据框图
关于这张图的描述
偏移与大小名称说明0 4ChunkID包含 ASCII 形式的字母“RIFF”0x52494646 大端形式。4 4ChunkSize36 SubChunk2Size或更准确地说4 (8 SubChunk1Size) (8 SubChunk2Size)这是此数字之后的块的其余部分的大小。这是整个文件的大小以字节为单位减去未包含在此计数中的两个字段的 8 字节ChunkID 和 ChunkSize。8 4格式包含字母“WAVE”0x57415645 大端形式。12 4Subchunk1ID包含字母“fmt”0x666d7420 大端格式。16 4Subchunk1Size16 用于 PCM。这是该数字之后的其余子块的大小。20 2AudioFormatPCM 1即线性量化1 以外的值表示某种形式的压缩。22 2NumChannelsMono 1、Stereo 2 等24 4SampleRate8000、44100 等28 4ByteRate SampleRate * NumChannels * BitsPerSample/832 2BlockAlign NumChannels * BitsPerSample/8 1 的字节数样本包括所有通道。34 2BitsPerSample8 位 816 位 16等等2ExtraParamSize如果是 PCM则不存在XExtraParams用于额外参数的空间36 4Subchunk2ID包含字母“数据”0x64617461 大端形式。40 4Subchunk2Size NumSamples * NumChannels * BitsPerSample/8 这是数据中的字节数。您还可以将其视为该数字后面的子块的读取大小。44 *Data实际的声音数据。
4.2 实战分析
以霉霉的stay歌曲为例分析首先解析文件成二进制的格式文件前面的部分的内容如下
xxd -l 176 /d/music/stay.wav
00000000: 5249 4646 9a56 2f02 5741 5645 666d 7420 RIFF.V/.WAVEfmt
00000010: 1000 0000 0100 0200 44ac 0000 10b1 0200 ........D.......
00000020: 0400 1000 4c49 5354 6e00 0000 494e 464f ....LISTn...INFO
00000030: 4941 5254 0d00 0000 5461 796c 6f72 2053 IART....Taylor S
00000040: 7769 6674 0000 494e 414d 2100 0000 5374 wift..INAM!...St
00000050: 6179 2053 7461 7920 5374 6179 2028 4b61 ay Stay Stay (Ka
00000060: 7261 6f6b 6520 5665 7273 696f 6e29 0000 raoke Version)..
00000070: 4950 5244 0c00 0000 5265 6420 4b61 7261 IPRD....Red Kara
00000080: 6f6b 6500 4953 4654 0e00 0000 4c61 7666 oke.ISFT....Lavf
00000090: 3539 2e33 342e 3130 3100 6461 7461 0056 59.34.101.data.V
000000a0: 2f02 0000 0000 0000 0000 0000 0000 0000 /...............这个数据是自左向右自上而下查看对数据的分析如下 5249 4646这是 “RIFF” 的 ASCII 码的十六进制表示表示这是一个 RIFF 文件格式。
9a56 2f02这是文件大小字段表示文件的大小减去前8个字节。
5741 5645这是 “WAVE” 的 ASCII 码的十六进制表示表示这是一个 WAVE 格式的音频文件。
666d 7420这是 fmt 的 ASCII 码的十六进制表示表示接下来是音频格式的子块。
1000 0000这是子块的大小值为16表示接下来的16个字节描述音频格式。
0100这是音频格式代码值为1表示这是 PCM 格式的音频。
0200这是声道数值为2表示这是立体声音频。
44ac 0000这是采样率值为44100表示每秒采样44100次。
10b1 0200这是字节率值为 176400表示每秒数据的字节数。
0400这是块对齐值为4表示每个采样包含的字节数。
1000这是每个样本的位数值为16表示这是16位的音频。
接下来的部分包含了一些元数据如艺术家名字Taylor Swift、歌曲名字Stay Stay Stay (Karaoke Version)、产品名Red Karaoke和软件名Lavf59.34.101。
最后的 6461 7461 是 “data” 的 ASCII 码的十六进制表示表示接下来是音频数据的子块。0056 2f02 是子块的大小表示接下来的音频数据的大小。
接下来的 0000 是音频数据的开始部分文件的后面的其它内容都是实际的声音数据了。
五、如何在各种音频格式之间进行转换
一般用FFmpeg软件进行转换先在当前的设备安装好FFmpeg软件然后用命令行就可以进行转换了常用的示范如下
将mp4视频提取wav格式
ffmpeg -i D:\input.mp4 -vn -acodec pcm_s16le -ar 44100 -ac 2 D:\output.wav将wav格式转变为pcm格式
ffmpeg -i D:\output.wav -f s16le -acodec pcm_s16le D:\output.pcm将pcm格式转变为wav格式
ffmpeg -f s16le -ar 44100 -ac 2 -i D:\output.pcm c:\output.wav注意上面的命令中指定的采样率为44.1k ,双声道存储格式是s16le。读者要实际根据想要的目标文件或者源文件的参数进行配置。