XAudio2-Streaming-Audiodaten

Streaming ist der Vorgang, bei dem nur ein kleiner Teil einer Audiodatei im Arbeitsspeicher wiedergegeben wird. Auf diese Weise können große Audiodateien wie z. B. Hintergrundmusik wiedergegeben werden und keine große Menge Arbeitsspeicher belegen.

Tip

Pufferdimensionierung für niedrige Latenz: Verwenden Sie in Ihrem Streaming-Ringpuffer mindestens drei Puffer, um Stockungen zu vermeiden, und halten Sie die Dauer jedes Puffers zwischen 20 und 100 ms. Kürzere Puffer (20–40 ms) reduzieren die wahrgenommene Latenz für interaktive Soundeffekte, erfordern aber schnellere Datenträgerlesungen und eine engere Threadplanung. Beim Streaming von Hintergrundmusik bieten Puffer von 80–100 ms eine ausreichende Reserve und bleiben dabei für Nutzer unhörbar.

Warnung

Der Streamingthread sollte über MMCSS mit erhöhter Priorität ausgeführt werden (z. B. die Registrierung bei der Aufgabe "Pro Audio" oder "Spiele"), um Pufferunterläufe zu vermeiden, die durch Threads mit niedrigerer Priorität verursacht werden, die die Audiopipeline verhungern. Pufferunterläufe führen zu hörbaren Knackgeräuschen oder Stillelücken, die im Spielaudio störend sind.

Wenn eine Audiodatei gestreamt wird, werden die Daten von einem Datenträger in Blöcken gelesen, anstatt die gesamte Datei gleichzeitig zu laden. Streaming erfolgt durch asynchrones Lesen von Audiodaten in eine Warteschlange mit Datenträgerpuffern. Jeder Puffer wird ausgefüllt und dann an eine Quellstimme übermittelt. Nachdem die Stimme die Wiedergabe eines Puffers abgeschlossen hat, steht der Puffer wieder zum Lesen zur Verfügung. Durch das Durchlaufen der Datenträgerpuffer kann auf diese Weise eine große Audiodatei wiedergegeben werden, während nur ein Teil seiner Daten geladen wird. Der Streamingcode sollte in einem separaten Thread ausgeführt werden, wo er pausieren kann, während er darauf wartet, dass langwierige Datenträger- und Audiovorgänge abgeschlossen werden. Eine Rückrufklasse wird verwendet, um den Thread zu reaktivieren, indem Ereignisse ausgelöst werden, wenn Audiovorgänge abgeschlossen sind.

Ein Beispiel dafür, wie Streaming mit XAudio2 erreicht werden kann, finden Sie unter How to: Stream a Sound from Disk.

Streamen von Audiodaten

Programmierhandbuch für XAudio2