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

We're converting our compatibility data into a machine-readable JSON format. This compatibility table still uses the old format, because we haven't yet converted the data it contains. Find out how you can help! (en-US)
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 webkit (en-US)
copyFromChannel() and copyToChannel() No support ? 27.0 (27)   No support No support No support

Zobacz także