AudioBuffer
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()
(en-US) lub z surowych danych przy użyciu AudioContext.createBuffer()
(en-US). Dane audio umieszczone w AudioBuffer mogą być następnie odtwarzane przez przekazanie ich do AudioBufferSourceNode
(en-US).
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
(en-US) 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
(en-US) Read only- Zwraca wartość typu
int
reprezentującą wielkość danych PCM przechowywanych w buforze wyrażoną jako liczba okien próbek. AudioBuffer.duration
(en-US) Read only- Zwraca wartość typu
double
reprezentującą czas trwania danych PCM zapisanych w buforze wyrażoną w sekundach. AudioBuffer.numberOfChannels
(en-US) Read only- Zwraca wartość typu
int
reprezentującą liczbę pojedynczych kanałów audio opisanych przez dane PCM zapisanych w buforze.
Metody
AudioBuffer.getChannelData()
(en-US)- Zwraca tablicę
Float32Array
zawierającą dane PCM powiązane z kanałem audio określonym jako parametrchannel
(0
reprezentuje pierwszy kanał). AudioBuffer.copyFromChannel()
(en-US)- Kopiuje próbki z danego kanału w
AudioBuffer
do danej tablicy. AudioBuffer.copyToChannel()
(en-US)- 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. |
Kompatybilność z przeglądarkami
Cecha | Chrome | Firefox (Gecko) | Internet Explorer | Opera | Safari (WebKit) |
---|---|---|---|---|---|
Wsparcie podstawowe | 14 webkit (en-US) | 25 (25) | No support | 15 webkit (en-US) 22 |
6 webkit (en-US) |
copyFromChannel() and copyToChannel() |
? | 27 (27) | No support | ? | No support |
Cecha | Android | Chrome | Firefox Mobile (Gecko) | Firefox OS | IE Phone | Opera Mobile | Safari Mobile |
---|---|---|---|---|---|---|---|
Wsparcie podstawowe | No support | 28 webkit (en-US) | 25.0 (25) | 1.2 | No support | No support | 6 webkit (en-US) |
copyFromChannel() and copyToChannel() |
No support | ? | 27.0 (27) | No support | No support | No support |