我知道PCM数据存储为[left][right][left][right]....我试图将立体声PCM转换为单声道Vorbis(*.ogg),据我所知,可以通过将左右声道减半((左+右)*0.5)来实现.我实际上通过修改libvorbis sdk中的编码器示例来实现这一点,
#define READ 1024
signed char readbuffer[READ*4];
Run Code Online (Sandbox Code Playgroud)
并且因此读取PCM数据
fread(readbuffer, 1, READ*4, stdin)
Run Code Online (Sandbox Code Playgroud)
然后,我将这两个频道减半,
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;
Run Code Online (Sandbox Code Playgroud)
它工作得很好,但是,我不明白他们如何从PCM数据中解交左右声道(即所有的位移和"ANDing"和"ORing").
从这个问题开始,我了解了如何解交织 16 位 PCM 数据的左右声道。
我现在的问题是,如何将 8 位 PCM 解交织并“拉伸”为 16 位值