Freigeben über


Geräte und Datentypen

[Das feature, das dieser Seite zugeordnet ist, Waveform Audioist ein Legacyfeature. Es wurde durch WASAPI- und Audiodiagrammeersetzt. WASAPI und Audio Graphs wurden für Windows 10 und Windows 11 optimiert. Microsoft empfiehlt dringend, dass neuer Code WASAPI- und Audiodiagramme anstelle von Waveform Audio-verwendet. Microsoft schlägt vor, dass vorhandener Code, der die Legacy-APIs verwendet, um die neuen APIs zu verwenden, falls möglich umgeschrieben werden.]

Dieser Abschnitt beschreibt das Arbeiten mit Waveform-Audiogeräten und enthält Informationen zum Öffnen, Schließen und Abfragen dieser Geräte für ihre Funktionen. Außerdem wird beschrieben, wie Die Geräte in einem System mithilfe von Gerätehandles und Gerätebezeichnern nachverfolgt werden.

Öffnen Waveform-Audio Ausgabegeräte

Verwenden Sie die waveOutOpen--Funktion, um ein Waveform-Audioausgabegerät für die Wiedergabe zu öffnen. Diese Funktion öffnet das Gerät, das dem angegebenen Gerätebezeichner zugeordnet ist, und gibt ein Handle des geöffneten Geräts zurück, indem das Handle eines angegebenen Speicherspeicherorts geschrieben wird.

Einige Multimediacomputer verfügen über mehrere Waveform-Audioausgabegeräte. Wenn Sie kein bestimmtes Waveform-Audioausgabegerät in einem System öffnen möchten, sollten Sie beim Öffnen eines Geräts das WAVE_MAPPER Flag für den Gerätebezeichner verwenden. Die waveOutOpen--Funktion wählt das Gerät im System aus, das am besten das angegebene Datenformat wiedergeben kann.

Abfragen von Audiogeräten

Windows stellt die folgenden Funktionen bereit, um zu bestimmen, wie viele Geräte eines bestimmten Typs in einem System verfügbar sind.

Funktion Beschreibung
auxGetNumDevs- Ruft die Anzahl der Hilfsausgabegeräte ab, die im System vorhanden sind.
waveInGetNumDevs Ruft die Anzahl der im System vorhandenen Waveform-Audioeingabegeräte ab.
waveOutGetNumDevs Ruft die Anzahl der Waveform-Audioausgabegeräte ab, die im System vorhanden sind.

 

Audiogeräte werden durch einen Gerätebezeichner identifiziert. Der Gerätebezeichner wird implizit aus der Anzahl der Geräte bestimmt, die in einem System vorhanden sind. Gerätebezeichner reichen von Null bis 1 kleiner als die Anzahl der vorhandenen Geräte. Wenn z. B. zwei Waveform-Audioausgabegeräte in einem System vorhanden sind, sind gültige Gerätebezeichner 0 und 1.

Nachdem Sie ermittelt haben, wie viele Geräte eines bestimmten Typs in einem System vorhanden sind, können Sie eine der folgenden Funktionen verwenden, um die Funktionen der einzelnen Geräte abzufragen.

Funktion Beschreibung
auxGetDevCaps Ruft die Funktionen eines angegebenen Hilfsausgabegeräts ab.
waveInGetDevCaps Ruft die Funktionen eines angegebenen Waveform-Audioeingabegeräts ab.
waveOutGetDevCaps Ruft die Funktionen eines angegebenen Waveform-Audioausgabegeräts ab.

 

Jede dieser Funktionen füllt eine Struktur mit Informationen über die Funktionen eines angegebenen Geräts. In der folgenden Tabelle sind die Strukturen aufgeführt, die den einzelnen Funktionen entsprechen.

Funktion Struktur
auxGetDevCaps AUXCAPS-
waveInGetDevCaps WAVEINCAPS-
waveOutGetDevCaps WAVEOUTCAPS-

 

Standardformate sind im dwFormats Member der WAVEOUTCAPS- Struktur aufgeführt. Waveform-Audiogeräte können nicht standardmäßige Formate unterstützen. Um zu bestimmen, ob ein bestimmtes Format (Standard oder nicht standardmäßig) von einem Gerät unterstützt wird, können Sie die waveOutOpen--Funktion mit der WAVE_FORMAT_QUERY-Kennzeichnung aufrufen. Dieses Flag öffnet das Gerät nicht. Sie geben das betreffende Format in der WAVEFORMATEX- Struktur an, auf die der pwfx Parameter verweist, der an waveOutOpenübergeben wird.

Waveform-Audioausgabegeräte variieren in den unterstützten Funktionen. Der dwSupport Member der WAVEOUTCAPS- Struktur gibt an, ob ein Gerät funktionen wie Lautstärke- und Neigungsänderungen unterstützt.

Gerätehandles und Gerätebezeichner

Jede Funktion, die ein Audiogerät öffnet, gibt einen Gerätebezeichner, einen Zeiger auf einen Speicherspeicherort und einige Parameter an, die für jeden Gerätetyp eindeutig sind. Der Speicherspeicherort wird mit einem Gerätehandle gefüllt. Verwenden Sie dieses Gerätehandle, um das geöffnete Audiogerät beim Aufrufen anderer Audiofunktionen zu identifizieren.

Der Unterschied zwischen Bezeichnern und Handles für Audiogeräte ist subtil, aber wichtig:

  • Gerätebezeichner werden implizit aus der Anzahl der Geräte bestimmt, die in einem System vorhanden sind. Diese Zahl wird mithilfe der auxGetNumDevs, waveInGetNumDevsoder waveOutGetNumDevs Funktion abgerufen.
  • Geräteziehpunkte werden zurückgegeben, wenn Gerätetreiber mithilfe der waveInOpen oder waveOutOpen-Funktion geöffnet werden.

Es gibt keine Funktionen, die Zusätzliche Audiogeräte öffnen oder schließen. Hilfsaudiogeräte müssen nicht wie Waveform-Audiogeräte geöffnet und geschlossen werden, da ihnen keine kontinuierliche Datenübertragung zugeordnet ist. Alle Zusätzlichen Audiofunktionen verwenden Gerätebezeichner, um Geräte zu identifizieren.

Waveform-Audio Ausgabedatentypen

Die folgenden Datentypen sind für Waveform-Audioausgabefunktionen definiert.

Art Beschreibung
HWAVEOUT- Behandeln eines offenen Waveform-Audioausgabegeräts.
WAVEFORMATEX- Struktur, die die von einem bestimmten Waveform-Audioeingabegerät unterstützten Datenformate angibt. Diese Struktur wird auch für Waveform-Audio-Eingabegeräte verwendet.
WAVEHDR- Struktur, die als Header für einen Block von Waveform-Audioeingabedaten verwendet wird. Diese Struktur wird auch für Waveform-Audioeingabegeräte verwendet.
WAVEOUTCAPS- Struktur, die zum Abfragen der Funktionen eines bestimmten Waveform-Audioausgabegeräts verwendet wird.

 

Angeben Waveform-Audio Datenformate

Wenn Sie die waveOutOpen--Funktion aufrufen, um einen Gerätetreiber für die Wiedergabe zu öffnen oder um abzufragen, ob der Treiber ein bestimmtes Datenformat unterstützt, verwenden Sie den parameter pwfx, um einen Zeiger auf eine WAVEFORMATEX- Struktur anzugeben, die das angeforderte Waveform-Audiodatenformat enthält. WAVEFORMATEX ersetzt die WAVEFORMAT und PCMWAVEFORMAT Strukturen.

Für Audiodaten, die in mehr als zwei Kanäle getrennt sind oder eine Stichprobengröße aufweisen, die kein Vielfaches von 8 ist, sollten Sie WAVEFORMATEXTENSIBLEverwenden. Diese Struktur konfiguriert einfach die zusätzlichen Bytes, auf die durch das cbSize Member von WAVEFORMATEX verwiesen wird, um zusätzliche Informationen zum Format zu geben. WAVEFORMATEXTENSIBLE kann als WAVEFORMATEXgegossen werden.

Es gibt auch zwei Zwischenablageformate, mit denen Sie Audiodaten darstellen können: CF_WAVE und CF_RIFF. Verwenden Sie das CF_WAVE Format, um Daten in einem der Standardformate darzustellen, z. B. 11 kHz oder 22 kHz PCM. Verwenden Sie das CF_RIFF Format, um komplexere Datenformate darzustellen, die nicht als Standard-Waveform-Audiodateien dargestellt werden können.

Schreiben von Waveform-Audio Daten

Nach dem erfolgreichen Öffnen eines Waveform-Audioausgabegerätetreibers können Sie mit der Wiedergabe eines Sounds beginnen. Windows stellt die waveOutWrite--Funktion zum Senden von Datenblöcken an Waveform-Audioausgabegeräte bereit.

Verwenden Sie die WAVEHDR- Struktur, um den Waveform-Audio-Datenblock anzugeben, den Sie mit waveOutWrite-senden. Diese Struktur enthält einen Zeiger auf einen gesperrten Datenblock, die Länge des Datenblocks und einige Flags. Dieser Datenblock muss vorbereitet werden, bevor Sie ihn verwenden; Informationen zum Vorbereiten eines Datenblocks finden Sie unter Audiodatenblöcke.

Nachdem Sie einen Datenblock mithilfe waveOutWrite-an ein Ausgabegerät gesendet haben, müssen Sie warten, bis der Gerätetreiber mit dem Datenblock fertig ist, bevor sie freigegeben wird. Wenn Sie mehrere Datenblöcke senden, müssen Sie den Abschluss von Datenblöcken überwachen, um zu wissen, wann zusätzliche Blöcke gesendet werden sollen. Weitere Informationen zu Datenblöcken finden Sie unter Audiodatenblöcke.

PCM-Waveform-Audio-Datenformat

Das lpData Member der WAVEHDR Struktur zeigt auf die Waveform-Audio-Datenbeispiele. Bei 8-Bit-PCM-Daten wird jedes Beispiel durch ein einzelnes nicht signiertes Datenbyte dargestellt. Bei 16-Bit-PCM-Daten wird jedes Beispiel durch einen 16-Bit-signierten Wert dargestellt. In der folgenden Tabelle sind die maximalen, minimalen und mittleren Werte für PCM-Waveform-Audiodaten zusammengefasst.

Datenformat Maximalwert Minimalwert Mittelpunktswert
8-Bit-PCM 255 (0xFF) 0 128 (0x80)
16-Bit-PCM 32.767 (0x7FFF) –32.768 (0x8000) 0

 

PCM-Datenverpackung

Die Reihenfolge der Datenbytes variiert zwischen 8-Bit- und 16-Bit-Formaten und zwischen Mono- und Stereoformaten. In der folgenden Liste werden die Datenverpackungen für die verschiedenen PCM-Waveform-Audiodatenformate beschrieben.

PCM Waveform-Audioformat Beschreibung
8-Bit-Mono Jedes Beispiel ist 1 Byte, das einem einzelnen Audiokanal entspricht. Beispiel 1 folgt den Beispielen 2, 3, 4 usw.
8-Bit-Stereo Jedes Beispiel beträgt 2 Byte. Beispiel 1 folgt den Beispielen 2, 3, 4 usw. Für jedes Beispiel ist das erste Byte Kanal 0 (der linke Kanal), und das zweite Byte ist Kanal 1 (der rechte Kanal).
16-Bit-Mono Jedes Beispiel beträgt 2 Byte. Beispiel 1 folgt den Beispielen 2, 3, 4 usw. Für jedes Beispiel ist das erste Byte das Byte mit niedriger Reihenfolge von Kanal 0, und das zweite Byte ist das Byte mit hoher Reihenfolge von Kanal 0.
16-Bit-Stereo Jedes Beispiel beträgt 4 Byte. Beispiel 1 folgt den Beispielen 2, 3, 4 usw. Für jedes Beispiel ist das erste Byte das Byte mit niedriger Reihenfolge von Kanal 0 (linker Kanal); das zweite Byte ist das Byte mit hoher Reihenfolge von Kanal 0; das dritte Byte ist das Byte mit niedriger Reihenfolge von Kanal 1 (rechter Kanal); und das vierte Byte ist das Byte mit hoher Reihenfolge von Kanal 1.
Andere Jedes Beispiel ist in einem Block enthalten, bei dem es sich um ein Vielfaches von 4 Bytes handelt, die Beispiele können jedoch nicht byte ausgerichtet sein. Die Anordnung von Kanälen wird durch eine Maske angegeben. Weitere Informationen finden Sie unter WAVEFORMATEXTENSIBLE.

 

Schließen Waveform-Audio Ausgabegeräte

Rufen Sie nach Abschluss der Waveform-Audiowiedergabe waveOutClose auf, um das Ausgabegerät zu schließen. Wenn waveOutClose- aufgerufen wird, während eine Waveform-Audiodatei wiedergegeben wird, schlägt der Schließvorgang fehl, und die Funktion gibt einen Fehlercode zurück, der angibt, dass das Gerät nicht geschlossen wurde. Wenn Sie nicht warten möchten, bis die Wiedergabe beendet ist, bevor Sie das Gerät schließen, rufen Sie die waveOutReset--Funktion auf, bevor Sie es schließen. Dadurch wird die Wiedergabe beendet und das Gerät geschlossen. Achten Sie darauf, dass Sie die waveOutUnprepareHeader--Funktion verwenden, um die Vorbereitung auf allen Datenblöcken zu bereinigen, bevor Sie das Gerät schließen.