-
Notifications
You must be signed in to change notification settings - Fork 0
/
output.gleam
72 lines (59 loc) · 1.63 KB
/
output.gleam
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
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
import gleam/javascript/promise
import webmidi
import webmidi/internal
import webmidi/port
pub type Exception {
TypeError(message: String)
InvalidAccessError
InvalidStateError
}
@external(javascript, "../ffi_webmidi.mjs", "send")
pub fn send(
output: webmidi.MidiOutput,
data: List(Int),
) -> Result(Nil, Exception)
pub fn clear(output: webmidi.MidiOutput) {
internal.attr(output, "clear")()
}
pub fn id(port: webmidi.MidiOutput) -> String {
internal.attr(port, "id")
}
pub fn manufacturer(port: webmidi.MidiOutput) -> String {
internal.attr(port, "manufacturer")
}
pub fn name(port: webmidi.MidiOutput) -> String {
internal.attr(port, "name")
}
pub fn type_(port: webmidi.MidiOutput) -> port.Type {
case internal.attr(port, "type") {
"input" -> port.Input
"output" | _ -> port.Output
}
}
pub fn version(port: webmidi.MidiOutput) -> String {
internal.attr(port, "version")
}
pub fn state(port: webmidi.MidiOutput) -> port.State {
case internal.attr(port, "state") {
"disconnected" -> port.Disconnected
"connected" | _ -> port.Connected
}
}
pub fn connection(port: webmidi.MidiOutput) -> port.Connection {
case internal.attr(port, "connection") {
"open" -> port.Open
"closed" -> port.Closed
"pending" | _ -> port.Pending
}
}
pub fn open(port: webmidi.MidiOutput) -> promise.Promise(Nil) {
internal.attr(port, "open")()
}
pub fn closed(port: webmidi.MidiOutput) -> promise.Promise(Nil) {
internal.attr(port, "closed")()
}
@external(javascript, "../ffi_webmidi.mjs", "on_state_change")
pub fn on_state_change(
port: webmidi.MidiOutput,
func: fn(webmidi.ConnectionEvent) -> Nil,
) -> Nil