音の鳴るブログ

鳴らないこともある

サウンドプログラミング用のJavaScriptライブラリをつくっている

アイデア

例えば Cメジャー のコードは ド ミ ソ で構成される。

和音は加算で書けるので、

ド + ミ + ソ

これを、lispよろしくこう記述する。

(+ ド ミ ソ)

 

ドっていうのは、

(sin 523.25)

みたいな感じで、523Hzのサイン波 みたいな感じ。位相や振幅も指定できるけど省略している。音色は sin でなくて tri とか saw とかでも良いし、サンプリングした音でも良い。

 

ピアノみたいな減衰音は、

(adsr 0 1000)

こう書くとする。ADSRエンベロープで Attack が 0msec、Decay が 1000msec、Sustain と Release は省略。この場合、1000ミリ秒で減衰する。

 

振幅はかけ算で書けるので、さっきのコードと合わせて書くと

(* (+ ド ミ ソ)
   (adsr 0 1000))

こう書ける。

 

詳細に書くなら

(* (+ (sin 523.25)
      (sin 659.25)
      (sin 783.99))
   (adsr 0 1000))

これを演奏すると、1秒で減衰するドミソの和音が鳴る。

 

カッコに括られているものは信号処理オブジェクトで、実行時に繰り返し評価されて信号処理を行う。変数に代入してプロパティを変更したりできるし、なんらかのメソッドを実行できる。lisp風ではなくなってきた。

s = (sin 440)
s.freq = 880
s.off().bang().set("phase", 0.25)

 

最初は、Max/MSP のように信号処理をするオブジェクトをグラフとして扱い、 lisp のように記述するって考えていたけど、 SuperCollider の亜種でしかない気もする。どれもチュートリアル程度しか知らないので何とも言えない。

 

timbre

まぁ、そういうアイデアがあって JavaScript のライブラリを作っている。名前を timbre (ティンバー)ってしたのだけど、字面が tumblr っぽすぎて失敗したかもしれない。インターフェイスを見直したりしながら何回か書き直していている。

JavaScript なので制御的な部分は簡単に書けるし、Webコンソールを使ってライブコーディングしながら演奏できる。node.js でも動かせる(予定)。WebSocketを使ってデータを飛ばせるとかも面白い(予定)。最終的には emacs で C-x C-e とかしたら評価されて音が鳴るみたいになれば面白いと思う。

 

少しのデモ
http://mohayonao.github.com/timbre/examples/001_oscillators.html

 

GitHub
https://github.com/mohayonao/timbre