読者です 読者をやめる 読者になる 読者になる

音の鳴るブログ

鳴らないこともある

はじめてのCoffeeCollider

CoffeeCollider の基本の「き」の最初の一画目という感じで説明します。内容的には SuperCollider の基本といっても良いです。

以下のコードはデモページで試すことができます。

サイン波

まず手始めにサイン波を鳴らしましょう。デモページに以下のコードを貼り付けて "Boot" と "Run" を押すと 440Hzのサイン波がピーッと鳴ります。止めるには "Reset" を押して下さい。

# 440Hzのサイン波
(-> SinOsc.ar(440) ).play()

このように関数を play() すると、それが評価されて最後の値(戻り値)の音が鳴ります。この場合は サイン波のオブジェクト(SinOsc)が生成されて音が鳴ります。440の部分を変更すると音の高さが変ります。

引数は名前で指定することも出来ます。以下のコードは最初のものと同じです。便利ですね。

# 440Hzのサイン波
(-> SinOsc.ar(freq:440) ).play()

どういうオブジェクトがあって、どういう引数を取るのかはドキュメントを参照してください。

マルチチャネル

最初の例はモノラルでした、ステレオにしたい場合は戻り値を配列にします。

# 440Hzと442Hzのステレオ
(-> [ SinOsc.ar(440), SinOsc.ar(442) ] ).play()

無駄の多いコードになってしまいましたが、もっと簡単に書けます。

# 440Hzと442Hz のステレオ
(-> SinOsc.ar([440, 442]) ).play()

このようにUGenの引数を配列にすると、展開されて複数のUGenの配列が返ります。これもなかなか便利ですね。

ネスティング

UGenの引数には別のUGenを渡せます。以下のコードでは SinOsc の周波数に LFNoise0 オブジェクトを渡しています。

# 1秒ごとに周波数が変わる
(-> 
  freq = LFNoise0.kr(freq:1, mul:440, add:880)
  SinOsc.ar(freq) 
).play()

引数の mul, add というのは出力値を積算、加算するのに良く使われる引数です。LFNoise0 は 指定された周波数の間隔で 0 から 1 を出力します、それに mul の値で積算、add の値を加算したものが最終的な出力(880から1320の間)になります。

もちろん1行で書くこともできます。

# 1秒ごとに周波数が変わる
(-> SinOsc.ar(LFNoise0.kr(1, 440, 880)) ).play()

演算子のオーバーロード

上記コードをステレオにするには以下のように修正します。

# 1秒ごとに周波数が変わる(ステレオ版)
(->
  freq = LFNoise0.kr(freq:1, mul:440, add:880)
  SinOsc.ar([freq, freq * 1.005])
).play()

CoffeeColliderでは四則演算子をオーバーロードしており、このように UGen の出力値を四則演算で調整することができます。上記コードだと 1秒ごとに変る周波数 と それよりちょっと高い周波数 のステレオになります。

左右でばらばらに動かしたい場合はこんな感じですね。

# 1秒ごとに周波数が変わる(ステレオばらばら版)
(->
  freq = LFNoise0.kr(freq:[1, 1], mul:440, add:880)
  SinOsc.ar(freq)
).play()

ar とか kr とか

最後にオブジェクトの生成のときに出てくる arkr についてざっくり説明します。前者をオーディオレート、後者をコントロールレートと言い計算量の指定に使います。ar は 1サンプルずつ計算をし、kr は128サンプル単位で計算します(SuperColliderは64サンプル単位)。単純な使いわけだと、実際に音になる部分は ar、それ以外は kr という感じです。

もっと複雑な例

こういうのを組み合わせることで以下のような複雑な音を作ることができます。 http://mohayonao.github.io/CoffeeCollider/#thinking.coffee

20行足らずでこういう音が作れるというのは結構面白いですね!!!

CoffeeCollider勉強会

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

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


これはなんば(大阪)にあるアーリオ・オーリオというカレー屋さんの、薬膳カレーと米みそとうふカレーのあいがけです。後味が薬膳ぽくてさわやかだった。

f:id:mohayonao:20131213113836j:plain

http://tabelog.com/osaka/A2702/A270202/27062001/