2015-05-01 77 views
1

我想了解一個WAV文件的頭。我已經打開一個示例文件,並得到這個:解碼一個WAV文件頭

5249 4646 e857 1400 5741 5645 666d 7420 
1000 0000 0100 0200 44ac 0000 10b1 0200 
0400 1000 

我一直在閱讀this data representation tutorial

據我所知,52是一個字節,代表ASCII字母R。我瞭解到1000 0000。爲什麼這代表十進制16?該教程指出,該位置的值始終爲0x101000 0000如何等於0x10

此外,讀取文件時,程序是否會知道是否指定一個數字或ASCII?據推測它會檢查一個已經在HEX中的值?

感謝

+1

你的教程有一個解釋「Little-Endian」格式的鏈接。閱讀。字節的順序如下:0x10 0x00 0x00 0x00。最低有效字節是第一個,因此整個數字是0x00000010。 (將其分解爲「1000」和「0000」根本沒有幫助。) –

+0

這就是崇高的格式,因此我的困惑。謝謝。 – CircularRecursion

回答

3

希望這有助於一點,我要提到的一切都只是明確:

東西一般要使用十六進制:我用十六進制編輯器,dhex,你應該可以將apt-get,yumbrew安裝在您喜歡的unix機器上。我將使用this site作爲本資料的大部分源代碼:

正如您所提及的,十六進制的前4個字節表示ASCII字符。在這種情況下,這些字符區域始終:

52 49 46 46 - RIFF 

接下來的4個字節表示的塊大小,這是小端。在你的情況下它是:

e8 57 14 00 - 1333224 

接下來的8個字節再次表示ASCII字符。在你的情況:

57 41 56 45 - WAVE 
66 6d 74 20 - fmt. 

接下來的4代表塊大小,這是小端:

10 00 00 00 - 268435456 

該卡盤並不代表十進制16,它代表在16位十進制268435456(4個字節1字節是4位)。由於「爲什麼」這些塊是16位的原因,你可以在這個Intro to Audio Programing上閱讀更多內容。這描述了數據部分中的塊將是16位。

01 00代表音頻格式(小端),1代表PCI在這種情況下。 02 00表示通道數量,在您的情況下爲2。

接下來的4個字節表示存在數據的每個第二採樣率(小端),或

樣品(幀)的數量。該字段以Hz表示。 - 取自here

44 ac 00 00 - 44100 

接下來的4個字節表示字節速率(小端):

10 b1 02 00 - 1049265 

接下來的2個字節表示塊對齊:

這是字節數在一個框架(小端)。這是通過將通道數乘以樣本中的字節數(非位)來計算的。你可以找到更詳細的計算here

04 00 - 4 

下一個是你的2個字節代表每個樣品(小端)位,在你的情況下,它是16

10 00 - 16 

數據部分:

您目前在您的.wav文件中沒有數據部分,爲了啓動您首先編寫ASCII的數據部分對於data像這樣(大端)值:

64 61 74 61 - data 

在此之後,你需要你的代表塊2的大小4個字節,你要善於去。在測試方面,如果你還沒有,我會推薦閱讀this guide。我還會重新開始閱讀這篇關於如何構建原始wav文件的帖子,這也應該有助於理解如何「解碼」它們。

+1

這應該是人們在Google上搜索WAV編程時的第一個結果。謝謝! –