Freigeben über


Audiodatenblöcke

[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.]

Die waveInAddBuffer und waveOutWrite- Funktionen erfordern Anwendungen, die Datenblöcke zuweisen, die an die Gerätetreiber zu Aufnahme- oder Wiedergabezwecken übergeben werden. Beide Funktionen verwenden die WAVEHDR- Struktur, um ihren Datenblock zu beschreiben.

Bevor Sie eine dieser Funktionen verwenden, um einen Datenblock an einen Gerätetreiber zu übergeben, müssen Sie Speicher für den Datenblock und die Headerstruktur zuweisen, die den Datenblock beschreibt. Die Kopfzeilen können mithilfe der folgenden Funktionen vorbereitet und nicht vorbereitet werden.

Funktion Beschreibung
waveInPrepareHeader Bereitet einen Waveform-Audioeingabedatenblock vor.
waveInUnprepareHeader Bereinigt die Vorbereitung auf einem Waveform-Audio-Eingabedatenblock.
waveOutPrepareHeader Bereitet einen Waveform-Audioausgabedatenblock vor.
waveOutUnprepareHeader Bereinigt die Vorbereitung auf einem Waveform-Audioausgabedatenblock.

 

Bevor Sie einen Audiodatenblock an einen Gerätetreiber übergeben, müssen Sie den Datenblock vorbereiten, indem Sie ihn entweder an waveInPrepareHeader- oder waveOutPrepareHeaderübergeben. Wenn der Gerätetreiber mit dem Datenblock fertig ist und es zurückgibt, müssen Sie diese Vorbereitung bereinigen, indem Sie den Datenblock entweder an waveInUnprepareHeader oder waveOutUnprepareHeader übergeben, bevor ein zugeordneter Speicher freigegeben werden kann.

Sofern die Waveform-Audio- und Ausgabedaten nicht klein genug sind, um in einem einzelnen Datenblock enthalten zu sein, müssen Anwendungen den Gerätetreiber kontinuierlich mit Datenblöcken versorgen, bis die Wiedergabe oder Aufzeichnung abgeschlossen ist.

Selbst wenn ein einzelner Datenblock verwendet wird, muss eine Anwendung bestimmen können, wann ein Gerätetreiber mit dem Datenblock fertig ist, damit die Anwendung den Speicher freigeben kann, der dem Datenblock und der Headerstruktur zugeordnet ist. Es gibt mehrere Möglichkeiten, zu bestimmen, wann ein Gerätetreiber mit einem Datenblock fertig ist:

  • Durch Angeben einer Rückruffunktion zum Empfangen einer vom Treiber gesendeten Nachricht, wenn sie mit einem Datenblock fertig gestellt wird
  • Mithilfe eines Ereignisrückrufs
  • Durch Angeben eines Fensters oder Threads zum Empfangen einer vom Treiber gesendeten Nachricht, wenn sie mit einem Datenblock fertig ist
  • Durch Abfragen des WHDR_DONE Bits im dwFlags Mitglied der WAVEHDR Struktur, die mit jedem Datenblock gesendet wird

Wenn eine Anwendung bei Bedarf keinen Datenblock an den Gerätetreiber erhält, kann es eine akustische Lücke bei der Wiedergabe oder einen Verlust eingehender aufgezeichneter Informationen geben. Dies erfordert mindestens ein Doppelpufferschema – mindestens einen Datenblock vor dem Gerätetreiber zu bleiben.

In den folgenden Themen wird beschrieben, wie Sie ermitteln können, wann ein Gerätetreiber mit einem Datenblock fertig ist:

Verwenden einer Rückruffunktion zum Verarbeiten von Treibermeldungen