Not
Åtkomst till denna sida kräver auktorisation. Du kan prova att logga in eller byta katalog.
Åtkomst till denna sida kräver auktorisation. Du kan prova att byta katalog.
I Windows Vista och senare ges stöd för mikrofonmatriser. I de flesta situationer fångar en enda mikrofon inbäddad i en bärbar dator eller bildskärm inte ljud särskilt bra. En matris med mikrofoner fungerar bättre för att isolera en ljudkälla och avvisa omgivande brus och reverberation. Egenskapen KSPROPERTY_AUDIO_MIC_ARRAY_GEOMETRY anger geometrin för en mikrofonmatris. Egenskapsvärdet , KSAUDIO_MIC_ARRAY_GEOMETRY, beskriver matristypen (linjär, planar och så vidare), antalet mikrofoner i matrisen och andra funktioner.
Det här avsnittet beskriver hur externa USB-mikrofonmatriser kan använda det stöd för mikrofonmatriser som tillhandahålls av Windows Vista. En extern USB-mikrofonmatris måste ange de parametrar som krävs för att beskriva geometrin och andra funktioner i matrisen som svar på en GET_MEM begäran.
USB-mikrofonmatrisen använder ett standardformat för att tillhandahålla geometriinformation. Windows Vista USB-ljudklassdrivrutinen måste använda samma format när den läser geometriinformationen. Mer information om standardformatet finns i Format för geometri för mikrofonmatris.
Ett program kan anropa IPart::GetSubType för att hämta information om ett uttag för att avgöra om enheten som är ansluten till uttaget är en mikrofonmatris. IPart::GetSubType returnerar en GUID för pinkategori som representerar typen av indatauttag. Om enheten som är ansluten är en mikrofonmatris är det returnerade GUID lika med KSNODETYPE_MICROPHONE_ARRAY. Programmet kan också hjälpa dig att avgöra om du har anslutit mikrofonmatrisen till fel uttag. I det senare scenariot är det returnerade PIN-kategori-GUID:t antingen för en annan enhet eller så indikerar det att ingen enhet är ansluten till mikrofonuttaget. Mer information om PIN-kategoriernas GUID finns i Pin Category Property (Fäst kategoriegenskap).
När ett program har upptäckt en mikrofonmatris som är ansluten till rätt indatauttag är nästa steg att fastställa matrisens geometri. Det finns tre grundläggande geometrier: linjär, planar och tredimensionell (3D). Geometriinformationen innehåller också information som frekvensintervall och x-y-z-koordinater för varje mikrofon.
I följande kodexempel visas en KSAUDIO_MIC_ARRAY_GEOMETRY struktur som en ljuddrivrutin använder för att beskriva en extern USB-mikrofonmatris:
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
};
I föregående kodexempel är variabeln ar_mic_Coordinates en matris med KSAUDIO_MICROPHONE_COORDINATES struktur och innehåller koordinaterna för mikrofonerna i mikrofonmatrisen.
Följande kodexempel visar hur den ar_mic_Coordinates matrisen används för att beskriva de geometriska platserna för mikrofonerna i mikrofonmatrisen enligt beskrivningen i föregående kodexempel:
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
}
};
I föregående kodexempel ges x-y-z-koordinaterna för varje mikrofon i mikrofonmatrisen, tillsammans med de lodräta och vågräta vinklar som beskriver deras effektiva arbetsytor.
Om du vill ändra Micarray MSVAD-exempeldrivrutinen för att tillhandahålla matrisgeometriinformation för en virtuell mikrofonmatris måste du utföra följande uppgifter.
Gå först till Src\Audio\Msvad\Micarray och leta upp filen Mintopo.cpp. Redigera avsnittet för egenskapshantering i Mintopo.cpp så att strukturen KSAUDIO_MIC_ARRAY_GEOMETRY innehåller information om mikrofonmatrisen. Det specifika kodavsnittet som du måste ändra visas i följande kodexempel:
// 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;
Föregående kodexempel visar information som har angetts för en linjär mikrofonmatris som har två mikrofonelement, som var och en är en kardioidtyp och som ligger 100 mm från mitten av matrisen.
Information om hur du utvecklar ett program för att identifiera mikrofonmatriser finns i bilaga C till Skapa och använda mikrofonmatriser för Windows Vista.