OfflineAudioContext

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

EventTarget BaseAudioContext (en-US) OfflineAudioContext

コンストラクター

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

関連情報