Microphone Array Geometry, propriété
Dans Windows Vista et versions ultérieures, la prise en charge des groupes de microphones est fournie. Dans la plupart des cas, un seul microphone incorporé dans un ordinateur portable ou un moniteur ne capture pas très bien le son. Un ensemble de microphones fonctionne mieux pour isoler une source sonore et rejeter le bruit ambiant et la réverbération. La propriété KSPROPERTY_AUDIO_MIC_ARRAY_GEOMETRY spécifie la géométrie d’un tableau de microphones. La valeur de propriété, KSAUDIO_MIC_ARRAY_GEOMETRY, décrit le type de tableau (linéaire, planaire, etc.), le nombre de microphones dans le tableau et d’autres fonctionnalités.
Cette rubrique décrit comment les réseaux de microphones USB externes peuvent utiliser la prise en charge de la baie de microphones fournie avec Windows Vista. Un réseau de microphones USB externe doit fournir les paramètres requis pour décrire la géométrie et d’autres fonctionnalités de son tableau en réponse à une demande de GET_MEM .
Le réseau de microphones USB utilise un format standard pour fournir les informations géométriques. Le pilote de classe audio USB Windows Vista doit utiliser le même format lorsqu’il lit les informations géométriques. Pour plus d’informations sur le format standard, consultez Microphone Array Geometry Descriptor Format.
Une application peut appeler IPart::GetSubType pour récupérer des informations sur une prise afin de déterminer si l’appareil branché à la prise est un réseau de microphones. IPart::GetSubType retourne un GUID de catégorie de broche qui représente le type de prise d’entrée. Si l’appareil branché est un réseau de microphones, le GUID retourné est égal à KSNODETYPE_MICROPHONE_ARRAY. L’application peut également vous aider à déterminer si vous avez branché votre réseau de microphones dans la mauvaise prise. Dans ce dernier scénario, le GUID de la catégorie d’épingle retourné concerne un autre appareil ou indique qu’aucun appareil n’est connecté à la prise du microphone. Pour plus d’informations sur les GUID de la catégorie d’épingle, consultez Propriété de catégorie de broche.
Une fois qu’une application a découvert un réseau de microphones branché sur la prise d’entrée appropriée, l’étape suivante consiste à déterminer la géométrie du tableau. Il existe trois géométries de base : linéaire, planaire et tridimensionnelle (3D). Les informations géométriques fournissent également des détails tels que la plage de fréquences et les coordonnées x-y-z de chaque microphone.
L’exemple de code suivant montre une structure KSAUDIO_MIC_ARRAY_GEOMETRY qu’un pilote audio utilise pour décrire un réseau de microphones USB externes :
KSAUDIO_MIC_ARRAY_GEOMETRY mic_Array =
{
0x100,// usVersion (1.0)
KSMICARRAY_MICARRAYTYPE_LINEAR,// usMicArrayType
7854, // wVerticalAngleBegin (45 deg; PI/4 radians x 10000)
-7854, // wVerticalAngleEnd
0, // lHorizontalAngleBegin
0, // lHorizontalAngleEnd
25, // usFrequencyBandLo in Hz
19500, // usFrequencyBandHi in Hz
2, // usNumberOfMicrophones
ar_mic_Coordinates // KsMicCoord
};
Dans l’exemple de code précédent, la variable ar_mic_Coordinates est un tableau de la structure KSAUDIO_MICROPHONE_COORDINATES et elle contient les coordonnées des microphones dans le réseau de microphones.
L’exemple de code suivant montre comment le tableau ar_mic_Coordinates est utilisé pour décrire les emplacements géométriques des microphones dans le tableau de microphones, comme décrit dans l’exemple de code précédent :
KsMicCoord ar_mic_Coordinates[] =
{
// Array microphone 1
{
KSMICARRAY_MICTYPE_CARDIOID,// usType
100, // wXCoord (mic elements are 200 mm apart)
0,// wYCoord
0, // wZCoord
0,// wVerticalAngle
0,// wHorizontalAngle
},
// Array microphone 2
{
KSMICARRAY_MICTYPE_CARDIOID,// usType
-100, // wXCoord
0,// wYCoord
0, // wZCoord
0,// wVerticalAngle
0,// wHorizontalAngle
}
};
Dans l’exemple de code précédent, les coordonnées x-y-z sont fournies pour chaque microphone du réseau de microphones, ainsi que les angles verticaux et horizontaux qui décrivent leurs zones de travail effectives.
Pour modifier l’exemple de pilote MSVAD Micarray afin de fournir des informations de géométrie de tableau pour un réseau de microphones virtuels, vous devez effectuer les tâches suivantes.
Tout d’abord, accédez à Src\Audio\Msvad\Micarray et recherchez le fichier Mintopo.cpp. Modifiez la section gestionnaire de propriétés dans Mintopo.cpp afin que la structure KSAUDIO_MIC_ARRAY_GEOMETRY contienne des informations sur le réseau de microphones. La section spécifique du code que vous devez modifier est illustrée dans l’exemple de code suivant :
// Modify this portion of PropertyHandlerMicArrayGeometry
PKSAUDIO_MIC_ARRAY_GEOMETRY pMAG = (PKSAUDIO_MIC_ARRAY_GEOMETRY)PropertyRequest->Value;
// fill in mic array geometry fields
pMAG->usVersion = 0x0100; // Version of Mic array specification (0x0100)
pMAG->usMicArrayType = (USHORT)KSMICARRAY_MICARRAYTYPE_LINEAR; // Type of Mic Array
pMAG->wVerticalAngleBegin = -7854; // Work Volume Vertical Angle Begin (-45 degrees)
pMAG->wVerticalAngleEnd = 7854; // Work Volume Vertical Angle End (+45 degrees)
pMAG->wHorizontalAngleBegin = 0; // Work Volume Horizontal Angle Begin
pMAG->wHorizontalAngleEnd = 0; // Work Volume Horizontal Angle End
pMAG->usFrequencyBandLo = 100; // Low end of Freq Range
pMAG->usFrequencyBandHi = 8000; // High end of Freq Range
pMAG->usNumberOfMicrophones = 2; // Count of microphone coordinate structures to follow.
pMAG->KsMicCoord[0].usType = (USHORT)KSMICARRAY_MICTYPE_CARDIOID;
pMAG->KsMicCoord[0].wXCoord = -100; // mic elements are 200 mm apart
pMAG->KsMicCoord[0].wYCoord = 0;
pMAG->KsMicCoord[0].wZCoord = 0;
pMAG->KsMicCoord[0].wVerticalAngle = 0;
pMAG->KsMicCoord[0].wHorizontalAngle = 0;
pMAG->KsMicCoord[1].usType = (USHORT)KSMICARRAY_MICTYPE_CARDIOID;
pMAG->KsMicCoord[1].wXCoord = 100; // mic elements are 200 mm apart
pMAG->KsMicCoord[1].wYCoord = 0;
pMAG->KsMicCoord[1].wZCoord = 0;
pMAG->KsMicCoord[1].wVerticalAngle = 0;
pMAG->KsMicCoord[1].wHorizontalAngle = 0;
L’exemple de code précédent montre des informations qui ont été fournies pour un réseau de microphones linéaires comportant deux éléments de microphone, chacun d’entre eux étant un type cardioïde et situé à 100 mm du centre du tableau.
Pour plus d’informations sur le développement d’une application pour découvrir des réseaux de microphones, consultez l’Annexe C de La création et de l’utilisation de réseaux de microphones pour Windows Vista.