Geräteformate

Für eine Audioanwendung besteht ein Vorteil der Verwendung einer höherstufigen Audio-API, z. B. DirectSound oder der Windows-Multimedia-Funktionen waveOutXxx , darin, dass die API automatisch zwischen den von der Anwendung verwendeten Streamformaten und den vom Audiogerät verwendeten Formaten konvertiert. Im Gegensatz dazu sind die kernigen Audio-APIs restriktiver, da Anwendungsdatenströme Formate verwenden müssen, die mit den vom Gerät verwendeten Formaten identisch sind oder eng mit diesen zusammenhängen. Daher sind Anwendungen, die die kernigen Audio-APIs zum Wiedergeben oder Aufzeichnen von Audiostreams verwenden, möglicherweise erforderlich, um einige oder alle Konvertierungen zwischen Streamformaten durchzuführen.

Eine Anwendung, die WASAPI zum Verwalten von Datenströmen im freigegebenen Modus verwendet, kann sich darauf verlassen, dass die Audio-Engine nur eingeschränkte Formatkonvertierungen durchführt. Die Audio-Engine kann zwischen einer PCM-Standard-Beispielgröße, die von der Anwendung verwendet wird, und den Gleitkommabeispielen konvertieren, die die Engine für die interne Verarbeitung verwendet. Das Format für einen Anwendungsstream muss jedoch in der Regel die gleiche Anzahl von Kanälen und dieselbe Abtastrate wie das vom Gerät verwendete Streamformat aufweisen.

Wenn eine Anwendung ein Gerät im exklusiven Modus verwendet, muss die Anwendung ein Streamformat verwenden, das von der Audiohardware explizit unterstützt wird. Im exklusiven Modus tauschen Die Anwendung und das Gerät Audiodaten direkt ohne Eingriff durch die Audio-Engine aus.

Viele Audiogeräte unterstützen sowohl PCM- als auch Nicht-PCM-Streamformate. Die Audio-Engine kann jedoch nur PCM-Streams mischen. Daher können nur Datenströme im exklusiven Modus Nicht-PCM-Formate aufweisen. Darüber hinaus werden nur Nicht-PCM-Formate mit festen Datenraten im exklusiven Modus unterstützt. Ein Beispiel für ein Nicht-PCM-Format mit fester Rate ist ein 48-kHz-Audiostream von Windows Media Audio Professional (WMA Pro), der eine S/PDIF-Verbindung (Digital Interface) von Sony/Philips in digitaler Form durchläuft, ohne decodiert zu werden. Weitere Informationen zur Verwendung von WMA Pro-Streams über S/PDIF finden Sie unter Angeben von WMA Pro-Datenbereichen.

WASAPI verwendet eine WAVEFORMATEX - oder WAVEFORMATEXTENSIBLE-Struktur , um ein Streamformat anzugeben. Eine WAVEFORMATEXTENSIBLE-Struktur ist effektiv eine WAVEFORMATEX-Struktur , die erweitert wurde, um eine größere Bandbreite von Formaten zu beschreiben. Jedes Format, das durch eine eigenständige WAVEFORMATEX-Struktur beschrieben werden kann, kann auch durch eine WAVEFORMATEXTENSIBLE-Struktur beschrieben werden.

Das erste Element der WAVEFORMATEXTENSIBLE-Struktur ist eine WAVEFORMATEX-Struktur . Der Inhalt einer WAVEFORMATEX-Struktur gibt an, ob es sich um eine eigenständige WAVEFORMATEX-Struktur oder um einen Teil einer WAVEFORMATEXTENSIBLE-Struktur handelt.

Eine eigenständige WAVEFORMATEX-Struktur kann ein Format mit einem oder zwei Kanälen und einer Beispielgröße, die ein Vielfaches von 8 Bit ist, angemessen beschreiben. An sich kann eine WAVEFORMATEX-Struktur die Zuordnung von Kanälen zu Sprecherpositionen nicht angeben. Darüber hinaus gibt WAVEFORMATEX zwar die Größe des Containers für jedes Audiobeispiel an, kann aber nicht die Anzahl der Bits an Genauigkeit in einem Beispiel angeben (z. B. 20 Bits genauigkeit in einem 24-Bit-Container). Im Gegensatz dazu kann die WAVEFORMATEXTENSIBLE-Struktur sowohl die Zuordnung von Kanälen zu Lautsprechern als auch die Anzahl der Genauigkeitsbits in jedem Beispiel angeben.

Weitere Informationen zu WAVEFORMATEX und WAVEFORMATEXTENSIBLE finden Sie in der Windows DDK-Dokumentation.

Ab Windows 7 wurde der WAVEFORMATEXTENSIBLE erweitert, um Geräteformate für die Übertragung von codiertem Audio über eine IEC 61937-kompatible Schnittstelle darzustellen. Informationen zur neuen Struktur finden Sie unter Darstellen von Formaten für IEC 61937-Übertragungen.

Angeben des Geräteformats

Die folgenden WASAPI-Methoden verwenden die STRUKTUREN WAVEFORMATEX und WAVEFORMATEXTENSIBLE , um Streamformate zu beschreiben:

Die GetMixFormat-Methode ruft das Streamformat ab, das die Audio-Engine für die interne Verarbeitung von Datenströmen im freigegebenen Modus verwendet. Die -Methode verwendet immer eine WAVEFORMATEXTENSIBLE-Struktur anstelle einer eigenständigen WAVEFORMATEX-Struktur , um das Format anzugeben.

Die IsFormatSupported-Methode gibt an, ob ein Audioendpunktgerät ein bestimmtes Streamformat unterstützt. Der Aufrufer muss angeben, ob das Streamformat für die Verwendung im freigegebenen Modus oder im exklusiven Modus vorgesehen ist. Bei Formaten im freigegebenen Modus fragt die -Methode die Audio-Engine ab, um zu ermitteln, ob sie das angegebene Format unterstützt. Bei Formaten im exklusiven Modus fragt die Methode den Gerätetreiber ab. Einige Gerätetreiber melden, dass sie ein 1-Kanal- oder 2-Kanal-PCM-Format unterstützen, wenn das Format von einer eigenständigen WAVEFORMATEX-Struktur angegeben wird, aber dasselbe Format ablehnen, wenn es von einer WAVEFORMATEXTENSIBLE-Struktur angegeben wird. Um zuverlässige Ergebnisse aus diesen Treibern zu erhalten, sollten Anwendungen im exklusiven Modus IsFormatSupported zweimal für jedes 1-Kanal- oder 2-Kanal-PCM-Format aufrufen. Ein Aufruf sollte eine eigenständige WAVEFORMATEX-Struktur verwenden, um das Format anzugeben, und der andere Aufruf sollte eine WAVEFORMATEXTENSIBLE-Struktur verwenden, um dasselbe Format anzugeben.

Nachdem eine Anwendung GetMixFormat oder IsFormatSupported verwendet hat, um ein geeignetes Format für einen Datenstrom im freigegebenen oder exklusiven Modus zu finden, kann die Anwendung die Initialize-Methode aufrufen, um einen Stream mit diesem Format zu initialisieren. Eine Anwendung, die versucht, einen Stream im freigegebenen Modus mit einem Format zu initialisieren, das nicht mit dem von der GetMixFormat-Methode abgerufenen Mixformat identisch ist, aber die gleiche Anzahl von Kanälen und die gleiche Abtastrate wie das Mixformat aufweist, ist wahrscheinlich erfolgreich. Vor dem Aufrufen von Initialize kann die Anwendung IsFormatSupported aufrufen, um zu überprüfen, ob Initialize das Format akzeptiert.

Das Mixformat, das die Audio-Engine für die interne Verarbeitung von Streams im freigegebenen Modus verwendet, hängt eng mit dem Streamformat zusammen, das das Audioendpunktgerät im freigegebenen Modus verwendet. Über die Windows-Multimedia-Systemsteuerung Mmsys.cpl kann der Benutzer das Streamformat auswählen, das ein Audioendpunktgerät verwendet, wenn es im freigegebenen Modus arbeitet. Die Schritte lauten wie folgt:

  1. Um Mmsys.cpl auszuführen, öffnen Sie ein Eingabeaufforderungsfenster, und geben Sie den folgenden Befehl ein:

    mmsys.cplsteuern

    Alternativ können Sie Mmsys.cpl ausführen, indem Sie mit der rechten Maustaste auf das Lautsprechersymbol im Benachrichtigungsbereich klicken, der sich auf der rechten Seite der Taskleiste befindet, und entweder Wiedergabegeräte oder Aufzeichnungsgeräte auswählen.

  2. Nachdem das fenster Mmsys.cpl geöffnet wird, wählen Sie ein Gerät aus der Liste der Wiedergabegeräte oder der Liste der Aufzeichnungsgeräte aus, und klicken Sie auf Eigenschaften.

  3. Wenn das Eigenschaftenfenster geöffnet wird, klicken Sie auf Erweitert, und wählen Sie in der Liste der verfügbaren Formate im Feld Standardformat ein Format aus.

Angenommen, der Benutzer wählt das folgende Standardformat aus der Liste der verfügbaren Formate für ein Wiedergabegerät aus:

2 Kanal, 16 Bit, 44100 Hz (CD-Qualität)

Dies ist das Format, das das Gerät später verwendet, wenn es im freigegebenen Modus arbeitet. In Windows Vista verwendet die Audio-Engine eine leicht geänderte Version dieses Formats für die interne Verarbeitung von Streams im freigegebenen Modus. Die Audio-Engine verwendet ein Format mit der gleichen Anzahl von Kanälen (zwei) und der gleichen Abtastrate (44100 Hz), konvertiert jedoch Samples in Gleitkommazahlen, bevor sie verarbeitet werden. Die Audio-Engine konvertiert die Gleitkommabeispiele in der Ausgabemischung in 16-Bit-Ganzzahlen, bevor sie über das Gerät wiedergegeben werden.

Eine Anwendung kann die PKEY_AudioEngine_DeviceFormat Eigenschaft eines Audioendpunktgeräts abfragen, um das Vom Benutzer für das Gerät ausgewählte Format im freigegebenen Modus abzurufen. Informationen zum Abfragen der Eigenschaften eines Geräts finden Sie unter Geräteeigenschaften.

Einige Anwendungen finden das format, das durch die PKEY_AudioEngine_DeviceFormat-Eigenschaft eines Geräts angegeben wird, als geeignetes Format zum Öffnen eines Datenstroms im exklusiven Modus auf dem Gerät. Andere Anwendungen, die Datenströme im exklusiven Modus verwalten, können zusätzliche Anforderungen aufweisen, die eine komplexe Formatverhandlung mit dem Gerät erfordern. In der Regel erstellt eine dieser Anwendungen eine Liste geeigneter Formate, wobei die bevorzugten Formate am Anfang der Liste stehen. Die Anwendung ruft dann iterativ IsFormatSupported mit jedem aufeinanderfolgenden Format in der Liste auf, beginnend am Anfang der Liste, bis sie ein vom Gerät unterstütztes Format findet.

Audioendpunktgeräte