0

我意识到忽视这个想法对我来说是不好的,因为我没有读过任何关于这个观点的number of channels东西bits 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); 
    }
}
4

1 回答 1

1

该结构通常描述 WAV 音频数据的格式,在 MSDN 中描述:WAVEFORMATEX 结构

  • PCM 音频的“样本”是一个数据块,其中包括所有通道
  • nBlockAlignvalue 是与 sample 对应的此类块的大小,以字节为单位
  • 样本以特定的固定速率进行,由nSamplesPerSec值定义
  • 每个样本块由nChannels值组成,每一个wBitsPerSample

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

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

于 2016-03-06T11:00:14.560 回答