1
1
package baaahs.midi
2
2
3
3
import baaahs.util.Logger
4
+ import external.midi.MIDIAccess
5
+ import external.midi.MIDIInput
6
+ import web.navigator.navigator
4
7
5
8
class BrowserMidiDevices : MidiDevices {
6
- // private val midiAccess = window.navigator.requestMIDIAccess()
7
- private val transmitters = mutableMapOf<String , MidiTransmitter >()
9
+ private lateinit var midiAccess: MIDIAccess ;
10
+
11
+ init {
12
+ navigator.asDynamic().requestMIDIAccess().then {midiAccessResult: MIDIAccess ->
13
+ midiAccess = midiAccessResult
14
+ midiAccessResult
15
+ }
16
+ }
8
17
9
18
override suspend fun listTransmitters (): List <MidiTransmitter > {
10
19
val ids = mutableMapOf<String , Counter >()
11
20
21
+
12
22
return buildList {
13
- // MidiSystem.getMidiDeviceInfo().mapNotNull { info ->
14
- // println("${info.name}: ${info.javaClass.simpleName}\n DESC=${info.description}\n VENDOR=${info.vendor}\n VERSION=${info.version}")
15
- // val device = MidiSystem.getMidiDevice(info )
16
- // val id = info .name.let {
23
+ // midiAccess.inputs.forEach { inputEntry ->
24
+ // val input = inputEntry.value
25
+ // println("${input.name}: DESC=${input.description}\n VENDOR=${input.manufacturer}\n VERSION=${input.version}" )
26
+ // val id = input .name.let {
17
27
// val idNum = ids.getOrPut(it) { Counter() }.count()
18
28
// if (idNum == 0) it else "it #$idNum"
19
29
// }
20
30
//
21
- // val maxTransmitters = device.maxTransmitters
22
- // if (maxTransmitters == -1 || maxTransmitters > 0) {
23
- // add(JvmMidiTransmitterTransmitter(id, device))
24
- // }
31
+ // add(JsMidiTransmitterTransmitter(id, input))
25
32
// }
26
33
}
27
34
}
28
35
29
- // class JvmMidiTransmitterTransmitter (
30
- // override val id: String,
31
- // private val device: MidiDevice
32
- // ) : MidiTransmitter {
33
- // override val name: String
34
- // get() = device.deviceInfo .name
35
- // override val vendor: String
36
- // get() = device.deviceInfo.vendor
37
- // override val description: String
38
- // get() = device.deviceInfo.description
39
- // override val version: String
40
- // get() = device.deviceInfo .version
41
- //
36
+ class JsMidiTransmitterTransmitter (
37
+ override val id : String ,
38
+ private val input : MIDIInput
39
+ ) : MidiTransmitter {
40
+ override val name: String
41
+ get() = input .name
42
+ override val vendor: String
43
+ get() = input.manufacturer
44
+ override val description: String
45
+ get() = " "
46
+ override val version: String
47
+ get() = input .version
48
+
42
49
// private var transmitter: Transmitter? = null
43
- //
44
- // override fun listen(callback: (MidiMessage) -> Unit) {
50
+
51
+ override fun listen (callback : (MidiMessage ) -> Unit ) {
45
52
// if (transmitter == null) {
46
53
// transmitter = run {
47
- // device.transmitter.also { device. open() }
54
+ // input. open()
48
55
// }
49
56
// }
50
- //
57
+
51
58
// transmitter!!.receiver = object : Receiver {
52
59
// override fun close() {
53
60
// logger.debug { "$name closed." }
@@ -67,16 +74,16 @@ class BrowserMidiDevices : MidiDevices {
67
74
// }
68
75
// }
69
76
// }
70
- // }
71
- //
72
- // override fun close() {
77
+ }
78
+
79
+ override fun close () {
73
80
// if (transmitter != null) {
74
- // device .close()
81
+ // input .close()
75
82
// }
76
- // logger.debug { "$name closed." }
77
- // }
78
- //
79
- // }
83
+ logger.debug { " $name closed." }
84
+ }
85
+
86
+ }
80
87
81
88
private class Counter (var value : Int = 0 ) {
82
89
fun count (): Int = value++
0 commit comments