音の鳴るブログ

鳴らないこともある

音楽用CoffeeScriptを作ろう (6) 音がでた


2013/10/15追記 global.def を Synth.def に変更した。


やっと音が出るようになった。

CoffeeCollider

x = Synth.def ->
  osc = SinOsc.ar(MouseY.kr(1760, 440, "exponential"))
  Out.ar(0, osc * 0.8)

x.play()

[Run] と [Play] でサイン波がなる。使えるクラスがサイン波、マウスカーソル、マウスボタン、四則演算しかないのでマウスの上下で音の高さを変えることくらいしかできない。

音を出すのは SuperCollider のインターフェースを参考というかそのまま借用して、 def 関数でシンセサイザーの定義を作ってそれを play する。SuperCollider と異なるのは定義に名前をつけて名前で参照するみたいなのは無くして変数に代入して使うしかない。

def というのはグローバルな関数なんだけど、一回上書きしてしまうと二度と(デモの場合はリロードするまで)使えなくなることに今気がついた。対策としてはコードを eval する毎に global.def を設定するっていうのが考えられる。

def 以外にもクラス(上の例でいうと SinOsc とか)や関数とかライブラリ替わりのグローバル関数を大量に用意するつもりだったけど、関数なんかは underscore みたいな感じにしたほうが良いかもしれない。