代码之家  ›  专栏  ›  技术社区  ›  Nogurenn

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

  •  0
  • Nogurenn  · 技术社区  · 8 年前

    我意识到忽视这个想法对我来说是不好的,因为我没有读过任何关于 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); 
        }
    }
    
    1 回复  |  直到 8 年前
        1
  •  1
  •   Roman Ryltsov    8 年前

    通常描述WAV音频数据格式的结构在MSDN中描述如下: WAVEFORMATEX structure :

    • PCM音频的“样本”是一个数据块,包括所有通道
    • nBlockAlign value是与样本对应的此类块的大小(字节)
    • 样本以特定的固定速率运行,由 nSamplesPerSec 价值
    • 每个样本块包括 nChannels 值,每个值 wBitsPerSample

    也就是说,每个样本具有8位的双通道文件 n每秒采样数 对于每一秒的音频数据,每一对包括两个通道的两个8位值。

    ( here 是WAV文件中存在这种结构的一个例子-虽然这是一个更复杂的情况,24位/样本,但你应该明白了)。

    推荐文章