마이크 배열 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에 대한 자세한 내용은 Pin Category Property를 참조하세요.
애플리케이션이 올바른 입력 잭에 연결된 마이크 배열을 검색한 후 다음 단계는 배열의 기하 도형을 확인하는 것입니다. 선형, 평면 및 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를 참조하세요.