8 位(每个样本位数)PCM WAV 文件可以包含多个通道吗?

Can 8-bit (bits per sample) PCM WAV files contain more than one channel?

本文关键字:包含多 通道 文件 PCM 样本 WAV      更新时间:2023-10-16

我意识到忽视这个想法对我来说是不好的,因为我还没有从这个角度读过任何关于number of channelsbits per sample的东西。我的理由是我不确定 2 通道 8 位 PCM 文件的示例会是什么样子。

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); 
    }
}

该结构通常描述 WAV 音频数据的格式,在 MSDN 中描述如下: 波形图结构:

  • PCM音频的"采样"是一个数据块,包括所有通道
  • nBlockAlign值是对应于样本的此类块的大小(以字节为单位)
  • 样本以特定的固定速率进行,由nSamplesPerSec值定义
  • 每个样本块由nChannels值组成,每个值wBitsPerSample

也就是说,每个样本 8 位的两个通道文件每秒有 nSamplesPerSec 个音频数据对,每个对包括两个 8 位值,用于两者的每个通道。

(这是 WAV 文件中存在此结构的示例 - 尽管这是 24 位/样本的更复杂的情况,但您应该明白这一点)。