使用xxd命令将文件转换为16进制文本。然后观察header字节格式。
要求音频格式14H: 0001即PCM 此时采样率18H: AA4C即44100或22050或11025或8000这几个,不能为16000.
音频格式也可为0X55 mp3,但这里未测试过。
header info:
AVE文件格式说明表 偏移地址 字节数 数据类型 内 容
文件头
00H 4 char "RIFF"标志
04H 4 long int 文件长度
08H 4 char "WAVE"标志
0CH 4 char "fmt"标志
10H 4 过渡字节(不定)
14H 2 int 格式类别(10H为PCM形式的声音数据)
16H 2 int 通道数,单声道为1,双声道为2
18H 2 int 采样率(每秒样本数),表示每个通道的播放速度, (Hz) sample frequency
1CH 4 long int 波形音频数据传送速率,其值为通道数×每秒样本数×每样本的数据位数(bit)/8。播放软件利用此值可以估计缓冲区的大小。
20H 2 int 数据块的调整数(按字节算的),其值为通道数×每样本的数据位值/8。播放软件需要一次处理多个该值大小的字节数据,以便将其值用于缓冲区的调整。
22H 2 每样本的数据位数,表示每个声道中各个样本的数据位数。如果有多个声道,对每个声道而言,样本大小都一样。
对于14H,两字节的格式类别:
在xmms2/src/plugin/wave/wave.c中,只认识0x0001(PCM)和0x0055(MP3),其他类型不识别。会产生"There is not a valid medialib id!"报错。
http://blog.sina.com.cn/s/blog_520a69ac0100otpp.html
http://blog.youkuaiyun.com/poechant/article/details/7436710
Format Code | PreProcessor Symbol | Data |
0x0001 | WAVE_FORMAT_PCM | PCM |
0x0003 | WAVE_FORMAT_IEEE_FLOAT | IEEE float |
0x0006 | WAVE_FORMAT_ALAW | 8-bit ITU-T G.711 A-law |
0x0007 | WAVE_FORMAT_MULAW | 8-bit ITU-T G.711 µ-law |
0xFFFE | WAVE_FORMAT_EXTENSIBLE | Determined by SubFormat |
xxd file.wav > file.bin
然后比对wav文件格式协议,确保你明白了你对照bin文件明白了wav文件格式的意义剩下的就是open出来一个个分析出来print了
如果是mp3文件是有现成的开源的project,不过估计wav的可能也有code,sf上找找看