我意识到忽略这个想法对我来说是不好的,因为我还没有阅读任何关于 number of channels
和 bits per sample
的文章。我的理由是我不确定 2 channel 8 位 PCM 文件的样本会是什么样子。
是 1 个样本 = 1 个 channel
吗?或 1 个样本 = 4 位(左)+ 4 位(右)
上下文: 我正在编写一个读取 WAV 文件的程序,我突然想到,如果我遇到 8 位 PCM WAV 文件,并且我的代码以这种方式读取(见下文),那么我的程序将无法正确读取多 channel 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 中有描述:WAVEFORMATEX structure :
- PCM 音频的“样本”是一个数据 block ,其中包括所有 channel
nBlockAlign
值为样本对应 block 的大小,以字节为单位- 样本以特定的固定速率进行,由
nSamplesPerSec
值定义 - 每个样本 block 由
nChannels
个值组成,每个wBitsPerSample
也就是说,每个样本 8 位的双 channel 文件对每一秒的音频数据都有 nSamplesPerSec
对,每对包括两个 8 位值的每个 channel 。
(here 是此结构存在于 WAV 文件中的示例 - 虽然这是 24 位/样本的更复杂情况,但您应该明白了)。
关于c++ - 8 位(每个样本的位数)PCM WAV 文件是否可以包含多个 channel ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35825617/