Fork me on GitHub
#overtone
<
2016-02-05
>
kodnin11:02:59

I have a problem getting Overtone to correctly play MIDI events. When I load Overtone and define play-note it works as expected.

(use 'overtone.live)

(def piano-device
  (first (midi-connected-receivers)))

(defn play-note [dev x]
  (midi-note dev x 100 500))

(play-note piano-device 60)
However, if I want to schedule MIDI events into the future by defining play-melody, it will play them immediately (all at once), instead of at the specified beats.
(def one-twenty (metronome 120))

(defn play-melody [m]
  (let [beat (m)]
    (at (m beat) (play-note piano-device 60))
    (at (m (+ beat 1)) (play-note piano-device 63))
    (at (m (+ beat 2)) (play-note piano-device 67))
    (at (m (+ beat 3)) (play-note piano-device 58))))

(play-melody one-twenty)
I have tried to use anonymous functions (wrapping them in fn) instead of calling play-note within play-melody, but I couldn't get it to work. Anyone care to help me out?