Поделиться через


Свойство geometry массива микрофона

В Windows Vista и более поздних версиях поддерживается массивы микрофонов. В большинстве случаев один микрофон, встроенный в ноутбук или монитор, не очень хорошо захватывает звук. Массив микрофонов лучше изолирует источник звука и отклоняет внешний шум и реверберацию. Свойство KSPROPERTY_AUDIO_MIC_ARRAY_GEOMETRY указывает геометрию массива микрофонов. Значение свойства , KSAUDIO_MIC_ARRAY_GEOMETRY, описывает тип массива (линейный, плоских и т. д.), количество микрофонов в массиве и другие признаки.

В этом разделе описывается, как внешние массивы микрофонов USB могут использовать поддержку микрофонных массивов, предоставляемых в Windows Vista. Внешний usb-массив микрофонов должен предоставлять параметры, необходимые для описания геометрии и других функций его массива в ответ на запрос GET_MEM .

Массив USB-микрофонов использует стандартный формат для предоставления геометрических сведений. Драйвер аудиофайла WINDOWS Vista USB должен использовать тот же формат при чтении геометрической информации. Дополнительные сведения о стандартном формате см. в разделе Формат геометрического дескриптора массива микрофона.

Приложение может вызвать IPart::GetSubType , чтобы получить сведения о разъеме, чтобы определить, является ли устройство, подключенное к разъему, массивом микрофонов. IPart::GetSubType возвращает GUID категории контактов, представляющий тип входного разъема. Если подключенное устройство является массивом микрофонов, возвращенный GUID равен KSNODETYPE_MICROPHONE_ARRAY. Приложение также может помочь определить, подключили ли вы микрофонный массив к неправильному разъему. В последнем сценарии возвращаемый GUID категории контактов относится либо к другому устройству, либо указывает на отсутствие устройства, подключенного к разъему микрофона. Дополнительные сведения о идентификаторах GUID категории контактов см. в разделе Закрепление свойства категории.

После того как приложение обнаружит массив микрофонов, подключенный к правильному входной разъему, следующим шагом является определение геометрии массива. Существует три основных геометрических элемента: линейная, плоский и трехмерная (трехмерная). Геометрическая информация также содержит такие сведения, как диапазон частот и координаты x-y-z каждого микрофона.

В следующем примере кода показана структура KSAUDIO_MIC_ARRAY_GEOMETRY, которую аудиодрайвер использует для описания внешнего массива микрофонов USB:

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

В предыдущем примере кода переменная ar_mic_Coordinates является массивом структуры KSAUDIO_MICROPHONE_COORDINATES и содержит координаты микрофонов в массиве микрофонов.

В следующем примере кода показано, как массив ar_mic_Coordinates используется для описания геометрических расположений микрофонов в массиве микрофонов, как описано в предыдущем примере кода:

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

В предыдущем примере кода координаты x-y-z задаются для каждого микрофона в массиве микрофонов, а также вертикальные и горизонтальные углы, описывающие их эффективные рабочие области.

Чтобы изменить пример драйвера Micarray MSVAD для предоставления геометрических сведений массива для массива виртуальных микрофонов, необходимо выполнить следующие задачи.

Сначала перейдите к Src\Audio\Msvad\Micarray и найдите файл Mintopo.cpp. Измените раздел обработчика свойств в Mintopo.cpp, чтобы структура KSAUDIO_MIC_ARRAY_GEOMETRY содержала сведения о массиве микрофонов. Конкретный раздел кода, который необходимо изменить, показан в следующем примере кода:

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

В приведенном выше примере кода показаны сведения, предоставленные для линейного массива микрофонов с двумя элементами микрофона, каждый из которых имеет кардиоидный тип и расположен в 100 мм от центра массива.

Сведения о разработке приложения для обнаружения массивов микрофонов см. в приложении C статьи Создание и использование массивов микрофонов для Windows Vista.