2017-04-06 102 views
0

例如,以立體聲通道wav文件爲例,採樣率爲44100,位深度爲16位。wav文件中實際包含的數據塊是什麼?

究竟how is the 16 bits divided up?


,我用,前4個字節有數據關於第一音頻信道的下一個4位的音頻剪輯 - 我不知道它是什麼(即使與0取代,有對最終的音頻文件沒有影響)。


接下來的4個字節有關於第二個音頻通道的數據,接下來的4位 - 我不知道它是什麼(即使替換爲0,對最終音頻文件沒有影響)。

所以我想弄清楚這4位是什麼。

+0

16位不分開 - 它只是一個16位的數字,在這種情況下給出了音量。 –

回答

0

WAV format audio file以一個44字節的標題開頭,後面跟着有效負載,它是未壓縮的原始PCM音頻數據......當你穿過PCM數據時,每個採樣點(音頻曲線上的點)將包含所有數據通道...標題會告訴你通道的數量...對於使用位深度爲16的立體聲,你會看到給定通道的兩個字節(16位==位深度),緊接着是下一個通道的兩個字節等。 ..

對於一個給定的通道,一組給定的字節(在你的情況下是2個字節)將出現在兩個可能的佈局中,這兩個佈局由選擇的字節順序決定...第一個字節後面跟着第二個字節...排序的順序是重要的這裏...標題還告訴你你使用的是什麼endianness ...通常是WAV格式是小端

每個通道將在您的代碼從PCM數據轉換成可用的音頻曲線數據點,必須結合給定樣本的所有字節用於給定信道爲一個值產生它自己的音頻曲線

...通常是它的整數而不是浮點,頭部定義了哪一個...如果整數可以是有符號或無符號的......小尾數是指在讀取文件時第一個(最左邊的)字節將成爲最低有效字節隨後是每個隨後的字節,成爲下一個最重要的字節

in pseudo code:

int mydatapoint // allocate your integer audio curve data point 

步0

mydatapoint = most-significant-byte 

停止這裏的8

位深度...如果你現在左移位深度大於8位該讓路給下列是否有任何字節

步驟1

mydatapoint = mydatapoint << 8 // shove data to the left by 8 bits 
           // which effectively jacks up its value 
           // and leaves empty those right most 8 bits 

步驟2

// following operation is a bit wise OR operation 
mydatapoint = mydatapoint OR next-most-significant-byte 

現在重複做步驟1 & 2爲PCM數據的每一後續下一個字節,以便從最顯著到至少顯著(對於小端排序)...對於超過16位的任何位深度都是必不可少的,因此對於24位音頻或32位,您需要將3或4字節的PCM數據合併到您的單個整數輸出音頻曲線數據點中。

音頻保真度從模擬轉換爲數字時的級別取決於您錄製音頻曲線的準確程度。模擬音頻是連續曲線,但要成爲數字,必須將其採樣到曲線上的離散點。 ..兩個因素確定採樣模擬曲線以創建其數字表示時的保真度...沿模擬音頻曲線的從左到右的距離由採樣率和上下距離alon克音頻曲線由位深度決定...更高的採樣率給你更多的樣本每秒和更大的位深度給你更多的垂直點來近似模擬音頻曲線的瞬時高度

bit depth 8 == 2^8 == 256 distinct vertical values to record curve height 
bit depth 16 == 2^16 == 65536 distinct vertical values to record curve height 

所以更準確地將我們的模擬音頻曲線的高度更準確地記錄到數字中,我們希望變得儘可能細粒度...因此,所得到的音頻曲線儘可能平滑並且不會鋸齒,如果我們僅分配2比特將會給我們2^2這是4個不同的值...當您的音頻曲線只有4個垂直值可供選擇時嘗試連接這些點...位移只是從多個字節的數據中構建一個整數值。 ..大於256的數字不能放入一個字節,因此必須是spre廣告PCM數據的多個字節

http://www-mmsp.ece.mcgill.ca/Documents/AudioFormats/WAVE/WAVE.html

0

WAV文件包含幾個塊。 FMT塊指定音頻數據的格式。 實際的音頻數據在數據塊內。 這取決於實際的格式。但讓我們假設以下格式爲例:

PCM,16位,2通道,採樣率爲44100Hz。

音頻數據被表示爲樣本。在這種情況下,每個採樣需要16位= 2字節。 如果我們得到多個信道(在本實施例2 =立體聲)時,它看起來像這樣:

left sample, right sample, left sample, right sample, ... 

,因爲每個採樣佔用2個字節(16比特),我們得到這樣的事:

Byte 1 | Byte 2 | Byte 3 | Byte 4 | Byte 5 | Byte 6 | Byte 7 | Byte 8 | ... 
left sample  | right sample | left sample  | right sample | ... 

音頻每秒包含44100個每個頻道的樣本。 因此總共一秒鐘的音頻需要44100 *(16/8)* 2字節。

相關問題