我一直在vb.net中尝试一个wav joiner程序来加入wav文件,虽然它在某些时候工作正常,但通常生成的wav文件无法播放。在窥视原始的wav文件之后,我注意到'data'一词的数据子块是从偏移量38而不是36开始的。这就是弄乱了假定偏移量为36的连接器。当我从大胆中重新导出该wav文件时,它修复了它,数据子块从36开始。所有程序都播放原始文件,所以我猜它是有效的。为什么在那些wav文件中的'data'一词之前还有两个额外的00字节值?
答案 0 :(得分:1)
这是一个猜测,但您是否看过data
在偏移量38处开始的文件中偏移量为16的四字节数字?
fmt
子块的大小可变,其大小在相对于块ID的偏移量16处的dword中指定,块ID在文件中为零。该dword值是子块的剩余部分的大小,不包括ID字段和size字段本身。我的猜测是,如果你看那里,带有两个额外字节的那些将说他们的fmt
子块长18个字节而不是16个(感谢ooga用于捕获我的错误)。
https://ccrma.stanford.edu/courses/422/projects/WaveFormat/
当有大小字段时,请始终使用它。如果文件格式会告诉您有多大的东西,则无需在信件中跳转到文件中的固定偏移量。如果它告诉你事物的大小,那就把它当作一个大小可能改变的警告。