我了解 PCM 数据存储为[left][right][left][right]...
. 我正在尝试将立体声 PCM 转换为单声道 Vorbis (*.ogg),据我所知,这可以通过将左右声道减半 ((left+right)*0.5) 来实现。我实际上是通过像这样修改 libvorbis sdk 中的编码器示例来实现的,
#define READ 1024
signed char readbuffer[READ*4];
这样就读取了 PCM 数据
fread(readbuffer, 1, READ*4, stdin)
然后我将两个通道减半,
buffer[0][i] = ((((readbuffer[i*4+1]<<8) | (0x00ff&(int)readbuffer[i*4]))/32768.f) + (((readbuffer[i*4+3]<<8) | (0x00ff&(int)readbuffer[i*4+2]))/32768.f)) * 0.5f;
它工作得很好,但是,我不明白他们如何从 PCM 数据中解交织左右声道(即所有的位移和“ANDing”和“ORing”)。