8 位(每个样本的位数)PCM WAV 文件是否可以包含多个通道?
Can 8-bit (bits per sample) PCM WAV files contain more than one channel?
我意识到忽略这个想法对我来说是不好的,因为我还没有读过任何关于 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);
}
}
通常描述 WAV 音频数据格式的结构在 MSDN 中有描述:WAVEFORMATEX structure:
- "sample" 对于 PCM 音频是一个数据块,其中包括所有通道
nBlockAlign
value 是对应于 sample 的此类块的大小,以字节为单位
- 样本以特定的固定速率进行,由
nSamplesPerSec
值 定义
- 每个样本块由
nChannels
个值组成,每个 wBitsPerSample
也就是说,每个样本 8 位的两个通道文件对于每秒的音频数据有 nSamplesPerSec
对,每对包含两个 8 位值的每个通道。
(here 是此结构存在于 WAV 文件中的示例 - 尽管这是 24-bits/sample 的更复杂情况,但您应该明白了)。
我意识到忽略这个想法对我来说是不好的,因为我还没有读过任何关于 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);
}
}
通常描述 WAV 音频数据格式的结构在 MSDN 中有描述:WAVEFORMATEX structure:
- "sample" 对于 PCM 音频是一个数据块,其中包括所有通道
nBlockAlign
value 是对应于 sample 的此类块的大小,以字节为单位
- 样本以特定的固定速率进行,由
nSamplesPerSec
值 定义
- 每个样本块由
nChannels
个值组成,每个wBitsPerSample
也就是说,每个样本 8 位的两个通道文件对于每秒的音频数据有 nSamplesPerSec
对,每对包含两个 8 位值的每个通道。
(here 是此结构存在于 WAV 文件中的示例 - 尽管这是 24-bits/sample 的更复杂情况,但您应该明白了)。