音声キャプチャ DSP

音声キャプチャに関連するいくつかの DSP をカプセル化する オブジェクト。

CLSID

CLSID_CWMAudioAEC

インターフェイス

プロパティ

プロパティ 説明
MFPKEY_WMAAECMA_DEVICE_INDEXES DMO がオーディオのキャプチャとレンダリングに使用するオーディオ デバイスを指定します。
MFPKEY_WMAAECMA_DEVICEPAIR_GUID アプリケーションが現在使用しているオーディオ デバイスの組み合わせを識別します。
MFPKEY_WMAAECMA_DMO_SOURCE_MODE DMO でソース モードとフィルター モードのどちらを使用するかを指定します。
MFPKEY_WMAAECMA_FEATR_AES DMO が残余信号に対して音響エコー抑制 (AES) を実行する回数を指定します。
MFPKEY_WMAAECMA_FEATR_AGC DMO が自動ゲイン制御を実行するかどうかを指定します。
MFPKEY_WMAAECMA_FEATR_CENTER_CLIP DMO が中心クリッピングを実行するかどうかを指定します。
MFPKEY_WMAAECMA_FEATR_ECHO_LENGTH 音響エコー キャンセル (AEC) アルゴリズムが処理できるエコーの期間を指定します。
MFPKEY_WMAAECMA_FEATR_FRAME_SIZE オーディオ フレームのサイズを指定します。
MFPKEY_WMAAECMA_FEATR_MICARR_BEAM DMO がマイク配列処理に使用するビームを指定します。
MFPKEY_WMAAECMA_FEATR_MICARR_MODE DMO がマイク配列処理を実行する方法を指定します。
MFPKEY_WMAAECMA_FEATR_MICARR_PREPROC DMO がマイク配列の前処理を実行するかどうかを指定します。
MFPKEY_WMAAECMA_FEATR_NOISE_FILL DMO がノイズフィルを実行するかどうかを指定します。
MFPKEY_WMAAECMA_FEATR_NS DMO がノイズ抑制を実行するかどうかを指定します。
MFPKEY_WMAAECMA_FEATR_VAD DMO が実行する音声アクティビティ検出の種類を指定します。
MFPKEY_WMAAECMA_FEATURE_MODE アプリケーションがさまざまなプロパティの既定の設定をオーバーライドできるようにします。
MFPKEY_WMAAECMA_MIC_GAIN_BOUNDER DMO でマイク ゲイン境界を適用するかどうかを指定します。
MFPKEY_WMAAECMA_MICARRAY_DESCPTR マイク配列のジオメトリを指定します。
MFPKEY_WMAAECMA_QUALITY_METRICS AEC の品質メトリックを取得します。
MFPKEY_WMAAECMA_RETRIEVE_TS_STATS DMO がタイム スタンプ統計をレジストリに格納するかどうかを指定します。
MFPKEY_WMAAECMA_SYSTEM_MODE 処理モードを設定します。

 

注釈

他の DSP とは異なり、音声キャプチャ オブジェクトは 1 つのオブジェクトに複数の DSP をカプセル化し、オブジェクトは DMO オブジェクトのみです ( IMFTransform は実装しません)。 音声キャプチャ DMO には、次の DSP コンポーネントが含まれています。

  • 音響エコー キャンセレーション (AEC)
  • マイク配列の処理
  • ノイズ抑制
  • 自動ゲイン制御
  • 音声アクティビティの検出

アプリケーションでは、各コンポーネントのオンとオフを個別に切り替えることができます。

音声キャプチャ DMO では、 フィルター モードと ソース モードの 2 つの動作モードがサポートされています。 フィルター モードでは、アプリケーションはマイクとスピーカーラインから DMO にオーディオ サンプルを送信し、DMO が出力を生成します。

ソース モードでは、アプリケーションは DMO にサンプルを配信する必要はありません。 代わりに、DMO は、デバイスの初期化、オーディオ ストリームのキャプチャと同期、タイム スタンプの計算、マイク配列のジオメトリの取得など、オーディオ デバイス上のすべての操作を管理します。 ソース モードを使用して、アプリケーションは単に DMO を構成し、DMO からの出力は、クリーン処理されたマイク信号です。 ソース モードはフィルター モードよりも非常に使いやすく、ほとんどのアプリケーションに推奨されます。

現在、音声キャプチャ DMO では単一チャネルの音響エコー キャンセレーション (AEC) のみがサポートされているため、スピーカーラインからの出力は単一チャネルである必要があります。 マイクアレイ処理が無効になっている場合、マルチチャネル入力はAEC処理のために1チャンネルにフォールドされます。 マイク配列処理と AEC 処理の両方が有効になっている場合、AEC はマイク配列処理の前に各マイク要素に対して実行されます。

マイク配列処理

マイク配列は、密接に配置されたマイクのセットです。 マイクアレイは、音響波が少し異なる時間に各マイクに到達するため、単一のマイクよりも優れた方向性を実現します。 マイク配列の詳細については、「Windows Vista でのマイク配列のサポート」および「Windows Vista 用マイク配列を構築して使用する方法」の Web 記事を参照してください。

音声キャプチャ DSP の使用

音声キャプチャ DSP を使用するには、次の手順を実行します。

1. DMO を初期化する

CLSID CLSID_CWMAudioAECを使用して CoCreateInstance を呼び出して、音声キャプチャ DMO 作成します。 音声キャプチャ DSDP は IMediaObject インターフェイスと IPropertyStore インターフェイスのみを公開するため、DMO としてのみ使用できます。

DMO の既定値はソース モードです。 フィルター モードを選択するには、 MFPKEY_WMAAECMA_DMO_SOURCE_MODE プロパティを VARIANT_FALSE に設定します。

次に、 IPropertyStore インターフェイスを使用して DMO の内部プロパティを構成します。 アプリケーションで設定する必要がある唯一のプロパティは 、MFPKEY_WMAAECMA_SYSTEM_MODE プロパティです。 このプロパティは、DMO 内で処理パイプラインを構成します。 その他のプロパティは省略可能です。

2. 入力形式と出力形式を設定する

フィルター モードで DMO を使用している場合は、 IMediaObject::SetInputType を呼び出して入力形式を設定します。 入力形式は、ほぼすべての有効な非圧縮 PCM または IEEE 浮動小数点オーディオの種類にすることができます。 入力形式が出力形式と一致しない場合、DMO は自動的にサンプルレート変換を実行します。

ソース モードで DMO を使用している場合は、入力形式を設定しないでください。 DMO は、オーディオ デバイスに基づいて入力形式を自動的に構成します。

どちらのモードでも、 IMediaObject::SetOutputType を呼び出して出力形式を設定します。 DMO では、次の出力形式を使用できます。

  • サブタイプ: MEDIASUBTYPE_PCM または MEDIASUBTYPE_IEEE_FLOAT
  • フォーマット ブロック: WAVEFORMAT または WAVEFORMATEX
  • 1 秒あたりのサンプル数: 8,000;11,025;16,000;または 22,050
  • チャネル: AEC 専用モードの場合は 1、マイクアレイ処理の場合は 2 または 4
  • サンプルあたりのビット数: 16

次のコードは、出力の種類を 16 ビットのシングルチャネル PCM オーディオに設定します。

DMO_MEDIA_TYPE mt;  // Media type.
mt.majortype = MEDIATYPE_Audio;
mt.subtype = MEDIASUBTYPE_PCM;
mt.lSampleSize = 0;
mt.bFixedSizeSamples = TRUE;
mt.bTemporalCompression = FALSE;
mt.formattype = FORMAT_WaveFormatEx;

// Allocate the format block to hold the WAVEFORMATEX structure.
hr = MoInitMediaType(&mt, sizeof(WAVEFORMATEX));
if (SUCCEEDED(hr))
{
    WAVEFORMATEX *pwav = (WAVEFORMATEX*)mt.pbFormat;
    pwav->wFormatTag = WAVE_FORMAT_PCM;
    pwav->nChannels = 1;
    pwav->nSamplesPerSec = 16000;
    pwav->nAvgBytesPerSec = 32000;
    pwav->nBlockAlign = 2;
    pwav->wBitsPerSample = 16;
    pwav->cbSize = 0;

    // Set the output type.
    if (SUCCEEDED(hr))
    {
        hr = pDMO->SetOutputType(0, &mt, 0); 
    }
    // Free the format block.
    MoFreeMediaType(&mt);
}

3. データの処理

データを処理する前に、 IMediaObject::AllocateStreamingResources を呼び出することをお勧めします。 このメソッドは、DMO によって内部的に使用されるリソースを割り当てます。 前ではなく、前述の手順の後に AllocateStreamingResources を呼び出します。 このメソッドを呼び出さない場合、DMO はデータ処理の開始時にリソースを自動的に割り当てます。

フィルター モードで DMO を使用している場合は、 IMediaObject::P rocessInput を呼び出して DMO に入力データを渡す必要があります。 マイクのオーディオ データは 0 をストリームし、スピーカーラインのオーディオ データはストリーム 1 に移動します。 ソース モードで DMO を使用している場合は、 ProcessInput を呼び出す必要はありません。

DSP から出力データを取得するには、次の手順を実行します。

  1. 出力データを保持するバッファー オブジェクトを作成します。 バッファー オブジェクトは 、IMediaBuffer インターフェイスを実装する必要があります。 バッファーのサイズは、アプリケーションの要件によって異なります。 より大きなバッファーを割り当てると、グリッチが発生する可能性が低くなります。
  2. DMO_OUTPUT_DATA_BUFFER構造体を宣言し、バッファー オブジェクトを指す pBuffer メンバーを設定します。
  3. DMO_OUTPUT_DATA_BUFFER構造体を IMediaObject::P rocessOutput メソッドに渡します。
  4. DMO に出力データがある限り、このメソッドを引き続き呼び出します。 DSP は、DMO_OUTPUT_DATA_BUFFER 構造体のdwStatus メンバーに DMO_OUTPUT_DATA_BUFFERF_INCOMPLETE フラグを設定することで、より多くの出力があることを通知します。

要件

要件
サポートされている最小のクライアント
Windows Vista [デスクトップ アプリのみ]
サポートされている最小のサーバー
Windows Server 2008 [デスクトップ アプリのみ]
Header
Wmcodecdsp.h
[DLL]
Mfwmaaec.dll

こちらもご覧ください

デジタル信号プロセッサ