Remarque
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de vous connecter ou de modifier des répertoires.
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de modifier des répertoires.
Dans Windows Vista et versions ultérieures, la prise en charge des tableaux de microphones est assurée. Dans la plupart des cas, un microphone unique incorporé dans un ordinateur portable ou un moniteur ne capture pas très bien le son. Un réseau 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, et ainsi de suite), le nombre de microphones dans le tableau et d’autres fonctionnalités.
Cette rubrique décrit comment les micros USB externes peuvent utiliser le support des micros fourni avec Windows Vista. Un tableau 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 tableau 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 pour déterminer si l’appareil branché à la prise est un tableau de microphones. IPart::GetSubType retourne un GUID de catégorie de connecteur qui indique le type de prise d'entrée. Si l’appareil branché est un tableau de microphones, le GUID retourné est égal à KSNODETYPE_MICROPHONE_ARRAY. L’application peut également vous aider à déterminer si vous avez branché votre tableau de microphones dans la mauvaise prise. Dans ce dernier scénario, le GUID de la catégorie de connexion retourné est soit pour un autre appareil, soit qu’il indique qu’il n’y a pas d’appareil connecté à la prise de microphone. Pour plus d’informations sur les GUID des catégories de pins, consultez Pin Category Property.
Une fois qu’une application découvre un tableau de microphones connecté à la prise d’entrée correcte, l’étape suivante consiste à déterminer la géométrie du tableau. Il existe trois géométries de base : linéaire, planaire et trois dimensions (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 utilisée par un pilote audio pour décrire un tableau de microphones USB externe :
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 contient les coordonnées des microphones dans le tableau 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 tableau de microphones, ainsi que les angles verticaux et horizontaux qui décrivent leurs zones de travail efficaces.
Pour modifier l'exemple de pilote Micarray MSVAD afin de fournir des informations sur la géométrie de disposition 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 tableau de microphones. La section spécifique du code que vous devez modifier s’affiche 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 les informations fournies pour un tableau de microphones linéaire qui a deux éléments de microphone, chacun é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 tableaux de microphones, consultez l’annexe C de la création et de l’utilisation des tableaux de microphones pour Windows Vista.