DSP de capture vocale
Objet qui encapsule plusieurs DSP liés à la capture vocale.
CLSID
CLSID_CWMAudioAEC
Interfaces
- IMediaObject
- Ipropertystore
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 :
- 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.
- 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.
- Passez la structure DMO_OUTPUT_DATA_BUFFER à la méthode IMediaObject::P rocessOutput .
- 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 |
|
DLL |
|
Voir aussi