From 4ae6bfb0746fc22fd48ad3a9f37ee50fa6ad0bb9 Mon Sep 17 00:00:00 2001 From: Jake Zerrer Date: Wed, 5 Nov 2025 13:29:12 -0500 Subject: WIP composing note bits --- src/midi.clj | 14 +++++++++++++- src/scratch.clj | 50 +++++++++++++++++++++++++++++++------------------- 2 files changed, 44 insertions(+), 20 deletions(-) (limited to 'src') diff --git a/src/midi.clj b/src/midi.clj index bfe075e..6aace8f 100644 --- a/src/midi.clj +++ b/src/midi.clj @@ -153,7 +153,7 @@ (fn [d] (with-tx d (fn [f] - (m/reduce {} nil (flow-handler f)))))))) + (m/reduce prn nil (flow-handler f)))))))) (defn echo "Echo test." @@ -233,6 +233,18 @@ [>messages] (m/group-by #(.getChannel ^ShortMessage %) >messages)) +(defn |notes + [>messages] + (m/group-by #(.getData1 ^ShortMessage %) >messages + #_ + (m/ap + (let [^ShortMessage v (m/?< >messages)] + (println "V" v) + (if (#{ShortMessage/NOTE_ON ShortMessage/NOTE_OFF} (.getCommand v)) + v + (m/amb)))))) + + #_(defn >ch-stream [>device ch] (m/cp (m/?< (second (get >device ch))))) diff --git a/src/scratch.clj b/src/scratch.clj index 77eb609..43a3df0 100644 --- a/src/scratch.clj +++ b/src/scratch.clj @@ -1,6 +1,8 @@ (ns scratch (:require [midi :refer [print-all-midi-devices >bus 128 (midi/|channels (midi/|short-messages f)))] - (println "CH" ch (m/?< vs))) - #_ - (let [[ch >ch-messages] - (m/?> 128 (midi/|channels (midi/|short-messages f))) - #_#_ - [note >note-messages] - (m/?> 128 (midi/|notes >ch-messages))] - (println "CH" ch) - #_#_ - (println "HELLO") - [ch note (m/?< >note-messages)]))))) + (let [[ch ch-messages] + (m/?> 128 (midi/|channels (midi/|short-messages f))) + [note note-messages] (m/?> 128 (midi/|notes ch-messages))] + (println + [ch note + (m/?< + (m/relieve + (m/reductions + (fn [_prev curr] + (when (some? curr) + (cond + (= (.getCommand ^ShortMessage curr) ShortMessage/NOTE_ON) + (.getData2 ^ShortMessage curr) + (= (.getCommand ^ShortMessage curr) ShortMessage/POLY_PRESSURE) + (.getData2 ^ShortMessage curr) + (= (.getCommand ^ShortMessage curr) ShortMessage/NOTE_OFF) + nil))) nil note-messages)))])) + #_(let [[ch >ch-messages] + (m/?> 128 (midi/|channels (midi/|short-messages f))) + #_#_[note >note-messages] + (m/?> 128 (midi/|notes >ch-messages))] + (println "CH" ch) + #_#_(println "HELLO") + [ch note (m/?< >note-messages)]))))) (def cancel (run prn prn)) -- cgit v1.2.3