OfflineAudioContext
Baseline Widely available
This feature is well established and works across many devices and browser versions. It’s been available across browsers since April 2021.
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
.
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 eventocomplete
- do tipoOfflineAudioCompletionEvent
- é gerado, após a versão baseada em eventos doOfflineAudioContext.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.)
// 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