音声キャプチャ DSP
音声キャプチャに関連するいくつかの DSP をカプセル化する オブジェクト。
CLSID
CLSID_CWMAudioAEC
インターフェイス
- IMediaObject
- IPropertyStore
プロパティ
プロパティ | 説明 |
---|---|
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 から出力データを取得するには、次の手順を実行します。
- 出力データを保持するバッファー オブジェクトを作成します。 バッファー オブジェクトは 、IMediaBuffer インターフェイスを実装する必要があります。 バッファーのサイズは、アプリケーションの要件によって異なります。 より大きなバッファーを割り当てると、グリッチが発生する可能性が低くなります。
- DMO_OUTPUT_DATA_BUFFER構造体を宣言し、バッファー オブジェクトを指す pBuffer メンバーを設定します。
- DMO_OUTPUT_DATA_BUFFER構造体を IMediaObject::P rocessOutput メソッドに渡します。
- DMO に出力データがある限り、このメソッドを引き続き呼び出します。 DSP は、DMO_OUTPUT_DATA_BUFFER 構造体のdwStatus メンバーに DMO_OUTPUT_DATA_BUFFERF_INCOMPLETE フラグを設定することで、より多くの出力があることを通知します。
要件
要件 | 値 |
---|---|
サポートされている最小のクライアント |
Windows Vista [デスクトップ アプリのみ] |
サポートされている最小のサーバー |
Windows Server 2008 [デスクトップ アプリのみ] |
Header |
|
[DLL] |
|
こちらもご覧ください