OfflineAudioContext
===================

A interface `OfflineAudioContext` é uma interface `AudioContext` que representa um gráfico de processament de áudio construido a partir de conexões entre `AudioNode`s. 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` (en-US).
EventTarget

BaseAudioContext

(en-US)

OfflineAudioContextConstrutor
----------

`OfflineAudioContext.OfflineAudioContext()` (en-US)

Cria uma nova instância `OfflineAudioContext`.

Propriedades
------------

*Também herda propriedades da sua entidade paterna, `BaseAudioContext` (en-US).*

`OfflineAudioContext.length` (en-US) Somente leitura 

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

### Manipuladores de Eventos

`OfflineAudioContext.oncomplete` (en-US)

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

Métodos
-------

*Também herda métodos da interface paterna, `BaseAudioContext` (en-US).*

`OfflineAudioContext.resume()` (en-US)

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

`OfflineAudioContext.suspend()` (en-US)

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

`OfflineAudioContext.startRendering()` (en-US)

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` (en-US)), então o `OfflineAudioContext` para renderizar o áudio em um `AudioBufferSourceNode` (en-US) e reproduzir a trilha. Depois que o gráfico de áudio off-line estiver configurado, você deve renderizá-lo para `AudioBuffer` (en-US) usando `OfflineAudioContext.startRendering` (en-US).

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` (en-US) 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 with JavaScript enabled. Enable JavaScript to view data.

Veja também
-----------

* Usando a API de áudio da Web (en-US)