6

PCM データが として保存されていることを理解してい[left][right][left][right]...ます。ステレオ PCM をモノラル Vorbis (*.ogg) に変換しようとしていますが、これは左右のチャンネルを半分にすること ((左 + 右) * 0.5) で達成できると理解しています。libvorbis SDK のエンコーダーの例を次のように修正することで、実際にこれを達成しました。

#define READ 1024
signed char readbuffer[READ*4];

PCMデータはこのように読み込まれます

fread(readbuffer, 1, READ*4, stdin)

次に、2 つのチャンネルを半分にしました。

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」)。

4

1 に答える 1