音の鳴るブログ

鳴らないこともある

CoffeeCollider と CoffeeScript の違うところ

昨日は CoffeeCollider と SuperCollider の細かい違いについて解説しました。今日は CoffeeScript との違いについて解説します。と、いっても根本的に違う点は少なくて SuperCollider のインターフェースに寄せていくつか実装している便利機能についてです。

今日のデモ、チリチリしたのが鳴ります。以下の記事とは関係うすいです。

CoffeeCollider demo/scratchy.coffee

演算子のオーバーロード

CoffeeScript/JavaScript は オブジェクト同士の加算や積算はできませんが、CoffeeCollider では四則演算のみ演算子をオーバーロードしており演算可能です。この機能によりたとえば複数の音を加算合成したり、音量の変化を積算で表現できて直感的な音作りができるようになっています。演算子の優先順位は JavaScript と同じです。

# 440Hz と 442Hz のサイン波を合成して再生する
(-> SinOsc.ar(440) + SinOsc.ar(442) ).play()

# 音量が徐々に上がる 880Hz のサイン波を再生する
(-> SinOsc.ar(880) * Line.kr(0, 1, dur:10) ).play()

音作り以外では配列操作にも使えます。非演算子がともに配列の場合は長い方に合わせて短い方を wrapping して演算します。修飾子をつけて非演算子の選択方法を指定することもできます。例えば *S* 演算子の場合、短い配列に合わせて shortening します。

[1...10] * 10               # [ 10, 20, 30, 40, 50, 60, 70, 80, 90 ] 
[1...10] * [ 1, 10, 100 ]   # [ 1, 20, 300, 4, 50, 600, 7, 80, 900 ] 
[1...10] *S* [ 1, 10, 100 ] # [ 1, 20, 300 ]

配列引数

メソッドの引数としてスカラ値(普通の数値とか)でなく配列を入力した場合、出力は各要素を評価した配列が返ります。これによって引数の一部のみが異なるオブジェクトを簡単に生成できます。ネストしている配列もOKです。

SinOsc.ar([440, 442])     # [ SinOsc.ar(440), SinOsc.ar(442) ]
[1..100].at([10, 20, 30]) # [ 11, 21, 31 ]
max([100, [200]] , 150)   # [ 150, [ 200 ] ]

デフォルト引数

引数を省略した場合、各メソッド毎に定義されているデフォルト引数が適用されます。

SinOsc.ar() # SinOsc.ar(440, 0, 1, 0) と同じ

名前つき引数

引数は順番に指定する以外に辞書形式で指定することができます。両方を組み合わせることも出来ます。以下の三行は同じ内容のオブジェクトを生成します。

SinOsc.ar(440, 0, 0.5, 0)
SinOsc.ar(440, mul:0.5)
SinOsc.ar(freq:440, phase:0, mul:0.5, add:0)

文字列風数値

ダブルクォーテーション文字列のうち特定のフォーマットのものはコンパイル時に数値に変換されます。これによって分かりやすいコードが書けます。先頭文字を ~ にすると周波数として変換します。 詳細

"bpm120 l4"  # テンポ120、4分音符の秒数 0.5 に変換される
"03:25.500"  # 3 * 60 + 25 + 0.5 -> 205.5
"~bpm120 l4" # 0.5秒周期の周波数 -> 2

CoffeeCollider勉強会

12/20(金) の SC名古屋にて CoffeeScript の勉強会があります。SuperCollider と CoffeeScript が同時に勉強できてお得です!!!!

http://connpass.com/event/4105/


これは大阪のうどんチェーン のらや のカレーうどんです。箸袋を大量に集めると写真にあるような猫の食器と交換してもらえます。

f:id:mohayonao:20131208180749j:plain