Fix the bugs, fully implement performance

This commit is contained in:
Jeremy Dormitzer 2018-08-15 07:50:24 -04:00
parent 489741d3ed
commit b1c47cbd73

View File

@ -101,7 +101,7 @@
:volume 50 ;; volume of performance :volume 50 ;; volume of performance
:key [:C :major]}) ;; current key signature :key [:C :major]}) ;; current key signature
(defn merge-perfs ;; TODO what if p1 and p2 are single notes? (defn merge-perfs
"Merges two performances" "Merges two performances"
[p1 p2] [p1 p2]
(if (nil? (seq p1)) (if (nil? (seq p1))
@ -119,26 +119,33 @@
(defn perf (defn perf
"Implementation of perform, returns a tuple of (performance, duration)" "Implementation of perform, returns a tuple of (performance, duration)"
[player-map context music] [player-map context music]
(let [{:keys [player duration-t]} context] (let [{:keys [player duration-t time]} context]
(match music (match music
{:duration duration {:duration duration
:pitch pitch} [((:play-note player) :pitch pitch} [[((:play-note player)
context context
music) music)]
(* duration duration-t)] (* duration duration-t)]
{:duration duration} [[] (* duration duration-t)] {:duration duration} [[] (* duration duration-t)]
[:+ & ms] (reduce (fn [[events-acc dur-acc] m] [:+ & ms] (let [[{events :events} dur]
(let [[events dur] (perf player-map (reduce (fn [[{events-acc :events time-acc :time} dur-acc] m]
context (let [[events dur]
(perf player-map
(assoc context
:time
(+ (:time context) time-acc))
m)] m)]
[(concat events-acc events) [{:events (concat events-acc events)
:time (+ time-acc dur)}
(+ dur-acc dur)])) (+ dur-acc dur)]))
[[] 0] [{:events [] :time time} 0]
ms) ms)]
[events dur])
[:= & ms] (reduce (fn [[merged-events max-dur] m] [:= & ms] (reduce (fn [[merged-events max-dur] m]
(let [[events dur] (perf player-map (let [[events dur] (perf player-map
context context
m)] m)]
(prn events)
[(merge-perfs merged-events events) [(merge-perfs merged-events events)
(max max-dur dur)])) (max max-dur dur)]))
[[] 0] [[] 0]