Freigeben über


Geräteformate

Für eine Audioanwendung ist ein Vorteil der Verwendung einer Audio-API auf höherer Ebene, z. B. DirectSound oder die Windows Multimedia waveOutXxx--Funktionen, 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 zum Verwenden von Formaten erforderlich sind, die mit den vom Gerät verwendeten Formaten identisch sind oder eng mit diesen zusammenhängen. Daher sind Anwendungen, die die wichtigsten Audio-APIs zum Wiedergeben oder Aufzeichnen von Audiodatenströmen 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 vom Audiomodul abhängig sein, um nur eingeschränkte Formatkonvertierungen auszuführen. Das Audiomodul kann zwischen einer standardmäßigen PCM-Beispielgröße konvertieren, die von der Anwendung verwendet wird, und den Gleitkommabeispielen, die das Modul für die interne Verarbeitung verwendet. Das Format für einen Anwendungsdatenstrom muss jedoch in der Regel dieselbe 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 Datenstromformat verwenden, das von der Audiohardware explizit unterstützt wird. Im exklusiven Modus tauschen die Anwendung und das Gerät Audiodaten direkt aus, ohne dass das Audiomodul eingreifen muss.

Viele Audiogeräte unterstützen sowohl PCM- als auch Nicht-PCM-Streamformate. Das Audiomodul kann jedoch nur PCM-Datenströme mischen. Daher können nur Exklusivmodusdatenströme über Nicht-PCM-Formate verfügen. 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 Windows Media Audio Professional (WMA Pro)-Audiostream, der über eine Digitale Schnittstelle (S/PDIF) von Sony/Philips (Digital Interface, S/PDIF) durchläuft, ohne decodiert zu werden. Weitere Informationen zur Verwendung von WMA Pro-Streams über S/PDIF finden Sie unter Angeben von WMA Pro Data Ranges.

WASAPI verwendet eine WAVEFORMATEX oder WAVEFORMATEXTENSIBLE Struktur, um ein Datenstromformat anzugeben. Eine WAVEFORMATEXTENSIBLE Struktur ist effektiv eine WAVEFORMATEX- Struktur, die erweitert wurde, um eine größere Palette 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 Mitglied der WAVEFORMATEXTENSIBLE Struktur ist eine WAVEFORMATEX Struktur. Der Inhalt einer WAVEFORMATEX Struktur gibt an, ob es sich um eine eigenständige WAVEFORMATEX- Struktur oder 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. Selbst kann eine WAVEFORMATEX- Struktur die Zuordnung von Kanälen zu Sprecherpositionen nicht angeben. Obwohl WAVEFORMATEX- die Größe des Containers für jedes Audiobeispiel angibt, kann die Anzahl der Genauigkeitsbits in einem Beispiel nicht angegeben werden (z. B. 20 Bit 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 WAVEFORMATEXTENSIBLEfinden Sie in der Windows DDK-Dokumentation.

Ab Windows 7 wurde die WAVEFORMATEXTENSIBLE erweitert, um Geräteformate für die Übertragung codierter Audiodaten über eine IEC 61937-kompatible Schnittstelle darzustellen. Informationen zur neuen Struktur finden Sie unter Representing Formats for IEC 61937 Transmissions.

Angeben des Geräteformats

Die folgenden WASAPI-Methoden verwenden die WAVEFORMATEX und WAVEFORMATEXTENSIBLE Strukturen zur Beschreibung von Datenstromformaten:

Die GetMixFormat- -Methode ruft das Datenstromformat ab, das das Audiomodul für die interne Verarbeitung von Datenströmen im gemeinsam genutzten 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 gemeinsam genutzten Modus oder im exklusiven Modus vorgesehen ist. Bei Formaten im gemeinsam genutzten Modus fragt die Methode das Audiomodul ab, um festzustellen, ob es das angegebene Format unterstützt. Bei Exklusivmodusformaten 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 durch eine eigenständige WAVEFORMATEX--Struktur angegeben wird, jedoch dasselbe Format zurückweist, wenn es durch eine WAVEFORMATEXTENSIBLE Struktur angegeben wird. Um zuverlässige Ergebnisse von diesen Treibern zu erhalten, sollten Exklusivmodusanwendungen 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 mit gemeinsam genutztem Modus oder einen Exklusivmodusdatenstrom zu finden, kann die Anwendung die Initialize Methode aufrufen, um einen Datenstrom mit diesem Format zu initialisieren. Eine Anwendung, die versucht, einen Datenstrom im gemeinsam genutzten Modus mit einem Format zu initialisieren, das nicht mit dem Mixformat identisch ist, das aus der GetMixFormat--Methode abgerufen wird, aber dieselbe Anzahl von Kanälen und dieselbe Samplerate wie das Mixformat aufweist, ist wahrscheinlich erfolgreich. Vor dem Aufrufen Initializekann die Anwendung IsFormatSupported- aufrufen, um zu überprüfen, ob Initialize- das Format akzeptiert.

Das Mixformat, das das Audiomodul für die interne Verarbeitung von Datenströmen im gemeinsam genutzten Modus verwendet, hängt eng mit dem Datenstromformat zusammen, das vom Audioendpunktgerät im gemeinsam genutzten Modus verwendet wird. Über die Windows-Multimedia-Systemsteuerung Mmsys.cplkann der Benutzer das Streamformat auswählen, das ein Audioendpunktgerät verwendet, wenn es im gemeinsam genutzten Modus ausgeführt wird. Die Schritte sind wie folgt:

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

    Steuerelement-mmsys.cpl

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

  2. Nachdem das fenster Mmsys.cpl geöffnet wurde, 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 Erweiterte, und wählen Sie ein Format aus der Liste der verfügbaren Formate im Feld mit der Bezeichnung Standardformataus.

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 anschließend verwendet, wenn es im gemeinsam genutzten Modus ausgeführt wird. In Windows Vista verwendet das Audiomodul eine leicht geänderte Version dieses Formats für die interne Verarbeitung von Datenströmen im freigegebenen Modus. Das Audiomodul verwendet ein Format mit der gleichen Anzahl von Kanälen (zwei) und der gleichen Samplerate (44100 Hz), aber es werden Beispiele vor der Verarbeitung in Gleitkommazahlen konvertiert. Das Audiomodul konvertiert die Gleitkommabeispiele im Ausgabemix 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 Format des gemeinsam genutzten Modus abzurufen, das der Benutzer für das Gerät ausgewählt hat. Informationen zum Abfragen der Eigenschaften eines Geräts finden Sie unter Geräteeigenschaften.

Einige Anwendungen finden möglicherweise das von der PKEY_AudioEngine_DeviceFormat-Eigenschaft eines Geräts angegebene Format als geeignetes Format zum Öffnen eines Exklusivmodusdatenstroms auf dem Gerät. Andere Anwendungen, die Exklusivmodusstreams verwalten, können zusätzliche Anforderungen haben, die eine komplexe Formatverhandlung mit dem Gerät erfordern. In der Regel erstellt eine dieser Anwendungen eine Liste geeigneter Formate mit den bevorzugten Formaten am Anfang der Liste. Die Anwendung ruft dann iterativ IsFormatSupported mit jedem aufeinander folgenden Format in der Liste auf, beginnend am Anfang der Liste, bis es ein vom Gerät unterstütztes Format findet.

Audioendpunktgeräte