音の鳴るブログ

鳴らないこともある

timbre.js の使い方メモ:set メソッド

あたらしい timbre.js のドキュメントのドラフトみたいな感じで書く。

timbre.js ではT関数で生成するオブジェクトを扱います。それぞれのオブジェクトにはプロパティが設定されてあり、 .hoge でアクセスすることができます。

var sin = T("sin");

sin.freq = 880;

console.log(sin.freq);

それ以外にプロパティにアクセスする方法として、 set, get メソッドがあります。

set (key, value) / set(dict)

set メソッドは Key-Value 形式でプロパティを設定できます。下記の例はすべて同じ動作をします。パフォーマンス的には上から良い順番です。

var sin = T("sin");

sin.freq = 880;
sin.set("freq", 880);
sin.set({freq:880});

T 関数の第二引数でオブジェクトの初期値を指定できますが、その際の動作はオブジェクト生成後に setメソッドを自動的に呼び出しています。つまり以下の二つは同じです。

var sin = T("sin", {freq:880});

// same as
var sin = T("sin").set({freq:880});

もう一つの機能

setKey にプロパティではなくメソッド名を指定した場合、 Value の値を引数にしてメソッドを呼び出します。有用な例は少ないですが、初期状態を簡潔に記述するのに便利です。

T("audio", {load:"/audio/hoge.wav"}).play();

// same as
var audio = T("audio");
audio.load("/audio/hoge.wav");
audio.play();

上記の例はオーディオファイルをロードします。SEE ALSO: T("audio")

補足

load メソッドは非同期処理でファイルの読み込み等の時間がかかります。最後の例では同期をとっていないため、以下のような動作となります。

  • load()
  • play() : 空のバッファを再生する
  • load 完了 : オーディオファイルの中身を再生する

オーディオのバッファを使用したり再生するタイミングを同期する場合は以下のようにコールバックを使用します。load が返すのは jQuery.Deferredpromise と同じようなもので、thenfail をつなげたり、jQuery.when の引数としてほかの Deferred と同期をとったりできます。pipe も使えますが動作が若干異なります(pipeで繋げた後のコールバック内の this が違う。直したいのだけどよく分からない。。)

T("audio").load("/audio/hoge.wav", function() {
  this.play();
});

// same as
T("audio").load("/audio/hoge.wav").then(function() {
  this.play();
});

get (key)

set と対になるように用意しましたが、使わないと思います。

var sin = T("sin", {freq:880});

console.log( sin.freq        ); // 普通、こっちを使う
console.log( sin.get("freq") ); // 内部で sin.freq を呼ぶので効率わるいです