RSS Twitter Facebook

2016/01/20 (2016年01月 のアーカイブ)

Web Audio API メソッドチェーン


Web Audio API の WD10-Oct-2013 と WD08-Dec-2015 の違いとしてメソッドチェーンに関するサポートがあります。両者のIDLを並べてみるとこんな感じになります。



一番上の connect(AudioNode) の戻り値が void から AudioNode に変わっています。ここで返されるAudioNode は接続した先の AudioNode です。これで何がしたいのかというと...

var ctx = new AudioContext();        // オーディオコンテキストに...
var osc = ctx.createOscillator();    // オシレータと
var gain = ctx.crateGain();          // ゲインがあるとして

// 今までは
osc.connect(gain);                   // オシレータをゲインに繋いで
gain.connect(ctx.destination);       // ゲインをデスティネーションに繋ぐ

//だったのが、これからは
osc.connect(gain).connect(ctx.destination); //オシレータ => ゲイン => デスティネーション を一気に繋ぐ
というような書き方が想定されています。 これはまだ正式版には実装されていませんが、Chrome Canary、Firefox Beta には入っています。もうすぐ使えるようになりそうですね。

同じように AudioParam のオートメーションに関しても API が変更されています。




オートメーションメソッドの返り値が軒並み AudioParam に変更されています。 connect に比べるといまいちですが、こんな書き方でしょうか。

ctx = new AudioContext();
gain = ctx.createGain();  // ゲインがあります

// 今までは
gain.setValueAtTime(1, ctx.currentTime + 0.1); // 0.1Sec後に 1
gain.setValueAtTime(0, ctx.currentTime + 0.2); // 0.2Sec後に 0

// だったのがこれからは
gain.setValueAtTime(1, ctx.currentTime + 0.1).setValueAtTime(0, ctx.currentTime + 0.2);
// 一気に0.1Sec後に1、0.2Sec後に0
こちらはまだスペックに書かれているだけでまだ Chrome Canary にも Firefox Nightly にも入っていないようです。 些細な違いですけど、ま、いいんじゃないですかね。こういうのが流行りらしいです。

Posted by g200kg : 2016/01/20 17:27:39