私は通常、SoXまたはWindowの組み込みオーディオライブラリにこのようなものを探しますが、どちらにもG.726コーデックがないようです。
したがって、ビットレートと、それがmu-lawかA-lawかは現時点では不明ですが(実験によってこれらのパラメータが決定されます)、G.726としてエンコードされていることがわかっている一連のバイトがあります。それらを通常のPCM信号にデコードします。
そのため、ITU-T(ITU-T勧告G.191)からリファレンス実装をダウンロードしましたが、G726_decode
関数の使用方法について少し混乱しています。inp_buf
ドキュメントによるとout_buf
、同じ長さである必要がありsmpno
、両方のバッファは16ビットバッファです。これは、ステップが欠落しているように私には思えます。それ以外の場合、G.726を使用しても圧縮は行われません。G.726のWikipediaページによると、サンプルサイズはビットレート(2〜5ビット)によって異なります。自分でサンプルへの解凍を行うことになっていますか?したがって、最大圧縮(2ビットサンプル)を想定すると、各バイトは4サンプルを生成します。
例:
char b = /* read the code from input */
short inp[4], output[4];
inp[0] = b & 0x0003;
inp[1] = b & 0x000C >> 2;
inp[2] = (b & 0x0030) >> 4;
inp[3] = (b & 0x00C0) >> 6;
G726_state state;
memset(&state, 0, sizeof(G726_state));
G726_decode(inp, output, 4, "u", 2, 1, &state);
/* ouput now contains 4 PCM samples */
それとも私は何かを完全に見逃していますか?