2

「libtinyalsa」(ALSAの非常に小さなバージョン)を拡張して、着信および発信PCMオーディオ(libresampleを使用、たとえば48kHzから44.1kHz)をリサンプリングする方法を使用しました。

ここで、「downMixing」(これは正しい言葉ですか?)メソッドで拡張したいと思います。

5.1チャンネルPCMを使用していて、2チャンネルステレオオーディオ(左と右)が必要です。

  • 「downMixing」は正しい言葉ですか?
  • Cでこれを行うにはどうすればよいですか?

私はCとPCMについての本当の知識を持っていません-簡単な答えは本当に歓迎されます。

よろしくお願いいたします。

4

2 に答える 2

3

5.1 PCMストリームをステレオにダウンミックスするには、次のようにすることができると思います。

L = clamp((FL + RL + C*0.708 + LFE*0.708) / 2) 
R = clamp((FR + RR + C*0.708 + LFE*0.708) / 2)

この例については、Androidのダウンミックス効果などを参照してください。

または、保持する2つのチャネル(FLとFRなど)を選択して、他のチャネルのサンプルをスキップします。

于 2013-02-04T16:21:38.940 に答える
1

5.1 PCMは、2チャネルに効果的にミックスダウンされるようにすでにエンコードされている場合があります。その場合は、5.1チャンネルを無視して、2チャンネルのように扱うことができるはずです。これが事実であるが、5.1 PCMのすべてのトレースを取り除く必要がある場合は、2チャンネル出力で正しく再生するのではなく、最初に5.1チャンネルデコーダーライブラリを使用する必要があります。

実際に本物の5.1チャンネルでエンコードされた出力がある場合は、次のようになります。

for(i = 0; i < buffer_end; i += 6) {
    front_left = buffer[i + 0];
    front_right = buffer[i + 1];
    center = buffer[i + 2];
    lfe = buffer[i + 3]; // (sub-woofer)
    back_left = buffer[i + 4];
    back_right = buffer[i + 5];
}

その場合、ミックスダウンは次のようになります。

left = (front_left + back_left)/2 + (lfe + front_center)/4;
right = (front_right + back_right)/2 + (lfe + front_center)/4;

これは同じ方法でインターリーブされます。

output_buffer[i] = left;
output_buffer[i + 1] = right;

目的の結果と制約に応じて、ミックスダウンを実行するさまざまな方法があることに注意してください。しかし、それはワームの缶全体です。

また、その仕事に本当に適切なツールを使用しているかどうかを自問する必要があります。これらすべてを行うライブラリが存在し、ALSA自体はすでにかなり洗練されたミキシングが可能です。その他の解決策については、こちらをご覧ください:http: //www.halfgaar.net/surround-sound-in-linux

于 2013-02-04T16:58:29.303 に答える