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() 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 parametr channel (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.

Kompatybilność z przeglądarkami

Cecha Chrome Firefox (Gecko) Internet Explorer Opera Safari (WebKit)
Wsparcie podstawowe 14 webkit 25 (25) No support 15 webkit
22
6 webkit
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 25.0 (25) 1.2 No support No support webkit
copyFromChannel() and copyToChannel() No support ? 27.0 (27)   No support No support No support

Zobacz także

Autorzy i etykiety dokumentu

 Autorzy tej strony: drm404, mateuszdanek
 Ostatnia aktualizacja: drm404,