オーディオ データの処理

[このページWindows メディア プレーヤー SDK に関連付けられている機能は、レガシ機能です。 MediaPlayer に置き換わりました。 MediaPlayer は、Windows 10とWindows 11用に最適化されています。 可能な場合は、新しいコードで SDK ではなく MediaPlayerWindows メディア プレーヤー使用することを強くお勧めします。 Microsoft は、レガシ API を使用する既存のコードを、可能であれば新しい API を使用するように書き換えるよう提案しています。]

DoProcessOutput の既定の実装は、AllocateStreamingResources で行われたのとまったく同じように、有効な WAVEFORMATEX 構造体へのポインターを取得することから始まります。 次に、その構造体の情報を使用して、処理を待機している入力バッファー内のサンプルの数を計算します。 次のコードは、既定の実装からのコードです。

// Get a pointer to the valid WAVEFORMATEX structure
// for the current media type.
WAVEFORMATEX *pWave = ( WAVEFORMATEX * ) m_mtInput.pbFormat;

// Calculate the number of samples to process.
DWORD dwSamplesToProcess = (*cbBytesProcessed / pWave->nBlockAlign) * pWave->nChannels;

次に、 コードによって wBitsPerSample メンバーが検査され、オーディオのビット深度が決定されます。 この値は、8 ビットと 16 ビットのオーディオに個別の処理を提供するために switch ステートメントで使用されます。

8 ビットと 16 ビットオーディオの違い

8 ビットと 16 ビットのオーディオには重要な違いがあります。 したがって、エコー効果を作成する処理ルーチンは異なります。 2 つの形式は、次の点で異なります。

  • 各形式には異なるサンプル サイズがあります。8 ビットサンプルはそれぞれ 1 バイトのメモリを占有し、16 ビットサンプルはそれぞれ 2 バイトを占有します。
  • 各形式は、オーディオの振幅を異なる方法で表します。 8 ビットオーディオは、0 ~ 255 の範囲の符号なし整数で表されます。値 128 は無音を表します。 16 ビットオーディオは、-32768 ~ 32767 の範囲の符号付き整数で表されます。0 の値は無音を表します。

エコー効果を作成するプロセスは、形式ごとに基本的に同じですが、詳細は若干異なる必要があります。

CEcho::D oProcessOutput の実装