Udostępnij przez


Właściwość geometrii tablicy mikrofonowej

W systemie Windows Vista i nowszych systemach obsługuje macierze mikrofonów. W większości sytuacji pojedynczy mikrofon osadzony w laptopie lub monitorze nie przechwytuje dźwięku bardzo dobrze. Tablica mikrofonów działa lepiej, aby odizolować źródło dźwięku i odrzucić hałas otoczenia i odgłos. Właściwość KSPROPERTY_AUDIO_MIC_ARRAY_GEOMETRY określa geometrię tablicy mikrofonów. Wartość właściwości, KSAUDIO_MIC_ARRAY_GEOMETRY, opisuje typ tablicy (liniowy, planar itd.), liczbę mikrofonów w tablicy i inne funkcje.

W tym temacie opisano, jak zewnętrzne macierze mikrofonów USB mogą korzystać z obsługi macierzy mikrofonów dostarczonej z systemem Windows Vista. Zewnętrzny układ mikrofonów USB musi dostarczać parametry wymagane do opisu układu geometrycznego i innych cech swojego zestawu w odpowiedzi na żądanie GET_MEM.

Matryca mikrofonów USB używa standardowego formatu do przekazywania informacji o geometrii. Sterownik klasy audio USB systemu Windows Vista musi używać tego samego formatu, gdy odczytuje informacje o geometrii. Aby uzyskać więcej informacji o standardowym formacie, zobacz Format deskryptora geometrii tablicy mikrofonów.

Aplikacja może wywołać metodę IPart::GetSubType , aby pobrać informacje o jacku, aby określić, czy urządzenie podłączone do gniazda jest tablicą mikrofonów. IPart::GetSubType zwraca identyfikator GUID kategorii pin, który reprezentuje typ gniazda wejściowego. Jeśli urządzenie podłączone do sieci jest tablicą mikrofonów, zwracany identyfikator GUID jest równy KSNODETYPE_MICROPHONE_ARRAY. Aplikacja może również pomóc w ustaleniu, czy zestaw mikrofonów został podłączony do niewłaściwego gniazda. W tym ostatnim scenariuszu zwrócony identyfikator GUID kategorii pin jest przeznaczony dla innego urządzenia lub wskazuje, że nie ma urządzenia podłączonego do gniazda mikrofonu. Aby uzyskać więcej informacji na temat identyfikatorów GUID kategorii pin, zobacz Właściwość kategorii pin.

Gdy aplikacja wykryje tablicę mikrofonów, która jest podłączona do właściwego portu wejściowego, następnym krokiem jest określenie geometrii tablicy. Istnieją trzy podstawowe geometrie: liniowa, planarna i trójwymiarowa (3-W). Informacje geometryczne zawierają również szczegółowe informacje, takie jak zakres częstotliwości i współrzędne x-y-z każdego mikrofonu.

Poniższy przykład kodu przedstawia strukturę KSAUDIO_MIC_ARRAY_GEOMETRY używaną przez sterownik audio do opisania zewnętrznej macierzy mikrofonów 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
};

W poprzednim przykładzie kodu zmienna ar_mic_Coordinates jest tablicą struktury KSAUDIO_MICROPHONE_COORDINATES i zawiera współrzędne mikrofonów w tablicy mikrofonów.

W poniższym przykładzie kodu pokazano, jak tablica ar_mic_Coordinates służy do opisywania geometrycznych lokalizacji mikrofonów w tablicy mikrofonów zgodnie z opisem w poprzednim przykładzie kodu:

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

W poprzednim przykładzie kodu współrzędne x-y-z są podane dla każdego mikrofonu w tablicy mikrofonów wraz z kątami pionowymi i poziomymi, które opisują efektywne obszary robocze.

Aby zmodyfikować przykładowy sterownik MSVAD Micarray w celu zapewnienia informacji o geometrii tablicy dla macierzy mikrofonów wirtualnych, należy wykonać następujące zadania.

Najpierw przejdź do folderu Src\Audio\Msvad\Micarray i znajdź plik Mintopo.cpp. Edytuj sekcję obsługi właściwości w Mintopo.cpp, aby struktura KSAUDIO_MIC_ARRAY_GEOMETRY zawierała informacje o tablicy mikrofonów. Konkretna sekcja kodu, którą należy zmodyfikować, jest pokazana w poniższym przykładzie kodu:

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

W poprzednim przykładzie kodu przedstawiono informacje, które zostały podane dla liniowej tablicy mikrofonów, która ma dwa elementy mikrofonu, z których każdy jest typem kardioidu i znajduje się 100 mm od środka tablicy.

Aby uzyskać informacje o sposobie tworzenia aplikacji w celu odnajdywania macierzy mikrofonów, zobacz Dodatek C instrukcji tworzenia i używania macierzy mikrofonów dla systemu Windows Vista.