2014-05-07 19 views
0

我一直在尝试vb.net中的wav joiner程序来加入wav文件,虽然它的某些时间工作正常,但通常结果wav文件无法播放。在窥视了原始的wav文件之后,我注意到数据子块中'data'这个词开始于偏移量38而不是36.这就是搞错了假设偏移量为36的木工程序。当我将该wav文件从audacity ,它将它固定起来,并且数据子句块从36开始。所有程序都能够正常播放原始文件,所以我想它是有效的。为什么在那些wav文件中的'data'之前有两个额外的00字节值?为什么某些wav文件的数据子块是2字节关闭的?

+0

在具有两个额外字节的子块中,子块1的大小是否正确? https://ccrma.stanford.edu/courses/422/projects/WaveFormat/26而不是24?当你有一个尺寸的领域,你不需要假定尺寸总是相同的,它的存在是一个暗示,它可能不是。 –

+0

是的你是对的,子块大小是18而不是其他文件中的16。我只是在发布后注意到另一篇关于此的帖子:http://stackoverflow.com/questions/19991405/how-can-i-detect-whether-a-wav-file-has-a-44-or-46-byte- header – nlehman

回答

1

这是一个猜测,但是你看看在偏移量为38的文件中偏移量为16的四字节数字吗?data

fmt子块的大小是可变的,其大小是在相对于块ID(在文件中为零)的偏移16处的dword中指定的。该dword值是子块其余部分的大小,不包括ID字段和大小字段本身。我的猜测是,如果你看那里,那些有两个额外字节的人会说他们的fmt子块是18字节长而不是16(谢谢ooga为了捕捉我的错误)。

https://ccrma.stanford.edu/courses/422/projects/WaveFormat/

当有一个大小字段,总是使用它。如果文件格式会告诉你有多大的事情,则不需要跳转到信任文件中的固定偏移量。如果它告诉你事物的大小,把它当作一个警告,说明大小可能会改变。

+1

我相信它会是18而不是16(不是26而不是24)。 – ooga

+0

@ooga完全正确,它是子块的*余数*的大小,不包括ID和大小字段。我不好,我会解决这个问题。谢谢! –

相关问题