2016-03-06 29 views
0

我意識到對我來說忽略這個想法是不好的,因爲我沒有讀到關於number of channelsbits per sample的任何內容。我的理由是我不確定2聲道8位PCM文件的樣本是怎麼樣的。可以將8位(每個採樣位)的PCM WAV文件包含多個通道?

是否1 sample = 1 channel?或1 sample = 4 bits (left) + 4 bits (right)

語境: 我寫一個程序,讀取WAV文件,而且它發生,我認爲,如果我遇到8位PCM WAV文件,我的代碼讀取這樣(見下文),然後我的程序無法正確讀取多聲道8位PCM WAV文件。


// read actual audio data after obtaining 
// the headers 
// audioData is a vector of vectors (1 vector per channel) 
uint32_t temp; 
while(!feof(wavFile)) { 
    for(uint16_t i = 0; i < numChannels; i++) { 
     temp = 0; 
     fread(&temp,sizeof(uint8_t),1,wavFile); 
     audioData.at(i).push_back(temp); 
    } 
} 
+1

您的程序也將無法正確讀取單通道WAV文件,因爲您將1個八位字節數據讀取到'uint32_t'並保留一些未初始化的位。使用'uint8_t'讀取類型爲'uint8_t'的數據。 – MikeCAT

+1

由於它是8位* 2通道,所以2通道8位WAV包含16位塊。 – MikeCAT

+0

@MikeCAT只需確認,這意味着1聲道8位WAV包含8位塊? – Nogurenn

回答

1

所述的結構,其典型地描述的WAV音頻數據格式,在MSDN這裏描述:WAVEFORMATEX structure

  • 「樣品」 用於PCM音頻數據的一個塊,其中包括這樣的塊的所有信道
  • nBlockAlign值的大小,以字節爲單位,對應於樣品
  • 樣品在去特定的固定速率,通過定義值
  • 每個樣本塊由nChannels值,的wBitsPerSample

也就是說,每個樣本8個比特的兩個信道文件具有nSamplesPerSec雙用於音頻數據的每個第二每一箇中,每對包括兩個8-這兩個位的每個通道都有一個位值。

here是WAV文件中存在此結構的示例 - 儘管這是24位/採樣更復雜的情況,但您應該明白這一點)。

相關問題