Voice Capture DSP

Ein -Objekt, das mehrere DSPs im Zusammenhang mit der Spracherfassung kapselt.

CLSID

CLSID_CWMAudioAEC

Schnittstellen

Eigenschaften

Eigenschaft Beschreibung
MFPKEY_WMAAECMA_DEVICE_INDEXES Gibt an, welche Audiogeräte der DMO zum Aufzeichnen und Rendern von Audio verwendet.
MFPKEY_WMAAECMA_DEVICEPAIR_GUID Gibt die Kombination von Audiogeräten an, die die Anwendung derzeit verwendet.
MFPKEY_WMAAECMA_DMO_SOURCE_MODE Gibt an, ob der DMO den Quellmodus oder den Filtermodus verwendet.
MFPKEY_WMAAECMA_FEATR_AES Gibt an, wie oft der DMO die akustische Echounterdrückung (AES) für das Restsignal ausführt.
MFPKEY_WMAAECMA_FEATR_AGC Gibt an, ob der DMO die automatische Verstärkungssteuerung ausführt.
MFPKEY_WMAAECMA_FEATR_CENTER_CLIP Gibt an, ob der DMO zentriert beschnitten wird.
MFPKEY_WMAAECMA_FEATR_ECHO_LENGTH Gibt die Dauer des Echos an, die der AEC-Algorithmus (Acoustic Echo Cancellation) verarbeiten kann.
MFPKEY_WMAAECMA_FEATR_FRAME_SIZE Gibt die Größe des Audioframes an.
MFPKEY_WMAAECMA_FEATR_MICARR_BEAM Gibt an, welchen Strahl der DMO für die Verarbeitung des Mikrofonarrays verwendet.
MFPKEY_WMAAECMA_FEATR_MICARR_MODE Gibt an, wie der DMO die Verarbeitung des Mikrofonarrays ausführt.
MFPKEY_WMAAECMA_FEATR_MICARR_PREPROC Gibt an, ob der DMO die Vorverarbeitung des Mikrofonarrays ausführt.
MFPKEY_WMAAECMA_FEATR_NOISE_FILL Gibt an, ob der DMO eine Rauschfüllung ausführt.
MFPKEY_WMAAECMA_FEATR_NS Gibt an, ob die DMO die Rauschunterdrückung ausführt.
MFPKEY_WMAAECMA_FEATR_VAD Gibt den Typ der Sprachaktivitätserkennung an, die von der DMO ausgeführt wird.
MFPKEY_WMAAECMA_FEATURE_MODE Ermöglicht der Anwendung, die Standardeinstellungen für verschiedene Eigenschaften außer Kraft zu setzen.
MFPKEY_WMAAECMA_MIC_GAIN_BOUNDER Gibt an, ob der DMO die Mikrofonverstärkungsgrenze anwendet.
MFPKEY_WMAAECMA_MICARRAY_DESCPTR Gibt die Mikrofonarraygeometrie an.
MFPKEY_WMAAECMA_QUALITY_METRICS Ruft Qualitätsmetriken für AEC ab.
MFPKEY_WMAAECMA_RETRIEVE_TS_STATS Gibt an, ob der DMO Zeitstempelstatistiken in der Registrierung speichert.
MFPKEY_WMAAECMA_SYSTEM_MODE Legt den Verarbeitungsmodus fest.

 

Bemerkungen

Im Gegensatz zu den anderen DSPs kapselt das Voice Capture-Objekt mehrere DSPs in einem einzelnen Objekt, und das Objekt ist nur ein DMO-Objekt (es implementiert nicht IMFTransform). Das DMO für die Spracherfassung umfasst die folgenden DSP-Komponenten:

  • Akustische Echounterdrückung (AEC)
  • Verarbeitung von Mikrofonarrays
  • Rauschunterdrückung
  • Automatische Verstärkungssteuerung
  • Erkennung von Sprachaktivitäten

Anwendungen können jede Komponente einzeln ein- und ausschalten.

Die Spracherfassungs-DMO unterstützt zwei Betriebsmodi: Filtermodus und Quellmodus . Im Filtermodus sendet die Anwendung Audiobeispiele vom Mikrofon und von der Lautsprecherleitung an die DMO, und die DMO erzeugt eine Ausgabe.

Im Quellmodus muss die Anwendung keine Beispiele an die DMO übermitteln. Stattdessen verwaltet der DMO alle Vorgänge auf den Audiogeräten, einschließlich der Initialisierung der Geräte, der Erfassung und Synchronisierung der Audiodatenströme, dem Berechnen von Zeitstempeln und dem Abrufen der Geometrie des Mikrofonarrays. Im Quellmodus konfiguriert die Anwendung einfach das DMO, und die Ausgabe des DMO ist ein sauber verarbeitetes Mikrofonsignal. Der Quellmodus ist wesentlich einfacher zu verwenden als der Filtermodus und wird für die meisten Anwendungen empfohlen.

Derzeit unterstützt der DMO für die Sprachaufnahme nur einkanalige akustische Echounterdrückung (Acoustic Echo Cancellation, AEC), sodass die Ausgabe der Lautsprecherleitung ein Kanal sein muss. Wenn die Verarbeitung des Mikrofonarrays deaktiviert ist, wird die Mehrkanaleingabe für die AEC-Verarbeitung auf einen Kanal heruntergeklappt. Wenn sowohl die Mikrofonarrayverarbeitung als auch die AEC-Verarbeitung aktiviert sind, wird AEC vor der Verarbeitung des Mikrofonarrays für jedes Mikrofonelement ausgeführt.

Mikrofonarrayverarbeitung

Ein Mikrofonarray ist ein Satz eng positionierter Mikrofone. Mikrofonarrays erreichen eine bessere Richtung als ein einzelnes Mikrofon, da die akustischen Wellen zu einem etwas anderen Zeitpunkt an jedem Mikrofon ankommen. Weitere Informationen zu Mikrofonarrays finden Sie in den Webartikeln Mikrofonarray-Unterstützung in Windows Vistaund Erstellen und Verwenden von Mikrofonarrays für Windows Vista.

Verwenden des Voice Capture-DSP

Führen Sie die folgenden Schritte aus, um den DSP für Voice Capture zu verwenden.

1. Initialisieren der DMO

Erstellen Sie die Voice Capture-DMO, indem Sie CoCreateInstance mit dem CLSID-CLSID_CWMAudioAEC aufrufen. Die DSDP für die Spracherfassung macht nur die IMediaObject - und IPropertyStore-Schnittstellen verfügbar, sodass sie nur als DMO verwendet werden kann.

Der DMO verwendet standardmäßig den Quellmodus. Um den Filtermodus auszuwählen, legen Sie die eigenschaft MFPKEY_WMAAECMA_DMO_SOURCE_MODE auf VARIANT_FALSE fest.

Konfigurieren Sie als Nächstes die internen Eigenschaften des DMO mithilfe der IPropertyStore-Schnittstelle . Die einzige Eigenschaft, die eine Anwendung festlegen muss, ist die MFPKEY_WMAAECMA_SYSTEM_MODE-Eigenschaft . Diese Eigenschaft konfiguriert die Verarbeitungspipeline innerhalb der DMO. Die anderen Eigenschaften sind optional.

2. Festlegen der Eingabe- und Ausgabeformate

Wenn Sie den DMO im Filtermodus verwenden, legen Sie das Eingabeformat fest, indem Sie IMediaObject::SetInputType aufrufen. Das Eingabeformat kann fast jeder gültige unkomprimierte PCM- oder IEEE-Gleitkomma-Audiotyp sein. Wenn das Eingabeformat nicht mit dem Ausgabeformat übereinstimmt, führt die DMO automatisch eine Sampleratekonvertierung durch.

Wenn Sie DMO im Quellmodus verwenden, legen Sie das Eingabeformat nicht fest. Das DMO konfiguriert das Eingabeformat automatisch basierend auf den Audiogeräten.

Legen Sie in beiden Modi das Ausgabeformat fest, indem Sie IMediaObject::SetOutputType aufrufen. Die DMO kann die folgenden Ausgabeformate akzeptieren:

  • Untertyp: MEDIASUBTYPE_PCM oder MEDIASUBTYPE_IEEE_FLOAT
  • Formatblock: WAVEFORMAT oder WAVEFORMATEX
  • Stichproben pro Sekunde: 8.000; 11,025; 16,000; oder 22.050
  • Kanäle: 1 für den reinen AEC-Modus, 2 oder 4 für die Verarbeitung des Mikrofonarrays
  • Bits pro Beispiel: 16

Der folgende Code legt den Ausgabetyp auf 16-Bit-PCM-Audio mit einem Kanal fest:

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. Verarbeiten von Daten

Vor der Verarbeitung von Daten wird empfohlen, IMediaObject::AllocateStreamingResources aufzurufen. Diese Methode ordnet die ressourcen zu, die intern vom DMO verwendet werden. Rufen Sie AllocateStreamingResources nach den zuvor aufgeführten Schritten auf, nicht zuvor. Wenn Sie diese Methode nicht aufrufen, werden ressourcen automatisch vom DMO zugeordnet, wenn die Datenverarbeitung gestartet wird.

Wenn Sie den DMO im Filtermodus verwenden, müssen Sie Eingabedaten an die DMO übergeben, indem Sie IMediaObject::P rocessInput aufrufen. Die Audiodaten des Mikrofons werden in Stream 0 und die Audiodaten aus der Lautsprecherzeile auf Stream 1 übertragen. Wenn Sie den DMO im Quellmodus verwenden, müssen Sie ProcessInput nicht aufrufen.

Führen Sie die folgenden Schritte aus, um Ausgabedaten aus dem DSP abzurufen:

  1. Erstellen Sie ein Pufferobjekt, das die Ausgabedaten enthält. Das Pufferobjekt muss die IMediaBuffer-Schnittstelle implementieren. Die Größe des Puffers hängt von den Anforderungen Ihrer Anwendung ab. Die Zuweisung eines größeren Puffers kann die Wahrscheinlichkeit von Störungen verringern.
  2. Deklarieren Sie eine DMO_OUTPUT_DATA_BUFFER-Struktur , und legen Sie den pBuffer-Member so fest, dass er auf Ihr Pufferobjekt verweist.
  3. Übergeben Sie die DMO_OUTPUT_DATA_BUFFER-Struktur an die IMediaObject::P rocessOutput-Methode .
  4. Rufen Sie diese Methode so lange auf, wie die DMO über Ausgabedaten verfügt. Der DSP signalisiert, dass mehr Ausgabe vorhanden ist, indem das flag DMO_OUTPUT_DATA_BUFFERF_INCOMPLETE im dwStatus-Element der DMO_OUTPUT_DATA_BUFFER-Struktur festgelegt wird.

Anforderungen

Anforderung Wert
Unterstützte Mindestversion (Client)
Windows Vista [nur Desktop-Apps]
Unterstützte Mindestversion (Server)
Windows Server 2008 [nur Desktop-Apps]
Header
Wmcodecdsp.h
DLL
Mfwmaaec.dll

Siehe auch

Digitale Signalprozessoren