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

时间:2016-03-06 10:14:34

标签: c++ audio wav riff

我意识到忽略这个想法对我来说是不好的,因为从这个角度来看,我没有读过关于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 -bit 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 个答案:

答案 0 :(得分:1)

这个结构通常描述了WAV音频数据的格式,在MSDN中有描述:WAVEFORMATEX structure

  • PCM音频的“sample”是一个数据块,包括所有通道
  • nBlockAlign值是与样本
  • 对应的此类块的大小(以字节为单位)
  • 样本按特定固定费率运行,由nSamplesPerSec
  • 定义
  • 每个样本区块都包含nChannels个值,每个值都来自wBitsPerSample

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

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