AudioContext: createMediaStreamDestination()-Methode
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.
Die createMediaStreamDestination()
-Methode der AudioContext
-Schnittstelle wird verwendet, um ein neues MediaStreamAudioDestinationNode
-Objekt zu erstellen, das mit einem WebRTC-MediaStream
verknüpft ist, der einen Audiostrom darstellt. Dieser kann in einer lokalen Datei gespeichert oder an einen anderen Computer gesendet werden.
Der MediaStream
wird erstellt, wenn der Knoten erstellt wird und ist über das stream
-Attribut des MediaStreamAudioDestinationNode
zugänglich. Dieser Stream kann ähnlich wie ein MediaStream
verwendet werden, der über navigator.getUserMedia
erlangt wurde — er kann zum Beispiel an einen entfernten Teilnehmer mittels der addStream()
-Methode von RTCPeerConnection
gesendet werden.
Für weitere Details über Medienstrom-Zielknoten schauen Sie sich die MediaStreamAudioDestinationNode
-Referenzseite an.
Syntax
createMediaStreamDestination()
Parameter
Keine.
Rückgabewert
Beispiele
Im folgenden einfachen Beispiel erstellen wir einen MediaStreamAudioDestinationNode
, einen OscillatorNode
und einen MediaRecorder
(das Beispiel funktioniert daher derzeit nur in Firefox und Chrome). Der MediaRecorder
wird eingerichtet, um Informationen vom MediaStreamDestinationNode
aufzuzeichnen.
Wenn der Button geklickt wird, startet der Oszillator und der MediaRecorder
wird gestartet. Wenn der Button gestoppt wird, stoppen sowohl der Oszillator als auch der MediaRecorder
. Das Stoppen des MediaRecorder
löst das dataavailable
-Ereignis aus, und die Ereignisdaten werden in das chunks
-Array geschoben. Danach wird das stop
-Ereignis ausgelöst, ein neues blob
vom Typ opus wird erstellt – das die Daten im chunks
-Array enthält, und ein neues Fenster (Tab) wird geöffnet, das auf eine vom Blob erstellte URL zeigt.
Von hier aus können Sie die opus-Datei abspielen und speichern.
<!doctype html>
<html lang="en-US">
<head>
<meta charset="UTF-8" />
<title>createMediaStreamDestination() demo</title>
</head>
<body>
<h1>createMediaStreamDestination() demo</h1>
<p>Encoding a pure sine wave to an Opus file</p>
<button>Make sine wave</button>
<audio controls></audio>
<script>
const b = document.querySelector("button");
let clicked = false;
const chunks = [];
const ac = new AudioContext();
const osc = ac.createOscillator();
const dest = ac.createMediaStreamDestination();
const mediaRecorder = new MediaRecorder(dest.stream);
osc.connect(dest);
b.addEventListener("click", (e) => {
if (!clicked) {
mediaRecorder.start();
osc.start(0);
e.target.textContent = "Stop recording";
clicked = true;
} else {
mediaRecorder.stop();
osc.stop(0);
e.target.disabled = true;
}
});
mediaRecorder.ondataavailable = (evt) => {
// Push each chunk (blobs) in an array
chunks.push(evt.data);
};
mediaRecorder.onstop = (evt) => {
// Make blob out of our blobs, and open it.
const blob = new Blob(chunks, { type: "audio/ogg; codecs=opus" });
document.querySelector("audio").src = URL.createObjectURL(blob);
};
</script>
</body>
</html>
Hinweis: Sie können dieses Beispiel live ansehen oder den Quellcode studieren auf GitHub.
Spezifikationen
Specification |
---|
Web Audio API # dom-audiocontext-createmediastreamdestination |
Browser-Kompatibilität
BCD tables only load in the browser