blob: 63d54a3360697b92095730b1a4df005393aa6359 (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
|
(ns scratch
(:require [midi :refer [print-all-midi-devices >bus <bus] :as midi]
[missionary.core :as m])
(:import [javax.sound.midi ShortMessage]))
#_(print-all-midi-devices)
(def midi-keyboard "CoreMIDI4J - Minilab3 MIDI")
(def run
(<bus
midi-keyboard
(fn [f]
(m/ap
(let [[ch ch-messages]
(m/?> 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)
|