diff options
Diffstat (limited to 'src/midi.clj')
| -rw-r--r-- | src/midi.clj | 25 |
1 files changed, 20 insertions, 5 deletions
diff --git a/src/midi.clj b/src/midi.clj index 6aace8f..e63f811 100644 --- a/src/midi.clj +++ b/src/midi.clj @@ -233,17 +233,32 @@ [>messages] (m/group-by #(.getChannel ^ShortMessage %) >messages)) +(def note-commands + #{ShortMessage/NOTE_OFF + ShortMessage/NOTE_ON + ShortMessage/POLY_PRESSURE}) + (defn |notes [>messages] - (m/group-by #(.getData1 ^ShortMessage %) >messages - #_ + (m/group-by #(.getData1 ^ShortMessage %) (m/ap - (let [^ShortMessage v (m/?< >messages)] - (println "V" v) - (if (#{ShortMessage/NOTE_ON ShortMessage/NOTE_OFF} (.getCommand v)) + (let [^ShortMessage v (m/?> >messages)] + (if (contains? note-commands (.getCommand v)) v (m/amb)))))) +(def control-commands + #{ShortMessage/CONTROL_CHANGE}) + +;; TODO: |control-changes and |notes combine grouping and filtering, which isn't great +(defn |control-changes + [>messages] + (m/group-by #(.getData1 ^ShortMessage %) + (m/ap + (let [^ShortMessage v (m/?> >messages)] + (if (contains? control-commands (.getCommand v)) + v + (m/amb)))))) #_(defn >ch-stream [>device ch] (m/cp (m/?< (second (get >device ch))))) |
