Partilhar via


Propriedade da Geometria da Matriz de Microfones

No Windows Vista e versões posteriores, o suporte é fornecido para matrizes de microfone. Na maioria das situações, um único microfone embutido em um laptop ou monitor não captura o som muito bem. Um conjunto de microfones funciona melhor para isolar uma fonte de som e rejeitar o ruído ambiente e a reverberação. A propriedade KSPROPERTY_AUDIO_MIC_ARRAY_GEOMETRY especifica a geometria de uma matriz de microfone. O valor da propriedade, KSAUDIO_MIC_ARRAY_GEOMETRY, descreve o tipo de matriz (linear, planar e assim por diante), o número de microfones na matriz e outros recursos.

Este tópico descreve como matrizes de microfone USB externas podem usar o suporte de matriz de microfone fornecido com o Windows Vista. Uma matriz de microfone USB externo deve fornecer os parâmetros necessários para descrever a geometria e outros recursos de sua matriz em resposta a uma solicitação de GET_MEM .

A matriz de microfones USB usa um formato padrão para fornecer as informações de geometria. O driver de classe de áudio USB do Windows Vista deve usar o mesmo formato quando lê as informações de geometria. Para obter mais informações sobre o formato padrão, consulte Formato do descritor de geometria da matriz do microfone.

Um aplicativo pode chamar IPart::GetSubType para recuperar informações sobre um conector para determinar se o dispositivo conectado ao conector é uma matriz de microfone. IPart::GetSubType retorna um GUID de categoria de pino que representa o tipo de tomada de entrada. Se o dispositivo conectado for uma matriz de microfones, o GUID retornado será igual a KSNODETYPE_MICROPHONE_ARRAY. O aplicativo também pode ajudá-lo a determinar se você conectou seu conjunto de microfones na tomada errada. No último cenário, o GUID de categoria de pino retornado é para um dispositivo diferente ou indica que não há nenhum dispositivo conectado à tomada de microfone. Para obter mais informações sobre os GUIDs de categoria de pino, consulte Propriedade de categoria de pino.

Depois que um aplicativo descobre uma matriz de microfone conectada à tomada de entrada correta, a próxima etapa é determinar a geometria da matriz. Existem três geometrias básicas: linear, planar e tridimensional (3-D). As informações de geometria também fornecem detalhes, como a faixa de frequência e as coordenadas x-y-z de cada microfone.

O exemplo de código a seguir mostra uma estrutura KSAUDIO_MIC_ARRAY_GEOMETRY que um driver de áudio usa para descrever uma matriz de microfone USB externo:

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

No exemplo de código anterior, a variável ar_mic_Coordinates é uma matriz da estrutura KSAUDIO_MICROPHONE_COORDINATES e contém as coordenadas para os microfones na matriz de microfone.

O exemplo de código a seguir mostra como a matriz ar_mic_Coordinates é usada para descrever os locais geométricos dos microfones na matriz de microfone, conforme descrito no exemplo 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
 }
};

No exemplo de código anterior, as coordenadas x-y-z são dadas para cada microfone na matriz de microfones, juntamente com os ângulos verticais e horizontais que descrevem suas áreas de trabalho efetivas.

Para modificar o driver de exemplo Micarray MSVAD para fornecer informações de geometria de matriz para uma matriz de microfone virtual, você deve executar as seguintes tarefas.

Primeiro, navegue até Src\Audio\Msvad\Micarray e localize o arquivo Mintopo.cpp. Edite a seção do manipulador de propriedades no Mintopo.cpp para que a estrutura KSAUDIO_MIC_ARRAY_GEOMETRY contenha informações sobre a matriz de microfone. A seção específica do código que você deve modificar é mostrada no exemplo de código a seguir:

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

O exemplo de código anterior mostra informações que foram fornecidas para uma matriz de microfone linear que tem dois elementos de microfone, cada um dos quais é um tipo cardioide e localizado a 100 mm do centro da matriz.

Para obter informações sobre como desenvolver um aplicativo para descobrir matrizes de microfone, consulte o Apêndice C de Como criar e usar matrizes de microfone para Windows Vista.