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에 대한 자세한 내용은 Pin 범주 속성을 참조하세요.
애플리케이션이 올바른 입력 잭에 연결된 마이크 배열을 검색한 후 다음 단계는 배열의 기하 도형을 결정하는 것입니다. 선형, 평면 및 3차원(3차원)의 세 가지 기본 기하 도형이 있습니다. 기하 도형 정보는 각 마이크의 주파수 범위 및 x-y-z 좌표와 같은 세부 정보도 제공합니다.
다음 코드 예제에서는 오디오 드라이버가 외부 USB 마이크 배열을 설명하는 데 사용하는 KSAUDIO_MIC_ARRAY_GEOMETRY 구조를 보여줍니다.
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 파일을 찾습니다. KSAUDIO_MIC_ARRAY_GEOMETRY 구조에 마이크 배열에 대한 정보가 포함되도록 Mintopo.cpp 속성 처리기 섹션을 편집합니다. 수정해야 하는 코드의 특정 섹션은 다음 코드 예제에 나와 있습니다.
// 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;
앞의 코드 예제에서는 두 개의 마이크 요소가 있는 선형 마이크 배열에 대해 제공된 정보를 보여 하며, 각각은 카디오이드 형식이며 배열의 중심에서 100mm에 위치합니다.
마이크 배열을 검색하는 애플리케이션을 개발하는 방법에 대한 자세한 내용은 Windows Vista용 마이크 배열을 빌드하고 사용하는 방법의 부록 C를 참조하세요.