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

音の鳴るブログ

鳴らないこともある

音楽用CoffeeScriptを作ろう (11) スケールとチューニング

そろそろ疲れてきた。適当に作業したら失敗しそうなので、他に影響のなさそうなスケールとチューニングを実装した。色々なスケールで1up効果音的なのが無限に鳴る。

Demo - CoffeeScript

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 まわりを理解して取り入れる。