2014-09-24 49 views
2

我試圖解碼,並在Perl進一步操作播放WAV文件,我已經找到了有關格式一些參考和一些有趣的Q +一個RIFF WAV頭格式2014更新?

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

我發現了「 Cannonical WAVE文件格式「enter image description here

但最後我測試了2個不符合」標準「的不同WAV文件。 MPlayer有沒有問題都在讀取數據時,我想出了一個解決辦法在我的Perl代碼:

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

 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

 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 

回答

2

在test2.wav的AudioFormat0xfffe這表明頭是WAVEFORMATEXTENSIBLE。發生這種情況時,您需要以不同的方式解釋標題的其餘部分。

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

+0

謝謝,這是我一直在尋找的文檔(以及它是如此喜歡微軟,但......它告訴所需的信息)。再次感謝你。 – FarDarkMist 2014-09-25 01:04:45