のぶLab.

流しのソフトウェアエンジニアの雑記帳. Android, Scala, Clojure, Ruby on Railsなど

Overtoneで音楽をコーディング時の指針メモ

Overtoneで音楽を鳴らして遊んでいるときにコーディングに関して感じたことのメモ

Overtoneのチュートリアルにあるswingerメソッドはat関数を何度も書いていて冗長

(defn swinger [beat]
  (at (metro beat) (o-hat))
  (at (metro (inc beat)) (c-hat))
  (at (metro (+ 1.65 beat)) (c-hat))
  (apply-at (metro (+ 2 beat)) #'swinger (+ 2 beat) []))

Swing · overtone/overtone Wiki · GitHub

音の進行をコレクションで表現し、その要素に対して関数を作用させて演奏させられるとスマート。 例えば"音の長さ", "音"のvectorを要素とするリスト(..., [nome, sound], ...)に 別のチュートリアルにあるlooperメソッドのようなものを作用させるなど

(defn looper [nome sound]    
    (let [beat (nome)]
        (at (nome beat) (sound))
        (apply-by (nome (inc beat)) looper nome sound [])))

Metronome and sequencing · overtone/overtone Wiki · GitHub

また、視点をもう一つ高くして、Aメロ,Bメロ, サビなどのまとまりに作用させる関数を用意するとよりスマートになりそう。