   [{midi :pitch seconds :duration}]
   (some-> midi midi->hz (overchauffeur seconds 1500)))
 
+(def godel (sample "samples/godel.wav"))
+(def escher (sample "samples/escher.wav"))
+(def bach (sample "samples/bach.wav"))
+
 (defn book [initial]
-  (({\G (sample "samples/godel.wav")
-     \E (sample "samples/escher.wav")
-     \B (sample "samples/bach.wav")}
+  (({\G godel
+     \E escher
+     \B bach}
     initial)))
 
 (defmethod live/play-note :sample

  (let [theme (->> "GEB"
                   (map coding/char->ascii)
                   (phrase [4 4 8])
                   (canon #(->> %
                                (where :pitch coding/ascii->midi)
                                ;(with (->> % (where :pitch char) (all :part :sample)))
                                )))
        bass (phrase [4 4 8] [-2 -1 0])
        bass2 (phrase (repeat 4 4) (cycle [3 0]))
        decoration (phrase (repeat 64 1/4) (cycle [7 8 9 11 7 6]))
        riff (->> [-2 -1 0 0]
                  (mapthen #(->> (phrase (repeat 7 1/2)
                                         (interleave [[0 2] [0 2] [0 3] [0 2]]
                                                     (repeat -3)))
                                 (where :pitch (from %))))
                  (then (phrase (repeat 4 1/2) (interleave [[0 3] [0 2]] (repeat -3)))))
        twiddle (with (phrase (repeat 32 1/2) (cycle [4 2 2 0 -1])) (phrase (repeat 64 1/4) (cycle [4 2 5 4 5 4 7 7])))]
    (->> bass
         (where :pitch (comp lower lower))
         ;(with twiddle)
         ;(with decoration)
         ;(with riff)
         (where :pitch (comp B minor))
         (with theme)
         (tempo (bpm 90)))))

(comment

  (volume 0.8)
  (live/jam (var geb))
  (def geb nil)

  (do (recording-start "geb.wav")
      (live/play geb))
  (recording-stop))

; Instrumentation
(definst overchauffeur [freq 110 dur 1.0 top 1500 vol 0.25]
