共用方式為


語音擷取 DSP

物件,封裝數個與語音擷取相關的 DSP。

CLSID

CLSID_CWMAudioAEC

介面

屬性

屬性 Description
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,語音擷取物件會將多個 DSP 封裝在單一物件中,而物件只是 DMO 物件, (它不會實作 IMFTransform) 。 語音擷取 DMO 包含下列 DSP 元件:

  • AEC (聲場回音取消)
  • 麥克風陣列處理
  • 雜訊抑制
  • 自動增益控制
  • 語音活動偵測

應用程式可以個別開啟和關閉每個元件。

語音擷取 DMO 支援兩種作業模式: 篩選 模式和 來源 模式。 在篩選模式中,應用程式會從麥克風和喇叭線路將音訊樣本傳送至 DMO,而 DMO 會產生輸出。

在來源模式中,應用程式不需要將範例傳遞至 DMO。 相反地,DMO 會管理音訊裝置上的所有作業,包括初始化裝置、擷取和同步處理音訊串流、計算時間戳記,以及擷取麥克風陣列的幾何。 使用來源模式時,應用程式只會設定 DMO,而 DMO 的輸出則是乾淨且已處理的麥克風訊號。 來源模式比篩選模式更容易使用,而且建議用於大部分的應用程式。

目前語音擷取 DMO 僅支援單通道聲場回音取消 (AEC) ,因此來自喇叭線路的輸出必須是單通道。 如果停用麥克風陣列處理,多通道輸入會折迭成一個通道以進行 AEC 處理。 如果同時啟用麥克風陣列處理和 AEC 處理,則會在麥克風陣列處理之前,在每個麥克風元素上執行 AEC。

麥克風陣列處理

麥克風陣列是一組緊密定位的麥克風。 麥克風陣列可達到比單一麥克風更好的方向性,因為聲波會以稍微不同的時間抵達每個麥克風。 如需麥克風陣列的詳細資訊,請參閱 Web 文章 Windows Vista 中的麥克風陣列支援如何建置和使用 Windows Vista 的麥克風陣列

使用語音擷取 DSP

若要使用語音擷取 DSP,請執行下列步驟。

1.初始化 DMO

使用 CLSID CLSID_CWMAudioAEC呼叫CoCreateInstance來建立語音擷取 DMO。 語音擷取 DSDP 只會公開 IMediaObjectIPropertyStore 介面,因此只能作為 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_PCMMEDIASUBTYPE_IEEE_FLOAT
  • 格式區塊.. ][HTTPAT ] 或 [ HTTPATEX]
  • 每秒樣本數:8,000;11,025;16,000;或 22,050
  • 通道:1 表示僅限 AEC 模式,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 [僅限傳統型應用程式]
標頭
Wmcodecdsp.h
DLL
Mfwmaaec.dll

另請參閱

數位訊號處理器