blob: 43a3df008b021734478c9a643b7a5474b1f24767 (
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
42
43
44
45
46
47
48
|
(ns scratch
(:require [midi :refer [print-all-midi-devices >bus <bus] :as midi]
[missionary.core :as m])
(:import [javax.sound.midi MidiSystem Receiver ShortMessage MidiDevice$Info MidiDevice Transmitter MidiMessage]))
#_(print-all-midi-devices)
(def midi-keyboard "CoreMIDI4J - Minilab3 MIDI")
(def run
(<bus
midi-keyboard
#_(fn [f] (m/ap
(let [[i]]
(m/group-by #(.getCh %)))
(println (m/?< f))))
(fn [f]
(m/ap
(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))
(cancel)
|