Interfejs AudioBuffer
przedstawia krótki zasób dźwiękowy znajdujący się w pamięci, stworzony z pliku dźwiękowego za pomocą metody AudioContext.decodeAudioData()
lub z surowych danych przy użyciu AudioContext.createBuffer()
. Dane audio umieszczone w AudioBuffer mogą być następnie odtwarzane przez przekazanie ich do AudioBufferSourceNode
.
Obiekty tego typu są przeznaczone do przechowywania drobnych fragmentów dźwiękowych, zwykle mniej niż 45s. W przypadku dłuższych dźwięków, obiekty implementujące MediaElementAudioSourceNode
są bardziej odpowiednie. Bufor zawiera dane w następującym formacie: IEEE754 32 -bitowy liniowy PCM bez przeplotu o nominalnym zakresie między -1 i +1 , czyli 32-bitowy zmiennoprzecinkowy bufor z próbkami o znormalizowanych wartościach między -1.0 a 1.0. Jeśli AudioBuffer
ma wiele kanałów, są one przechowywane w osobnym buforze.
Właściwości
AudioBuffer.sampleRate
Read only- Zwraca wartość typu
float
reprezentującą częstotliwość próbkowania danych PCM przechowywanych w buforze wyrażoną w próbkach na sekundę. AudioBuffer.length
Read only- Zwraca wartość typu
int
reprezentującą wielkość danych PCM przechowywanych w buforze wyrażoną jako liczba okien próbek. AudioBuffer.duration
Read only- Zwraca wartość typu
double
reprezentującą czas trwania danych PCM zapisanych w buforze wyrażoną w sekundach. AudioBuffer.numberOfChannels
Read only- Zwraca wartość typu
int
reprezentującą liczbę pojedynczych kanałów audio opisanych przez dane PCM zapisanych w buforze.
Metody
AudioBuffer.getChannelData()
- Zwraca tablicę
Float32Array
zawierającą dane PCM powiązane z kanałem audio określonym jako parametrchannel
(0
reprezentuje pierwszy kanał). AudioBuffer.copyFromChannel()
- Kopiuje próbki z danego kanału w
AudioBuffer
do danej tablicy. AudioBuffer.copyToChannel()
- Kopiuje próbki z danej tablicy do danego
kanału w AudioBuffer
.
Przykład
Następujący przykład kodu pokazuje jak stworzyć AudioBuffer
i wypełnić go białym szumem. Pełną wersję kodu można znależć w naszym repozytorium audio-buffer demo; jest dostępna także uruchomiona na żywo wersja running live version.
// Stereo
var channels = 2;
// Tworzenie pustego, dwusekundowego buffera stereo
// na wskaźniku audio z AudioContext
var frameCount = audioCtx.sampleRate * 2.0;
var myArrayBuffer = audioCtx.createBuffer(channels, frameCount, audioCtx.sampleRate);
button.onclick = function() {
// Wypełnienie buffera białym szumem;
// Wartość losowa pomiędzy -1.0 a 1.0
for (var channel = 0; channel < channels; channel++) {
// To daje nam aktualną tablice zawierającą dane
var nowBuffering = myArrayBuffer.getChannelData(channel);
for (var i = 0; i < frameCount; i++) {
// Math.random() znajduje się w przedziale [0; 1.0]
// audio musi znajdować się w [-1.0; 1.0]
nowBuffering[i] = Math.random() * 2 - 1;
}
}
// Dostarczenie AudioBufferSourceNode.
// To jest AudioNode dedykowane do używania wtedy, kiedy chcemy odtworzyć dany AudioBuffer
var source = audioCtx.createBufferSource();
// Określanie buffera w AudioBufferSourceNode
source.buffer = myArrayBuffer;
// Podłączanie AudioBufferSourceNode do
// destynacji, dzięki czemu możemy usłyszeć dźwięk
source.connect(audioCtx.destination);
// start odtwarzania źródła
source.start();
}
Specyfikacje
Specyfikacja | Status | Komentarz |
---|---|---|
Web Audio API The definition of 'AudioBuffer' in that specification. |
Working Draft | Definicja wstępna. |