Voice Capture-DSP

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

CLSID

CLSID _ CWMAudioAEC

Schnittstellen

Eigenschaften

Eigenschaft BESCHREIBUNG
MFPKEY _ _ WMAAECMA-GERÄTEINDIZES _ Gibt an, welche Audiogeräte der DMO zum Erfassen und Rendern von Audiodaten verwendet.
MFPKEY _ WMAAECMA _ DEVICEPAIR _ GUID Identifiziert die Kombination von Audiogeräten, die die Anwendung derzeit verwendet.
MFPKEY _ WMAAECMA _ DMO _ _ QUELLMODUS Gibt an, ob DMO Quellmodus oder Filtermodus verwendet.
MFPKEY _ WMAAECMA _ FEATR _ AES Gibt an, wie oft der DMO AES (Acoustic Echo Suppression) für das Restsignal ausführt.
MFPKEY _ WMAAECMA _ FEATR _ AGC Gibt an, ob die DMO automatische Verstärkungssteuerung ausführt.
MFPKEY _ WMAAECMA _ FEATR _ CENTER _ CLIP Gibt an, ob die DMO die zentrierte Beschneidung ausführt.
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 Audioframegröße an.
MFPKEY _ WMAAECMA _ FEATR _ MICARR _ STRAHL Gibt an, welchen Balken die DMO für die Mikrofonarrayverarbeitung verwendet.
MFPKEY _ WMAAECMA _ FEATR _ MICARR-MODUS _ Gibt an, wie die DMO Mikrofonarrayverarbeitung ausführt.
MFPKEY _ WMAAECMA _ FEATR _ MICARR _ PREPROC Gibt an, ob DMO Mikrofonarrayvorverarbeitung ausführt.
MFPKEY _ WMAAECMA _ FEATR _ NOISE _ FILL Gibt an, ob der DMO Rauschen auffüllt.
MFPKEY _ WMAAECMA _ FEATR _ NS Gibt an, ob die DMO Rauschunterdrückung ausführt.
MFPKEY _ WMAAECMA _ FEATR _ VAD Gibt den Typ der Sprachaktivitätserkennung an, die der DMO ausführt.
MFPKEY _ WMAAECMA-FEATUREMODUS _ _ Ermöglicht es der Anwendung, die Standardeinstellungen für verschiedene Eigenschaften zu überschreiben.
MFPKEY _ WMAAECMA _ MIC _ GAIN _ BOUNDER Gibt an, ob die DMO Mikrofon-Verstärkungsgrenze angewendet wird.
MFPKEY _ WMAAECMA _ MICARRAY _ DESCPTR Gibt die Geometrie des Mikrofonarrays an.
MFPKEY _ WMAAECMA _ QUALITY _ METRICS Ruft Qualitätsmetriken für AEC ab.
MFPKEY _ WMAAECMA _ RUFT TS _ _ STATS AB. Gibt an, ob der DMO Zeitstempelstatistiken in der Registrierung speichert.
MFPKEY _ WMAAECMA-SYSTEMMODUS _ _ 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 (esimplementiert nicht DIE Kapselung ). Die Spracherfassungs DMO umfasst die folgenden DSP-Komponenten:

  • Akustik-Echoabbruch (AEC)
  • Mikrofonarrayverarbeitung
  • Rauschunterdrückung
  • Automatische Verstärkungssteuerung
  • Sprachaktivitätserkennung

Anwendungen können jede Komponente einzeln aktivieren und deaktivieren.

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

Im Quellmodus muss die Anwendung keine Beispiele an die DMO. Stattdessen verwaltet DMO alle Vorgänge auf den Audiogeräten, einschließlich initialisieren der Geräte, Erfassen und Synchronisieren der Audiostreams, Berechnen von Zeitstempeln und Abrufen der Geometrie des Mikrofonarrays. Im Quellmodus konfiguriert die Anwendung einfach die DMO, und die Ausgabe des DMO ein bereinigtes, verarbeitetes Mikrofonsignal. Der Quellmodus ist deutlich einfacher zu verwenden als der Filtermodus und wird für die meisten Anwendungen empfohlen.

Derzeit unterstützt die Spracherfassungs-DMO AEC (AEC) nur einkanaligen Akustik-Echoabbruch, sodass die Ausgabe der Lautsprecherzeile ein Kanal sein muss. Wenn die Mikrofonarrayverarbeitung deaktiviert ist, wird die Mehrkanaleingabe für die AEC-Verarbeitung auf einen Kanal heruntergefahren. Wenn sowohl die Mikrofonarrayverarbeitung als auch die AEC-Verarbeitung aktiviert sind, wird AEC für jedes Mikrofonelement vor der Verarbeitung des Mikrofonarrays ausgeführt.

Mikrofonarrayverarbeitung

Ein Mikrofonarray ist ein Satz von mikrofonen, die eng positioniert sind. Mikrofonarrays erzielen eine bessere Direktionalität als ein einzelnes Mikrofon, da die Akustikwellen zu einem etwas anderen Zeitpunkt bei jedem Mikrofon eintreffen. Weitere Informationen zu Mikrofonarrays finden Sie in den Webartikeln Microphone Array Support in Windows Vista (Mikrofonarrayunterstützung in Windows Vista) und How to Build and Use Microphone Arrays for Windows Vista (Erstellen und Verwenden von Mikrofonarrays für Windows Vista).

Verwenden des Voice Capture-DSP

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

1. Initialisieren der DMO

Erstellen Sie die Spracherfassung DMO indem Sie CoCreateInstance mit der CLSID CLSID _ CWMAudioAEC aufrufen. Der Spracherfassungs-DSDP macht nur die Schnittstellen IMediaObject und IPropertyStore verfügbar, sodass er nur als DMO.

Der DMO wird standardmäßig auf den Quellmodus festgelegt. 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 der 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 im DMO. Die anderen Eigenschaften sind optional.

2. Festlegen der Eingabe- und Ausgabeformate

Wenn Sie die -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-Gleitkommaaudiotyp sein. Wenn das Eingabeformat nicht mit dem Ausgabeformat übereinstimmen sollte, DMO automatisch eine Konvertierung der Stichprobenrate ausgeführt.

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

Legen Sie in beiden Modus das Ausgabeformat fest, indem Sie IMediaObject::SetOutputType aufrufen. Die DMO können 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 ausschließlichen AEC-Modus, 2 oder 4 für die Verarbeitung von 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 auf aufruft. Diese Methode ordnet die ressourcen zu, die intern vom -DMO. Rufen Sie AllocateStreamingResources nach den zuvor aufgeführten Schritten auf, nicht zuvor. Wenn Sie diese Methode nicht aufrufen, weist DMO automatisch Ressourcen zu, wenn die Datenverarbeitung gestartet wird.

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

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

  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. Das Zuweisen eines größeren Puffers kann die Wahrscheinlichkeit von Störungen verringern.
  2. Deklarieren Sie DMO OUTPUT DATA _ _ _ BUFFER-Struktur, und legen Sie den pBuffer-Member so fest, dass er auf Ihr Pufferobjekt zeigen soll.
  3. Übergeben Sie DMO _ OUTPUT DATA _ _ BUFFER-Struktur an die IMediaObject::P rocessOutput-Methode.
  4. Fahren Sie mit dem Aufrufen dieser Methode fort, solange die DMO Ausgabedaten hat. Der DSP signalisiert, dass er über mehr Ausgabe verfügt, indem er das flag DMO _ OUTPUT DATA _ _ BUFFERF _ INCOMPLETE im dwStatus-Member der DMO OUTPUT DATA _ _ _ BUFFER-Struktur festlegen.

Requirements (Anforderungen)

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

Weitere Informationen

Digitale Signalprozessoren