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
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
|
import Op, Constant, Input, sig, evt from require 'alv.base'
import udp from require 'socket'
local conn
hex = "0123456789abcdef"
encode = (arg) ->
switch type arg
when 'number' then
i = 1 + math.floor arg
hex\sub i, i
when 'string' then arg
else error "invalid type: #{type arg}"
send = (...) ->
str = ''
for i = 1, select '#', ...
tbl = select i, ...
str ..= table.concat [encode v for v in *tbl]
conn or= udp!
conn\sendto str, '127.0.0.1', 49161
arg = sig.num / sig.str
play = Constant.meta
meta:
name: 'play'
summary: "Play a note when a bang arrives."
examples: { '(pilot/play trig ch oct note [vel [len]])' }
value: class extends Op
pattern = evt.bang + arg^5
setup: (inputs) =>
{ trig, args } = pattern\match inputs
super
trig: Input.hot trig
args: [Input.cold a for a in *args]
tick: =>
send @unwrap_all!.args
play_ = Constant.meta
meta:
name: 'play!'
summary: "Play a note when a note arrives."
examples: { '(pilot/play! ch oct note [vel [len]])' }
value: class extends Op
pattern = arg + arg + (evt.num / evt.str) + arg^2
setup: (inputs) =>
{ chan, octv, note, args } = pattern\match inputs
super
chan: Input.cold chan
octv: Input.cold octv
note: Input.hot note
args: [Input.cold a for a in *args]
tick: =>
{ :chan, :octv, :note, :args } = @inputs
args = for a in *args do a!
for note in *note!
send { chan!, octv!, note }, args
effect = Constant.meta
meta:
name: 'effect'
summary: "Set effect parameters."
examples: { '(pilot/effect which a b)' }
description: "`effect` should be one of 'DIS', 'CHO', 'REV' or 'FEE'"
value: class extends Op
pattern = sig.str + arg + arg
setup: (inputs) =>
{ which, a, b } = pattern\match inputs
super {
Input.hot which
Input.hot a
Input.hot b
}
tick: =>
send @unwrap_all!
Constant.meta
meta:
name: 'pilot'
summary: "Pilot integration."
value:
:play
'play!': play_
:effect
|