0

C++ で WAVE デコーダー/エンコーダーを作成しています。さまざまなサンプル サイズ (8、16、32) の間で正しく変換できましたが、チャネルと周波数については助けが必要です。

チャネル:

ステレオからモノラルに変換したい場合:

  1. 1 つのチャネルからデータを取得するだけですか (1 と 2 のどちらですか?)。
  2. または、モノチャネルのチャネル 1 と 2 から平均を取りますか。

モノラルからステレオに変換したい場合: (これはあまり科学的ではないことはわかっています)

  1. シングル チャンネルのサンプルを両方のステレオ チャンネルに単純に追加できますか?
  2. これを行うためのより科学的な方法はありますか (例: 補間)?

サンプルレート:

サンプル レートを変更する (リサンプル) 方法は次のとおりです。例: 44100 Hz から 22050 Hz へ:

  1. 新しい (より低い周波数の) 値の 2 つの連続したサンプルの平均を取るだけですか?
  2. これのためのより科学的なアルゴリズムはありますか?
4

1 に答える 1

1
  • ステレオからモノラル-左右のサンプルの平均を取ります。つまり、M = (L + R) / 2これはステレオコンテンツの大部分で機能しますが、左右のキャンセルが発生するまれなケースがあることに注意してください。

  • モノラルからステレオへ-モノラルサンプルを左右両方のチャンネルに配置します。つまりL = R = M、ステレオとして再生したときに中央に配置されるサウンドイメージが得られます。

  • リサンプリング-上記の例のような単純な整数比のダウンサンプリングの場合、プロセスは次のとおりです。

    • 新しいナイキスト周波数に対応するローパスフィルター、たとえば22.05kHzのサンプルレートで10kHzのLPF
    • 必要な比率で間引きます(つまり、2倍のダウンサンプリングの例では代替サンプルをドロップします)

一般的なケースでリサンプリングを処理できるlibsamplerateなどのサードパーティライブラリがあることに注意してください。したがって、サポートする必要のある比率が複数ある場合、またはトリッキーな非整数比率がある場合は、これが適している可能性があります。アプローチ

于 2012-07-04T09:08:24.773 に答える