Nota:
El acceso a esta página requiere autorización. Puede intentar iniciar sesión o cambiar directorios.
El acceso a esta página requiere autorización. Puede intentar cambiar los directorios.
En Windows Vista y versiones posteriores, se proporciona compatibilidad con matrices de micrófonos. En la mayoría de las situaciones, un solo micrófono incrustado en un portátil o monitor no captura el sonido muy bien. 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 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 los conjuntos de micrófonos USB externos pueden utilizar el soporte para el conjunto de micrófonos proporcionado por 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 Microphone Array Geometry Descriptor Format.
Una aplicación puede llamar a IPart::GetSubType para recuperar información sobre un conector para determinar si el dispositivo conectado al conector es una matriz de micrófonos. IPart::GetSubType devuelve un GUID de categoría de pin que representa el tipo de conector de entrada. Si el dispositivo 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 al conector incorrecto. En este último escenario, el GUID de categoría de pin devuelta 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 pines, consulte Pin Category Property.
Una vez que una aplicación detecta una matriz de micrófonos conectada al conector de entrada correcto, el siguiente paso es 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 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 de 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 del MSVAD de Micarray para proporcionar información de la geometría de la matriz para un arreglo 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 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.