diff options
| author | Jake Zerrer <him@jakezerrer.com> | 2025-11-05 13:29:12 -0500 |
|---|---|---|
| committer | Jake Zerrer <him@jakezerrer.com> | 2025-11-05 14:07:14 -0500 |
| commit | 4ae6bfb0746fc22fd48ad3a9f37ee50fa6ad0bb9 (patch) | |
| tree | 1b130cda0eb50ed0751e92e9a813232446d7af46 /src/scratch.clj | |
| parent | bc14d6a631a6305ae1647c7e45f98af35930052b (diff) | |
WIP composing note bits
Diffstat (limited to 'src/scratch.clj')
| -rw-r--r-- | src/scratch.clj | 50 |
1 files changed, 31 insertions, 19 deletions
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 <bus] :as midi] - [missionary.core :as m])) + [missionary.core :as m]) + + (:import [javax.sound.midi MidiSystem Receiver ShortMessage MidiDevice$Info MidiDevice Transmitter MidiMessage])) #_(print-all-midi-devices) @@ -9,26 +11,36 @@ (def run (<bus midi-keyboard - #_ - (fn [f] (m/ap - (let [[i] ] - (m/group-by #(.getCh %) )) - (println (m/?< f)))) + #_(fn [f] (m/ap + (let [[i]] + (m/group-by #(.getCh %))) + (println (m/?< f)))) (fn [f] (m/ap - (let [[ch vs] - (m/?> 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)) |
