Voice Capture DSP
Ein -Objekt, das mehrere DSPs im Zusammenhang mit der Spracherfassung kapselt.
CLSID
CLSID_CWMAudioAEC
Schnittstellen
- IMediaObject
- Ipropertystore
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:
- 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.
- Deklarieren Sie eine DMO_OUTPUT_DATA_BUFFER-Struktur , und legen Sie den pBuffer-Member so fest, dass er auf Ihr Pufferobjekt verweist.
- Übergeben Sie die DMO_OUTPUT_DATA_BUFFER-Struktur an die IMediaObject::P rocessOutput-Methode .
- 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 |
|
DLL |
|
Siehe auch