(ns scratch (:require [midi :refer [print-all-midi-devices >bus 128 (midi/|channels (midi/|short-messages (m/stream f)))) ch-messages (m/stream ch-messages)] (println (m/amb= (let [[note note-messages] (m/?> 128 (midi/|notes ch-messages))] [:key 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 [[control-number control-messages] (m/?> 128 (midi/|control-changes ch-messages))] [:control ch control-number (.getData2 ^ShortMessage (m/?< control-messages))])))))))) (def cancel (run prn prn)) (cancel)