Auflisten von Audiogeräten
Die erste Aufgabe einer Clientaudioanwendung besteht darin, ein geeignetes Audiogerät für die Verwendung zu finden. Mit der MMDevice-API können Clients die Audioendpunktgeräte im System ermitteln und bestimmen, welche Geräte für die Anwendung geeignet sind. Mit dieser API können Clients Sammlungen der verfügbaren Endpunktgeräte abrufen und die Funktionen der einzelnen Geräte abrufen. Die Headerdatei Mmdeviceapi.h definiert die Schnittstellen in der MMDevice-API.
Ein Audioadapter kann mehrere Geräte enthalten, z. B. ein Wave-Rendering-Gerät und ein Wave-Capture-Gerät. Dies sind Adaptergeräte und nicht Endpunktgeräte. Wie bereits erwähnt, werden Adaptergeräte vom Plug & Play-Manager registriert, im Gegensatz zu Endpunktgeräten, die vom Endpunkt-Manager registriert werden. Jedes Adaptergerät unterstützt in der Regel ein oder mehrere Endpunktgeräte. Ein Renderingendpunktgerät (z. B. Kopfhörer) kann einen Audiodatenstrom von einer Clientanwendung empfangen, und ein Aufnahmeendpunktgerät (z. B. ein Mikrofon) kann einen Audiodatenstrom an eine Clientanwendung senden.
Vor dem Aufzählen der Endpunktgeräte im System muss der Client zunächst die Windows CoCreateInstance-Funktion aufrufen, um einen Geräteenumerator zu erstellen. Ein Geräteenumerator ist ein Objekt mit einer IMMDeviceEnumerator-Schnittstelle . Informationen zu CoCreateInstance finden Sie in der Windows SDK-Dokumentation.
Der Client ruft die IMMDeviceEnumerator::EnumAudioEndpoints-Methode auf, um eine Auflistung von Endpunktobjekten zu erstellen. Jedes Endpunktobjekt stellt ein Audioendpunktgerät im System dar. In diesem Aufruf gibt der Client an, ob die Sammlung alle Renderinggeräte im System, alle Aufnahmegeräte oder beides enthalten soll.
Eine Gerätesammlung ist ein Objekt mit einer IMMDeviceCollection-Schnittstelle . Jedes Element in einer Gerätesammlung ist ein Endpunktobjekt mit mindestens den folgenden zwei Schnittstellen:
- Eine IMMDevice-Schnittstelle . Ein Client ruft einen Verweis auf die IMMDevice-Schnittstelle eines Endpunktobjekts in einer Gerätesammlung durch Aufrufen der IMMDeviceCollection::Item-Methode ab.
- Eine IMMEndpoint-Schnittstelle . Ein Client ruft einen Verweis auf die IMMEndpoint-Schnittstelle eines Endpunktobjekts durch Aufrufen der IMMDevice::QueryInterface-Methode ab.
Nach dem Abrufen einer Sammlung von Endpunktgeräten kann der Client die Eigenschaften der einzelnen Geräte in der Sammlung abfragen, um deren Eignung für die Verwendung zu bestimmen. Ein Codebeispiel, das zeigt, wie Sie Endpunktgeräte auflisten und deren Eigenschaften abfragen, finden Sie unter Geräteeigenschaften.
Nach auswahl eines geeigneten Geräts kann der Client die IMMDevice::Activate-Methode aufrufen, um die gerätespezifischen Schnittstellen in WASAPI, der DeviceTopology-API und der EndpointVolume-API zu aktivieren.
Zugehörige Themen