Verwenden eines Kommunikationsgeräts
In Windows 7 stellt die Windows-Multimedia-Systemsteuerung Mmsys.cpl eine neue Registerkarte Kommunikation bereit. Diese Registerkarte enthält Optionen, die es einem Benutzer ermöglichen, Optionen festzulegen, die definieren, wie das System ein Kommunikationsgerät verwaltet. Ein Kommunikationsgerät wird hauptsächlich zum Tätigen oder Empfangen von Telefonanrufen auf dem Computer verwendet. Bei einem Computer, der nur über ein Renderinggerät (Lautsprecher) und ein Aufnahmegerät (Mikrofon) verfügt, fungieren diese Audiogeräte auch als Standardkommunikationsgeräte. Wenn ein Benutzer ein neues Gerät, z. B. ein USB-Headset, verbindet, führt das System eine automatische Geräterollenerkennung durch, indem die Konfigurationseinstellungen nachschlagen, die vom OEM aufgefüllt werden. Wenn das System ein Gerät ermittelt, das für Kommunikationszwecke am besten geeignet ist, weist das System dem Gerät die Rolle eCommunications zu. Für diese Geräte bietet die Windows 7-Mmsys.cpl die Option Standardkommunikationsgerät , die es einem Benutzer ermöglicht, jeweils ein Kommunikationsgerät für Audiorendering (Registerkarte Wiedergabe ) und Audioaufnahme (Registerkarte Aufzeichnung ) auszuwählen. Das System führt eine automatische Rollenerkennung durch, legt jedoch kein bestimmtes Gerät fest, das für die Kommunikation verwendet werden soll. Dies muss vom Benutzer erfolgen. Mit der neuen Rolle eCommunications kann eine Anwendung zwischen einem Gerät unterscheiden, das vom Benutzer für die Bearbeitung von Telefonanrufen ausgewählt wird, und einem Gerät, das als Multimediagerät (Musikwiedergabe) verwendet werden soll. Wenn der Benutzer beispielsweise über ein Headset und einen Lautsprecher verfügt, der mit dem Computer verbunden ist, weist das System dem Sprecher die Rolle eConsole und die Rolle eCommunications dem Headset zu. Nachdem der Benutzer das Headset ausgewählt hat, das als Kommunikationsgerät verwendet werden soll, können Sie zum Entwickeln einer Kommunikationsanwendung das Headset speziell für das Rendern eines Audiostreams verwenden. Eine Anwendung, die der Benutzer die vom System zugewiesene Geräterolle nicht ändern kann. Weitere Informationen zu Geräterollen finden Sie unter Geräterollen.
Kommunikationsanwendungen, z. B. VoIP- und Unified Communication-Anwendungen, tätigen und empfangen Telefonanrufe über einen Computer. Beispielsweise kann eine VoIP-Anwendung dem Endpunkt eines Kommunikationsgeräts, das zum Rendern von Audiostreams festgelegt ist, einen Stream zuweisen, der die Ring-In-Benachrichtigung enthält. Darüber hinaus kann die Anwendung die Spracheingabe- und Ausgabestreams auf den Erfassungs- und Renderingendpunkten öffnen, die als Kommunikationsgeräte festgelegt sind.
Um Kommunikationsfunktionen in Ihre Anwendungen zu integrieren, können Sie Folgendes verwenden:
- MMDevice-API– zum Abrufen eines Verweises auf den Endpunkt des Kommunikationsgeräts.
- WASAPI: Zum Rendern und Aufzeichnen von Audiodatenströmen über das Kommunikationsgerät. Das Betriebssystem betrachtet den auf einem Kommunikationsgerät geöffneten Stream als Kommunikationsdatenstrom.
Die Kommunikationsanwendung listet Geräte auf und stellt die Streamverwaltung für einen Kommunikationsdatenstrom (Rendering oder Erfassung) auf die gleiche Weise bereit, wie sie einen Nicht-Kommunikationsdatenstrom mithilfe der Core Audio-APIs verwalten würde.
Eines der Features, die Sie in Ihre Kommunikationsanwendung integrieren können, ist die Enten- oder Streamdämpfung. Dieses Verhalten definiert, was mit anderen Sounds geschehen muss, wenn ein Kommunikationsstream geöffnet wird, z. B. wenn ein Telefonanruf auf dem Kommunikationsgerät empfangen wird. Das System kann die Audiolautstärke des Nicht-Kommunikationsdatenstroms je nach Wahl des Benutzers stummschalten oder verringern. Das Audiosystem generiert Ducking-Ereignisse, wenn ein Kommunikationsstream zum Rendern oder Erfassen von Streams geöffnet oder geschlossen wird. Standardmäßig bietet das Betriebssystem eine Standardmäßige Entenfunktion. Eine Medienanwendung kann das Standardverhalten ersetzen und diese Ereignisse selbst behandeln, um eine angepasste Entenumgebung zu bieten.
In den folgenden Abschnitten wird beschrieben, wie Sie Core Audio-APIs verwenden, um eine benutzerdefinierte Entenumgebung bereitzustellen.
- Standard-Ducking-Erfahrung
- Deaktivieren der standardbeendigen Benutzeroberfläche
- Bereitstellen eines benutzerdefinierten Duckingverhaltens
- Implementierungsüberlegungen für Duckingbenachrichtigungen
- Abrufen von Duckingereignissen
Abrufen eines Verweises auf den Endpunkt des Kommunikationsgeräts
Um das Kommunikationsgerät zu verwenden, muss ein direkter WASAPI-Client die Geräte mithilfe des Geräteumerators auflisten. Rufen Sie IMMDeviceEnumerator::GetDefaultAudioEndpoint einen Verweis auf den Endpunkt des Standardkommunikationsgeräts ab. In diesem Aufruf muss die Anwendung eCommunications im Role-Parameter angeben, um die Geräteaufzählung auf Kommunikationsgeräte zu beschränken. Nachdem Sie einen Verweis auf den Geräteendpunkt für das Gerät erhalten haben, können Sie die Dienste aktivieren, die für den Endpunkt gelten, indem Sie IMMDevice::Activate aufrufen. Beispielsweise können Sie den IID_IAudioClient Dienstbezeichner übergeben, um ein Audioclientobjekt zu aktivieren und für die Streamverwaltung zu verwenden, den IID_IAudioEndpointVolume Bezeichner, um Zugriff auf die Volumesteuerungen des Kommunikationsgeräteendpunkts zu erhalten, oder den IID_IAudioSessionManager Bezeichner, um den Sitzungs-Manager zu aktivieren, mit dem Sie mit der Richtlinien-Engine des Endpunkts interagieren können. Informationen zu Streamvorgängen finden Sie unter Streamverwaltung.
Mithilfe des IMMDevice-Verweises können Sie auch auf den Eigenschaftenspeicher für den Geräteendpunkt zugreifen. Diese Eigenschaftswerte, z. B. Geräteanzeigename und Herstellername, werden vom OEM aufgefüllt und ermöglichen es einer Anwendung, die Merkmale eines Kommunikationsgeräts zu bestimmen. Weitere Informationen finden Sie unter Geräteeigenschaften.
Der folgende Beispielcode ruft einen Verweis auf den Endpunkt des Standardkommunikationsgeräts zum Rendern eines Audiodatenstroms ab.
IMMDevice *defaultDevice = NULL;
hr = CoCreateInstance(__uuidof(MMDeviceEnumerator), NULL,
CLSCTX_INPROC_SERVER,
__uuidof(IMMDeviceEnumerator),
(LPVOID *)&deviceEnumerator);
hr = deviceEnumerator->GetDefaultAudioEndpoint(eRender,
eCommunications, &defaultDevice);
Zugehörige Themen