Microphone Array Geometry, proprietà

In Windows Vista e versioni successive viene fornito il supporto per le matrici di microfoni. Nella maggior parte dei casi, un singolo microfono incorporato in un portatile o un monitor non acquisisce molto bene il suono. Una matrice di microfoni offre prestazioni migliori per isolare una sorgente audio e rifiutare il rumore ambientale e il riverbero. La proprietà KSPROPERTY_AUDIO_MIC_ARRAY_GEOMETRY specifica la geometria di una matrice di microfoni. Il valore della proprietà , KSAUDIO_MIC_ARRAY_GEOMETRY, descrive il tipo di matrice (lineare, planare e così via), il numero di microfoni nella matrice e altre funzionalità.

Questo argomento descrive in che modo le matrici di microfoni USB esterni possono usare il supporto della matrice di microfoni fornito con Windows Vista. Una matrice di microfoni USB esterni deve fornire i parametri necessari per descrivere la geometria e altre funzionalità della matrice in risposta a una richiesta di GET_MEM .

La matrice di microfoni USB usa un formato standard per fornire le informazioni di geometria. Il driver di classe audio USB di Windows Vista deve usare lo stesso formato quando legge le informazioni sulla geometria. Per altre informazioni sul formato standard, vedere Microphone Array Geometry Descriptor Format.For more information about the standard format, see Microphone Array Geometry Descriptor Format.

Un'applicazione può chiamare IPart::GetSubType per recuperare informazioni su un jack per determinare se il dispositivo collegato al jack è una matrice di microfoni. IPart::GetSubType restituisce un GUID di categoria pin che rappresenta il tipo di jack di input. Se il dispositivo collegato è una matrice di microfoni, il GUID restituito è uguale a KSNODETYPE_MICROPHONE_ARRAY. L'applicazione può anche aiutarti a determinare se hai collegato la matrice del microfono nel jack sbagliato. In quest'ultimo scenario, il GUID della categoria di pin restituito è per un dispositivo diverso o indica che non è presente alcun dispositivo collegato al jack del microfono. Per altre informazioni sui GUID delle categorie di pin, vedere Pin Category Property.For more information about the pin category GUID, see Pin Category Property.

Dopo che un'applicazione individua una matrice di microfoni collegata al jack di input corretto, il passaggio successivo consiste nel determinare la geometria della matrice. Esistono tre geometrie di base: lineare, planare e tridimensionale (3D). Le informazioni sulla geometria forniscono anche dettagli quali l'intervallo di frequenza e le coordinate x-y-z di ogni microfono.

L'esempio di codice seguente mostra una struttura KSAUDIO_MIC_ARRAY_GEOMETRY usata da un driver audio per descrivere una matrice di microfoni USB esterna:

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
};

Nell'esempio di codice precedente, la variabile ar_mic_Coordinates è una matrice della struttura KSAUDIO_MICROPHONE_COORDINATES e contiene le coordinate per i microfoni nella matrice di microfoni.

Nell'esempio di codice seguente viene illustrato come viene usata la matrice ar_mic_Coordinates per descrivere le posizioni geometriche dei microfoni nella matrice di microfoni, come descritto nell'esempio di codice precedente:

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
 }
};

Nell'esempio di codice precedente, le coordinate x-y-z vengono date per ogni microfono nella matrice di microfoni, insieme agli angoli verticali e orizzontali che descrivono le aree di lavoro effettive.

Per modificare il driver di esempio MSVAD di Micarray per fornire informazioni di geometria di matrice per un array di microfoni virtuali, è necessario eseguire le attività seguenti.

Passare prima a Src\Audio\Msvad\Micarray e individuare il file Mintopo.cpp. Modificare la sezione del gestore delle proprietà in Mintopo.cpp in modo che la struttura KSAUDIO_MIC_ARRAY_GEOMETRY contenga informazioni sulla matrice del microfono. La sezione specifica del codice che è necessario modificare è illustrata nell'esempio di codice seguente:

// 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'esempio di codice precedente mostra le informazioni fornite per una matrice di microfoni lineare con due elementi del microfono, ognuno dei quali è un tipo cardioid e che si trova 100 mm dal centro della matrice.

Per informazioni su come sviluppare un'applicazione per individuare le matrici di microfoni, vedere Appendice C di Come creare e usare matrici di microfoni per Windows Vista.