summaryrefslogtreecommitdiff
path: root/src/scratch.clj
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)