Baseline Widely available
Die createBuffer()
-Methode der Schnittstelle BaseAudioContext
wird verwendet, um ein neues, leeres AudioBuffer
-Objekt zu erstellen. Dieses kann dann mit Daten gefüllt und über einen AudioBufferSourceNode
abgespielt werden.
Für weitere Details über Audio-Puffer schauen Sie sich die AudioBuffer
-Referenzseite an.
Hinweis:>createBuffer()
konnte früher komprimierte Daten verarbeiten und dekodierte Samples zurückgeben, aber diese Fähigkeit wurde aus der Spezifikation entfernt, da die gesamte Dekodierung im Haupt-Thread durchgeführt wurde, was die Ausführung anderer Codes blockierte. Die asynchrone Methode decodeAudioData()
übernimmt diese Aufgabe â sie nimmt komprimierte Audiodaten, wie eine MP3-Datei, und gibt direkt ein AudioBuffer
zurück, das Sie dann über einen AudioBufferSourceNode
abspielen können. Für einfache Anwendungsfälle wie das Abspielen eines MP3s sollten Sie decodeAudioData()
verwenden.
Für eine ausführliche Erklärung, wie Audio-Puffer funktionieren, einschlieÃlich der Funktion der Parameter, lesen Sie Audio-Puffer: Frames, Samples und Kanäle aus unserem Leitfaden zu den Grundkonzepten.
SyntaxcreateBuffer(numOfChannels, length, sampleRate)
Parameter
numOfChannels
Ein Integer, der die Anzahl der Kanäle darstellt, die dieser Puffer haben soll. Der Standardwert ist 1, und alle Benutzeragenten müssen mindestens 32 Kanäle unterstützen.
length
Ein Integer, der die GröÃe des Puffers in Sample-Frames darstellt (wobei jeder Sample-Frame die GröÃe eines Samples in Bytes multipliziert mit numOfChannels
ist). Um die length
für eine bestimmte Anzahl an Sekunden Audio zu bestimmen, verwenden Sie numSeconds * sampleRate
.
sampleRate
Die Abtastrate der linearen Audiodaten in Sample-Frames pro Sekunde. Alle Browser müssen Abtastraten im Bereich von mindestens 8.000 Hz bis 96.000 Hz unterstützen.
Ein AudioBuffer
, das basierend auf den angegebenen Optionen konfiguriert ist.
NotSupportedError
DOMException
Wirft einen Fehler, wenn eine oder mehrere Optionen negativ oder anderweitig ungültig sind (wie numberOfChannels
, das höher ist als unterstützt, oder eine sampleRate
auÃerhalb des Nominalbereichs).
RangeError
Wirft einen Fehler, wenn nicht genügend Speicher verfügbar ist, um den Puffer zuzuweisen.
Zuerst ein paar einfache, triviale Beispiele, um zu erklären, wie die Parameter verwendet werden:
const audioCtx = new AudioContext();
const buffer = audioCtx.createBuffer(2, 22050, 44100);
Wenn Sie diesen Aufruf verwenden, erhalten Sie einen Stereopuffer (zwei Kanäle), der, wenn er in einem AudioContext
bei 44100 Hz (sehr üblich, die meisten normalen Soundkarten arbeiten mit dieser Rate) abgespielt wird, 0,5 Sekunden dauert: 22050 Frames / 44100 Hz = 0,5 Sekunden.
const audioCtx = new AudioContext();
const buffer = audioCtx.createBuffer(1, 22050, 22050);
Wenn Sie diesen Aufruf verwenden, erhalten Sie einen Monopuffer (ein Kanal), der, wenn er in einem AudioContext
bei 44100 Hz abgespielt wird, automatisch auf 44100 Hz neu abgetastet wird (und daher 44100 Frames ergibt) und 1,0 Sekunde dauert: 44100 Frames / 44100 Hz = 1 Sekunde.
Hinweis: Audio-Neuabtastung ist sehr ähnlich zur BildgröÃenänderung: Wenn Sie ein 16 x 16 Bild haben und es auf ein 32 x 32 Gebiet vergröÃern möchten, ändern (neuabtasten) Sie die GröÃe. Das Ergebnis hat weniger Qualität (es kann unscharf oder kantig sein, abhängig vom VergröÃerungsalgorithmus), aber es funktioniert, und das vergröÃerte Bild nimmt weniger Platz ein. Neuabgetastetes Audio ist genau dasselbe â Sie sparen Platz, aber in der Praxis können Sie hohe Frequenzinhalte (Höhenklang) nicht richtig reproduzieren.
Schauen wir uns nun ein komplexeres createBuffer()
-Beispiel an, in dem wir einen Dreisekunden-Puffer erstellen, ihn mit WeiÃem Rauschen füllen und dann über einen AudioBufferSourceNode
abspielen. Die Kommentare sollten klar erklären, was vor sich geht. Sie können den Code auch live ausführen oder den Quellcode ansehen.
const audioCtx = new AudioContext();
// Create an empty three-second stereo buffer at the sample rate of the AudioContext
const myArrayBuffer = audioCtx.createBuffer(
2,
audioCtx.sampleRate * 3,
audioCtx.sampleRate,
);
// Fill the buffer with white noise;
// just random values between -1.0 and 1.0
for (let channel = 0; channel < myArrayBuffer.numberOfChannels; channel++) {
// This gives us the actual ArrayBuffer that contains the data
const nowBuffering = myArrayBuffer.getChannelData(channel);
for (let i = 0; i < myArrayBuffer.length; i++) {
// Math.random() is in [0; 1.0]
// audio needs to be in [-1.0; 1.0]
nowBuffering[i] = Math.random() * 2 - 1;
}
}
// Get an AudioBufferSourceNode.
// This is the AudioNode to use when we want to play an AudioBuffer
const source = audioCtx.createBufferSource();
// set the buffer in the AudioBufferSourceNode
source.buffer = myArrayBuffer;
// connect the AudioBufferSourceNode to the
// destination so we can hear the sound
source.connect(audioCtx.destination);
// start the source playing
source.start();
Spezifikationen Browser-Kompatibilität Siehe auch
RetroSearch is an open source project built by @garambo | Open a GitHub Issue
Search and Browse the WWW like it's 1997 | Search results from DuckDuckGo
HTML:
3.2
| Encoding:
UTF-8
| Version:
0.7.4