音楽用CoffeeScriptを作ろう (11) スケールとチューニング
そろそろ疲れてきた。適当に作業したら失敗しそうなので、他に影響のなさそうなスケールとチューニングを実装した。色々なスケールで1up効果音的なのが無限に鳴る。
def = Synth.def (freq)-> amp = Line.kr(1, 0, dur:1.5, doneAction:2) mod = SinOsc.ar(freq * 7, mul:0.8) Out.ar(0, SinOsc.ar(freq, phase:mod, mul:0.25) * amp) Task.loop -> scale = Scale.choose() # Scale.major / Scale.minor とかできる synth = def.play() console.log scale.name Task.each [2,4,9,7,8,9], (degree)-> freq = scale.degreeToFreq degree, 1046.50 synth.set freq:freq @wait 150 .play() @wait 1000 .play()
スケールはコメントにある感じで指定できる。choose()は適当に選ぶ。指定できるスケールは大量にあってここに書いた。Scale.iwato
, Scale.diminished
とか分かりやすい。
https://github.com/mohayonao/CoffeeCollider/wiki/Scale
GitHub Wiki に書いたら次の日には実現していてなかなか便利。
他、基本型のプロトタイプを直接拡張していたのを defineProperty を使うように修正。 循環requireを避けるために分散していたコードをまとめた。 どうにもやる気が出ないけど、適当にがんばって SuperCollider の Stream まわりを理解して取り入れる。