首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >RIFF报头格式2014年更新?

RIFF报头格式2014年更新?
EN

Stack Overflow用户
提问于 2014-09-24 16:34:47
回答 1查看 1.1K关注 0票数 3

我试图在perl中解码和播放WAV文件以进行进一步的操作,我找到了一些有关格式的参考资料,以及一些有趣的q+a

What does a audio frame contain? error in reading a wav file with C++ Writing musical notes to a wav file

我发现了“戛纳波文件格式”

但在最后,我测试了两个不同的WAV文件,不符合“标准”。Mplayer在读取数据方面一点问题都没有,我想出了一个解决perl代码的方法:

代码语言:javascript
复制
sysread WAV, $riff, 12;
sysread WAV, $fmt,  24;

do{
    sysread WAV, $wtf, 2;

}while( unpack("A4",$wtf) ne "da" );
sysread WAV, $wtf, 2;

#94
sysread WAV, $data,  4;

尽管如此,它仍然困扰着我,它到底是如何工作的,变量数据在字段“每个样本位”和“数据”字段之间是什么。

谢谢你们!

(我对这个论坛上瘾了)

test2.wav

代码语言:javascript
复制
       v--------- riff --------------v--------- 
0000000 4952 4646 685e 0931 4157 4556 6d66 2074
        -------------- fmt --------------------
0000010 0028 0000 fffe 0006 bb80 0000 ca00 0008
        ---------v-----------------------------
0000020 000c 0010 0016 0010 060f 0000 0001 0000
        ---------------------------------------
0000030 0000 0010 0080 aa00 3800 719b 494c 5453
        ---------------------------------------
0000040 001a 0000 4e49 4f46 5349 5446 000e 0000
        ----------------------------------v----
0000050 614c 6676 3535 312e 2e39 3031 0034 6164
        ----v---------v
0000060 6174 6800 0931 0000 0000 0000 0000 0000
0000070 0000 0000 0000 0000 0000 0000 0000 0000

test.wav

代码语言:javascript
复制
       v--------- riff --------------v--------- 
0000000 4952 4646 7048 095b 4157 4556 6d66 2074
        -------------- fmt --------------------
0000010 0012 0000 0001 0002 ac44 0000 b110 0002
        ---------v-----------------------------
0000020 0004 0010 0000 494c 5453 001a 0000 4e49
        ---------------------------------------
0000030 4f46 5349 5446 000e 0000 614c 6676 3535
        -------------------v---------v---------v
0000040 312e 2e39 3031 0034 6164 6174 7000 095b       
0000050 0000 0000 0000 0000 0000 0000 0000 0000
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-09-24 21:24:25

test2.wav中的AudioFormat字段是0xfffe,这表示标头是WAVEFORMATEXTENSIBLE。当这种情况发生时,您需要以不同的方式来解释标题的其余部分。

代码语言:javascript
复制
AudioFormat   : 2
NumChannels   : 2
SampleRate    : 4
ByteRate      : 4
BlockAlign    : 2
BitsPerSample : 2
cbSize        : 2  - size of the rest of the chunk
ChannelMask   : 4
SubFormat     : 16 - GUID

有关更多信息,请参阅WAVEFORMATEXWAVEFORMATEXTENSIBLE上的一些文档

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/26022098

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档