音の鳴るブログ

鳴らないこともある

timbre.js の使い方メモ: timbre関数

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

その前に前回の記事でイベントエミッター用のインターフェイスに once(type, listener) を書き忘れていた。一回だけ実行するイベント(実行後削除される)を登録できます。

timbre.js は Ttimbre の2つのグローバル変数を使う。この二つは jQuery でいう $jQuery みたいな関係で、要は同じもので、オブジェクトを作るときは T それ以外は timbre と使い分けたら良いと思う。で、それが何をするのかという話。たいした話ではない。

T関数

オブジェクトを作るときは T関数 を使います。これは最初の引数でオブジェクトの種類を決めて、以降の引数でプロパティ値や入力オブジェクトを指定する。最初の引数以外はあとで変更できるので最初は無くてもよい。それでできたオブジェクトは Tオブジェクト と呼ぶことにする。最初の引数は typeof で以下のようになる。

T(Number)

格納している数値を出力するオブジェクトになる。

T(Boolean)

true のとき 1 、false のとき 0 を出力するオブジェクトになる。

T(Function)

bang() で実行するオブジェクトになる。 timbre.js の使い方メモ:bang メソッド

T(Array) / T(Object)

どうしようか迷っている

T(String)

あらかじめ登録してあるキー文字列のオブジェクトを生成する。

T(T-Object)

T関数にTオブジェクトを入力した場合、なにもせずそのまま返却します。

たとえば T("osc").freq のようにドキュメントにプロパティ欄で型が T-Object と記載されているものは、値をセットするときに T関数 をくぐるようになっているので、以下の二つは同じ意味になります。だからT関数にTオブジェクトを入力した場合、なにもせずそのまま返却します。なるほど~

T("osc").freq = 880;

T("osc").freq = T(880);

timbreのプロパティ

以下のプロパティがある、 amp 以外は読み取り専用。

timbre.version;     // バージョン
timbre.envtype;     // 'browser' or 'node'
timbre.env;         // 'webkit' or 'moz' or 'node'
timbre.samplerate;  // サンプルレート
timbre.channels;    // 2
timbre.cellsize;    // 1回の処理で扱うサンプル数
timbre.currentTime; // 経過時間
timbre.isPlaying;   // 再生中のとき true
timbre.isRecording; // 録音中のとき true
timbre.amp;         // 最終出力音量の調節 (0.8がデフォルト)

timbreの関数

timbre本体のイベントリスナー
  • timbre.on(type, listener)
  • timbre.once(type, listener)
  • timbre.removeListener(type, listener)
  • timbre.removeAllListener(type)

イベントの種類は play, pause, reset がある。

録音モード

録音モードは音を出さずに処理をするモードで、10秒分の音を出すと10秒かかるけど、音を出さなかったら一瞬で終わる。ドキュメント / デモ

  • timbre.rec()
時間関数

文字列定義の時間をミリ秒に変換する。使うとコードが凄く読みやすくなる。 ドキュメント

  • timbre.timevalue(String)
システム的な関数

たぶん使わないと思うけど、リセットしたり再生/停止したり。Flash経由で再生できるようにしたりする。

  • timbre.reset()
  • timbre.play()
  • timbre.pause()
  • timbre.bind()

いろいろ書いてみたけど、たいした情報じゃなかった気がする。

あと

timbre.setup で設定できると思っていたけど作っていなかったので、次回のアップデート(来月あたまくらい)で対応します。イコライザーとか追加する予定です。若干イベントの名称が変わると思います。すみません..

T("fft").on("fft")        -> T("fft").on("data")
T("spectrum").on("scope") -> T("spectrum").on("data")
T("scope").on("scope")    -> T("scope").on("data")