OfflineAudioContext

OfflineAudioContext インターフェイスは AudioContext インターフェイスの一種で、AudioNode をつなげて造られる音声処理グラフを表しています。通常の AudioContext と異なり、OfflineAudioContext で処理された音声はハードウェアから再生されることはありません。処理された結果は AudioBuffer に出力されます。
 

コンストラクター

OfflineAudioContext.OfflineAudioContext() (en-US)
新しい OfflineAudioContext のインスタンスを作成します。

プロパティ

親インターフェイスである BaseAudioContext (en-US) からのプロパティも継承します。

OfflineAudioContext.length (en-US) 読取専用
サンプルフレーム数で表されるバッファの大きさの整数値。

イベントハンドラー

OfflineAudioContext.oncomplete (en-US)

処理終了時に呼ばれる event handler イベントハンドラーです。 complete (en-US) イベント (型は OfflineAudioCompletionEvent (en-US) )を受け取ります。このイベントは、OfflineAudioContext.startRendering() (en-US) のイベント駆動型が利用された場合、処理終了時に送出さます。

メソッド

親インターフェースである BaseAudioContext (en-US) からのメソッドも継承します。

OfflineAudioContext.resume() (en-US)
Resumes the progression of time in an audio context that has previously been suspended.
OfflineAudioContext.suspend() (en-US)
Schedules a suspension of the time progression in the audio context at the specified time and returns a promise.
OfflineAudioContext.startRendering() (en-US)
Starts rendering the audio, taking into account the current connections and the current scheduled changes. This page covers both the event-based version and the promise-based version.

この例では、AudioContext と OfflineAudioContext 二つのオブジェクトを作っています。AudioContext はXHR (AudioContext.decodeAudioData)でオーディオトラックを読み込むのに使い、OfflineAudioContext でAudioBufferSourceNode の中に音声をレンダリングし、そしてその音声を再生します。オフライン音声グラフのセットアップが終わった後、OfflineAudioContext.startRendering (en-US) を使って AudioBuffer にレンダリングする必要があります。

startRendering() のPromiseが解決されるとレンダリングは完了し、出力結果の AudioBuffer がPromiseの結果として戻されます。

At this point we create another audio context, create an AudioBufferSourceNode inside it, and set its buffer to be equal to the promise AudioBuffer. This is then played as part of a simple standard audio graph.

Note: For a working example, see our offline-audio-context-promise Github repo (see the source code too.)

// オンラインとオフラインのオーディオコンテキストを定義

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

source = offlineCtx.createBufferSource();

// XHRで音声トラックを読み込み、
// decodeAudioData でデコードして OfflineAudioContext で再生する。

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);
          // 注意: OfflineAudioContext の startRendering が二回以上呼び出されるとPromise はリジェクトされます。
      });
    });
  }

  request.send();
}

// getData で処理を開始する。

getData();

仕様書

仕様書 状態 備考
Web Audio API
OfflineAudioContext の定義
勧告 初回定義

ブラウザーの対応

BCD tables only load in the browser

関連情報