DSP de capture vocale

Objet qui encapsule plusieurs DSP liés à la capture vocale.

CLSID

CLSID_CWMAudioAEC

Interfaces

Propriétés

Propriété Description
MFPKEY_WMAAECMA_DEVICE_INDEXES Spécifie les périphériques audio que le DMO utilise pour la capture et le rendu audio.
MFPKEY_WMAAECMA_DEVICEPAIR_GUID Identifie la combinaison d’appareils audio que l’application utilise actuellement.
MFPKEY_WMAAECMA_DMO_SOURCE_MODE Spécifie si le DMO utilise le mode source ou le mode filtre.
MFPKEY_WMAAECMA_FEATR_AES Spécifie le nombre de fois où le DMO effectue une suppression d’écho acoustique (AES) sur le signal résiduel.
MFPKEY_WMAAECMA_FEATR_AGC Spécifie si le DMO effectue le contrôle de gain automatique.
MFPKEY_WMAAECMA_FEATR_CENTER_CLIP Spécifie si le DMO effectue le découpage central.
MFPKEY_WMAAECMA_FEATR_ECHO_LENGTH Spécifie la durée de l’écho que l’algorithme d’annulation d’écho acoustique (AEC) peut gérer.
MFPKEY_WMAAECMA_FEATR_FRAME_SIZE Spécifie la taille de l’image audio.
MFPKEY_WMAAECMA_FEATR_MICARR_BEAM Spécifie le faisceau utilisé par le DMO pour le traitement du réseau de microphones.
MFPKEY_WMAAECMA_FEATR_MICARR_MODE Spécifie la façon dont le DMO effectue le traitement du tableau de microphones.
MFPKEY_WMAAECMA_FEATR_MICARR_PREPROC Spécifie si le DMO effectue le prétraitement du réseau de microphones.
MFPKEY_WMAAECMA_FEATR_NOISE_FILL Spécifie si le DMO effectue le remplissage du bruit.
MFPKEY_WMAAECMA_FEATR_NS Spécifie si le DMO effectue la suppression du bruit.
MFPKEY_WMAAECMA_FEATR_VAD Spécifie le type de détection d’activité vocale que le DMO effectue.
MFPKEY_WMAAECMA_FEATURE_MODE Permet à l’application de remplacer les paramètres par défaut sur différentes propriétés.
MFPKEY_WMAAECMA_MIC_GAIN_BOUNDER Spécifie si le DMO applique une limite de gain de microphone.
MFPKEY_WMAAECMA_MICARRAY_DESCPTR Spécifie la géométrie du tableau de microphones.
MFPKEY_WMAAECMA_QUALITY_METRICS Récupère les métriques de qualité pour AEC.
MFPKEY_WMAAECMA_RETRIEVE_TS_STATS Spécifie si le DMO stocke les statistiques d’horodatage dans le Registre.
MFPKEY_WMAAECMA_SYSTEM_MODE Définit le mode de traitement.

 

Notes

Contrairement aux autres DSP, l’objet de capture vocale encapsule plusieurs DSP dans un seul objet, et l’objet est un objet DMO uniquement (il n’implémente pas IMFTransform). Le DMO de capture vocale comprend les composants DSP suivants :

  • Annulation d’écho acoustique (AEC)
  • Traitement du tableau de microphones
  • Suppression du bruit
  • Contrôle automatique des gains
  • Détection de l’activité vocale

Les applications peuvent activer et désactiver chaque composant individuellement.

Le DMO de capture vocale prend en charge deux modes de fonctionnement, le mode filtre et le mode source . En mode filtre, l’application envoie des exemples audio du microphone et de la ligne du haut-parleur au DMO, et le DMO produit une sortie.

En mode source, l’application n’a pas besoin de remettre des exemples au DMO. Au lieu de cela, le DMO gère toutes les opérations sur les périphériques audio, y compris l’initialisation des appareils, la capture et la synchronisation des flux audio, le calcul des horodatages et la récupération de la géométrie du réseau de microphones. À l’aide du mode source, l’application configure simplement le DMO, et la sortie du DMO est un signal de microphone traité propre. Le mode source est beaucoup plus facile à utiliser que le mode filtre et est recommandé pour la plupart des applications.

Actuellement, le DMO de capture vocale prend uniquement en charge l’annulation d’écho acoustique à canal unique (AEC), de sorte que la sortie de la ligne d’orateur doit être monocanal. Si le traitement de la matrice de microphones est désactivé, l’entrée multicanal est repliée sur un canal pour le traitement AEC. Si le traitement de la matrice de microphones et le traitement AEC sont activés, AEC est effectué sur chaque élément de microphone avant le traitement du réseau de microphones.

Traitement de la matrice de microphones

Un réseau de microphones est un ensemble de microphones étroitement positionnés. Les tableaux de microphones obtiennent une meilleure directionnalité qu’un seul microphone, car les ondes acoustiques arrivent à chaque microphone à une heure légèrement différente. Pour plus d’informations sur les tableaux de microphones, consultez les articles web Prise en charge du réseau de microphones dans Windows Vista et Comment créer et utiliser des tableaux de microphones pour Windows Vista.

Utilisation du DSP de capture vocale

Pour utiliser le DSP Voice Capture, effectuez les étapes suivantes.

1. Initialiser le DMO

Créez le DMO de capture vocale en appelant CoCreateInstance avec le CLSID CLSID_CWMAudioAEC. Le DSDP de capture vocale expose uniquement les interfaces IMediaObject et IPropertyStore , de sorte qu’il ne peut être utilisé que comme DMO.

Par défaut, le DMO est en mode source. Pour sélectionner le mode de filtrage, définissez la propriété MFPKEY_WMAAECMA_DMO_SOURCE_MODE sur VARIANT_FALSE.

Ensuite, configurez les propriétés internes du DMO à l’aide de l’interface IPropertyStore . La seule propriété qu’une application doit définir est la propriété MFPKEY_WMAAECMA_SYSTEM_MODE . Cette propriété configure le pipeline de traitement dans le DMO. Les autres propriétés sont facultatives.

2. Définir les formats d’entrée et de sortie

Si vous utilisez le DMO en mode filtre, définissez le format d’entrée en appelant IMediaObject::SetInputType. Le format d’entrée peut être presque n’importe quel type audio non compressé PCM ou IEEE à virgule flottante valide. Si le format d’entrée ne correspond pas au format de sortie, le DMO effectue automatiquement la conversion du taux d’échantillonnage.

Si vous utilisez le DMO en mode source, ne définissez pas le format d’entrée. Le DMO configure automatiquement le format d’entrée en fonction des périphériques audio.

Dans les deux modes, définissez le format de sortie en appelant IMediaObject::SetOutputType. Le DMO peut accepter les formats de sortie suivants :

  • Sous-type : MEDIASUBTYPE_PCM ou MEDIASUBTYPE_IEEE_FLOAT
  • Bloc de format : WAVEFORMAT ou WAVEFORMATEX
  • Échantillons par seconde : 8 000 ; 11,025; 16,000; ou 22 050
  • Canaux : 1 pour le mode AEC uniquement, 2 ou 4 pour le traitement de la matrice de microphones
  • Bits par exemple : 16

Le code suivant définit le type de sortie sur audio PCM monocanal 16 bits :

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. Traiter les données

Avant de traiter des données, il est recommandé d’appeler IMediaObject::AllocateStreamingResources. Cette méthode alloue les ressources utilisées en interne par le DMO. Appelez AllocateStreamingResources après les étapes répertoriées précédemment, pas avant. Si vous n’appelez pas cette méthode, le DMO alloue automatiquement des ressources au démarrage du traitement des données.

Si vous utilisez le DMO en mode filtre, vous devez passer des données d’entrée au DMO en appelant IMediaObject::P rocessInput. Les données audio du microphone sont diffusées en continu 0, et les données audio de la ligne de haut-parleur passent au flux 1. Si vous utilisez le DMO en mode source, vous n’avez pas besoin d’appeler ProcessInput.

Pour obtenir des données de sortie à partir de la DSP, effectuez les étapes suivantes :

  1. Créez un objet de mémoire tampon pour contenir les données de sortie. L’objet de mémoire tampon doit implémenter l’interface IMediaBuffer . La taille de la mémoire tampon dépend des exigences de votre application. L’allocation d’une mémoire tampon plus importante peut réduire les risques de problèmes.
  2. Déclarez une structure DMO_OUTPUT_DATA_BUFFER et définissez le membre pBuffer pour qu’il pointe vers votre objet de mémoire tampon.
  3. Passez la structure DMO_OUTPUT_DATA_BUFFER à la méthode IMediaObject::P rocessOutput .
  4. Continuez à appeler cette méthode tant que le DMO a des données de sortie. La DSP signale qu’elle a plus de sortie en définissant l’indicateur DMO_OUTPUT_DATA_BUFFERF_INCOMPLETE dans le membre dwStatus de la structure DMO_OUTPUT_DATA_BUFFER .

Spécifications

Condition requise Valeur
Client minimal pris en charge
Windows Vista [applications de bureau uniquement]
Serveur minimal pris en charge
Windows Server 2008 [applications de bureau uniquement]
En-tête
Wmcodecdsp.h
DLL
Mfwmaaec.dll

Voir aussi

Processeurs de signal numérique