OfflineAudioContext
Baseline Widely available
This feature is well established and works across many devices and browser versions. It’s been available across browsers since April 2021.
Das OfflineAudioContext
-Interface ist ein AudioContext
-Interface, das einen Audioverarbeitungsgraphen repräsentiert, der aus miteinander verknüpften AudioNode
s aufgebaut ist. Im Gegensatz zu einem Standard-AudioContext
rendert ein OfflineAudioContext
das Audio nicht auf die Gerätehardware; stattdessen erzeugt es das Audio so schnell wie möglich und gibt das Ergebnis in einen AudioBuffer
aus.
Konstruktor
OfflineAudioContext()
-
Erstellt eine neue Instanz von
OfflineAudioContext
.
Instanz-Eigenschaften
Erbt auch Eigenschaften von seinem Eltern-Interface, BaseAudioContext
.
OfflineAudioContext.length
Nur lesbar-
Ein ganzzahliger Wert, der die Größe des Puffers in Sample-Frames darstellt.
Instanz-Methoden
Erbt auch Methoden von seinem Eltern-Interface, BaseAudioContext
.
OfflineAudioContext.suspend()
-
Plant eine Aussetzung des Zeitfortschritts im Audiokontext zu der angegebenen Zeit und gibt ein Promise zurück.
OfflineAudioContext.startRendering()
-
Startet das Rendering des Audios unter Berücksichtigung der aktuellen Verbindungen und der aktuell geplanten Änderungen. Diese Seite behandelt sowohl die ereignisbasierte als auch die auf Versprechungen basierende Version.
Veraltete Methoden
OfflineAudioContext.resume()
-
Nimmt den Zeitfortschritt in einem Audiokontext, der zuvor ausgesetzt wurde, wieder auf.
Hinweis: Die Methode resume()
ist weiterhin verfügbar — sie ist nun auf dem BaseAudioContext
-Interface definiert (siehe AudioContext.resume
) und kann daher sowohl von den Interfaces AudioContext
als auch OfflineAudioContext
aufgerufen werden.
Ereignisse
Diese Ereignisse können Sie mit addEventListener()
abhören oder einen Ereignis-Listener auf die oneventname
-Eigenschaft dieses Interfaces zuweisen:
complete
-
Wird ausgelöst, wenn das Rendering eines Offline-Audiokontextes abgeschlossen ist.
Beispiele
Audio mit einem Offline-Audiokontext abspielen
In diesem Beispiel deklarieren wir sowohl ein AudioContext
als auch ein OfflineAudioContext
-Objekt. Wir verwenden den AudioContext
, um einen Audiotrack mit fetch()
zu laden, und dann das OfflineAudioContext
, um das Audio in einen AudioBufferSourceNode
zu rendern und den Track abzuspielen. Nachdem der Offline-Audio-Graph eingerichtet ist, rendern wir ihn in einen AudioBuffer
mit OfflineAudioContext.startRendering()
.
Wenn das Promise startRendering()
aufgelöst wird, ist das Rendering abgeschlossen und der ausgegebene AudioBuffer
wird aus dem Promise zurückgegeben.
An diesem Punkt erstellen wir einen weiteren Audiokontext, erstellen einen AudioBufferSourceNode
darin und setzen seinen Puffer gleich dem Promise-AudioBuffer
. Dies wird dann als Teil eines einfachen Standard-Audio-Graphs abgespielt.
Hinweis: Sie können das vollständige Beispiel live ausführen oder den Quellcode ansehen.
// Define both online and offline audio contexts
let audioCtx; // Must be initialized after a user interaction
const offlineCtx = new OfflineAudioContext(2, 44100 * 40, 44100);
// Define constants for dom nodes
const play = document.querySelector("#play");
function getData() {
// Fetch an audio track, decode it and stick it in a buffer.
// Then we put the buffer into the source and can play it.
fetch("viper.ogg")
.then((response) => response.arrayBuffer())
.then((downloadedBuffer) => audioCtx.decodeAudioData(downloadedBuffer))
.then((decodedBuffer) => {
console.log("File downloaded successfully.");
const source = new AudioBufferSourceNode(offlineCtx, {
buffer: decodedBuffer,
});
source.connect(offlineCtx.destination);
return source.start();
})
.then(() => offlineCtx.startRendering())
.then((renderedBuffer) => {
console.log("Rendering completed successfully.");
play.disabled = false;
const song = new AudioBufferSourceNode(audioCtx, {
buffer: renderedBuffer,
});
song.connect(audioCtx.destination);
// Start the song
song.start();
})
.catch((err) => {
console.error(`Error encountered: ${err}`);
});
}
// Activate the play button
play.onclick = () => {
play.disabled = true;
// We can initialize the context as the user clicked.
audioCtx = new AudioContext();
// Fetch the data and start the song
getData();
};
Spezifikationen
Specification |
---|
Web Audio API # OfflineAudioContext |
Browser-Kompatibilität
BCD tables only load in the browser