2014-05-07 30 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和大小字段。我不好,我會解決這個問題。謝謝! –

相關問題