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});
もう一つの機能
set
の Key
にプロパティではなくメソッド名を指定した場合、 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.Deferred
の promise
と同じようなもので、then
や fail
をつなげたり、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 を呼ぶので効率わるいです