OfflineAudioContext

A interface OfflineAudioContext é uma interface AudioContext que representa um gráfico de processament de áudio construido a partir de conexões entre AudioNodes. Em contraste com o padrão AudioContext, um OfflineAudioContext não processa o áudio para o hardware do dispositivo; Em vez disso, ele gera, o mais rápido possível, e exibe o resultado para um AudioBuffer.

EventTarget BaseAudioContext OfflineAudioContext

Construtor

OfflineAudioContext.OfflineAudioContext()

Cria uma nova instância OfflineAudioContext.

Propriedades

Também herda propriedades da sua entidade paterna, BaseAudioContext.

OfflineAudioContext.length Somente leitura

Um número inteiro que representa o tamanho do buffer em quadros de amostra.

Manipuladores de Eventos

OfflineAudioContext.oncomplete

É uma chamada event handler quando o processamento é encerrado, é quando o evento complete - do tipo OfflineAudioCompletionEvent - é gerado, após a versão baseada em eventos do OfflineAudioContext.startRendering() é usada.

Métodos

Também herda métodos da interface paterna, BaseAudioContext.

OfflineAudioContext.resume()

Programa uma suspensão da progressão do tempo no contexto de áudio no horário especificado e retorna uma promessa.

OfflineAudioContext.suspend()

Agende uma suspensão da progressão do tempo no contexto de áudio no horário especificado e retorna uma promessa.

OfflineAudioContext.startRendering()

Inicia a renderização do áudio, levando em consideração as conexões atuais e as mudanças programadas atuais. Esta página abrange a versão baseada em eventos e a versão baseada em promessas.

Exemplo

Nesse exemplo, declaramos um ambos AudioContext e um OfflineAudioContext objeto. Nós usamos o AudioContext para carregar uma faixa de áudio via XHR (AudioContext.decodeAudioData), então o OfflineAudioContext para renderizar o áudio em um AudioBufferSourceNode e reproduzir a trilha. Depois que o gráfico de áudio off-line estiver configurado, você deve renderizá-lo para AudioBuffer usando OfflineAudioContext.startRendering.

Quando a 'promise' startRendering() é resolvida, a renderização foi concluída e a saída AudioBuffer é retornada fora da 'promise.

Neste ponto, criamos outro contexto de áudio, criamos um AudioBufferSourceNode dentro dele e configuramos o buffer para ser igual à promessa AudioBuffer. Isso é jogado como parte de um gráfico de áudio padrão simples.

Nota: Para um exemplo de trabalho, veja nosso offline-audio-context-promise Github repo (veja o código fonte também.)

js
// define o contexto de áudio online e offline

var audioCtx = new AudioContext();
var offlineCtx = new OfflineAudioContext(2, 44100 * 40, 44100);

source = offlineCtx.createBufferSource();

// usa XHR para carregar uma faixa de áudio, e
// decodeAudioData para decodificar e OfflineAudioContext para renderizar

function getData() {
  request = new XMLHttpRequest();

  request.open("GET", "viper.ogg", true);

  request.responseType = "arraybuffer";

  request.onload = function () {
    var audioData = request.response;

    audioCtx.decodeAudioData(audioData, function (buffer) {
      myBuffer = buffer;
      source.buffer = myBuffer;
      source.connect(offlineCtx.destination);
      source.start();
      //source.loop = true;
      offlineCtx
        .startRendering()
        .then(function (renderedBuffer) {
          console.log("Rendering completed successfully");
          var audioCtx = new (window.AudioContext ||
            window.webkitAudioContext)();
          var song = audioCtx.createBufferSource();
          song.buffer = renderedBuffer;

          song.connect(audioCtx.destination);

          play.onclick = function () {
            song.start();
          };
        })
        .catch(function (err) {
          console.log("Rendering failed: " + err);
          // Nota: A promessa deve rejeitar quando o StartRendering é chamado uma segunda vez em um OfflineAudioContext
        });
    });
  };

  request.send();
}

// Run getData to start the process off

getData();

Especificações

Specification
Web Audio API
# OfflineAudioContext

Compatibilidade com navegadores

BCD tables only load in the browser

Veja também