Propiedad Geometry de la matriz de micrófonos
En Windows Vista y versiones posteriores, se proporciona compatibilidad con matrices de micrófonos. En la mayoría de las situaciones, un único micrófono incrustado en un portátil o monitor no captura muy bien el sonido. Una matriz de micrófonos funciona mejor para aislar una fuente de sonido y rechazar el ruido ambiente y la reverberación. La propiedad KSPROPERTY_AUDIO_MIC_ARRAY_GEOMETRY especifica la geometría de una matriz de micrófonos. El valor de la propiedad, KSAUDIO_MIC_ARRAY_GEOMETRY, describe el tipo de matriz (lineal, planar, etc.), el número de micrófonos de la matriz y otras características.
En este tema se describe cómo las matrices de micrófonos USB externos pueden usar la compatibilidad con la matriz de micrófonos proporcionada con Windows Vista. Una matriz de micrófono USB externo debe proporcionar los parámetros necesarios para describir la geometría y otras características de su matriz en respuesta a una solicitud de GET_MEM .
La matriz de micrófonos USB usa un formato estándar para proporcionar la información de geometría. El controlador de clase de audio USB de Windows Vista debe usar el mismo formato cuando lee la información de geometría. Para obtener más información sobre el formato estándar, vea Formato de descriptor de geometría de matriz de micrófonos.
Una aplicación puede llamar a IPart::GetSubType para recuperar información sobre un conector para determinar si el dispositivo conectado a la toma es una matriz de micrófonos. IPart::GetSubType devuelve un GUID de categoría de pin que representa el tipo de jack de entrada. Si el dispositivo que está conectado es una matriz de micrófonos, el GUID devuelto es igual a KSNODETYPE_MICROPHONE_ARRAY. La aplicación también puede ayudarle a determinar si ha conectado la matriz de micrófonos a la toma incorrecta. En este último escenario, el GUID de categoría de anclaje devuelto es para un dispositivo diferente o indica que no hay ningún dispositivo conectado al conector de micrófono. Para obtener más información sobre los GUID de categoría de patillas, vea Pin Category Property.
Una vez que una aplicación detecta una matriz de micrófonos que se conecta al conector de entrada correcto, el siguiente paso consiste en determinar la geometría de la matriz. Hay tres geometrías básicas: lineal, planar y tridimensional (3D). La información de geometría también proporciona detalles, como el intervalo de frecuencia y las coordenadas x-y-z de cada micrófono.
En el ejemplo de código siguiente se muestra una estructura de KSAUDIO_MIC_ARRAY_GEOMETRY que usa un controlador de audio para describir una matriz de micrófonos USB externa:
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
};
En el ejemplo de código anterior, la variable ar_mic_Coordinates es una matriz de la estructura de KSAUDIO_MICROPHONE_COORDINATES y contiene las coordenadas de los micrófonos de la matriz de micrófonos.
En el ejemplo de código siguiente se muestra cómo se usa la matriz ar_mic_Coordinates para describir las ubicaciones geométricas de los micrófonos en la matriz de micrófonos, tal como se describe en el ejemplo de código anterior:
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
}
};
En el ejemplo de código anterior, las coordenadas x-y-z se proporcionan para cada micrófono de la matriz de micrófonos, junto con los ángulos verticales y horizontales que describen sus áreas de trabajo eficaces.
Para modificar el controlador de ejemplo MSVAD de Micarray para proporcionar información de geometría de matriz para una matriz de micrófonos virtuales, debe realizar las siguientes tareas.
En primer lugar, vaya a Src\Audio\Msvad\Micarray y busque el archivo Mintopo.cpp. Edite la sección del controlador de propiedades en Mintopo.cpp para que la estructura de KSAUDIO_MIC_ARRAY_GEOMETRY contenga información sobre la matriz de micrófonos. La sección específica del código que debe modificar se muestra en el ejemplo de código siguiente:
// 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;
En el ejemplo de código anterior se muestra información proporcionada para una matriz de micrófono lineal que tiene dos elementos de micrófono, cada uno de los cuales es un tipo cardioide y ubicado a 100 mm desde el centro de la matriz.
Para obtener información sobre cómo desarrollar una aplicación para detectar matrices de micrófonos, vea apéndice C de Cómo compilar y usar matrices de micrófonos para Windows Vista.