-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathmagpie.lua
130 lines (112 loc) · 2.64 KB
/
magpie.lua
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
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
-- Magpie
-- modulated note echo for
-- midi and cv
--
-- no keys or encoders
-- only signal and params
local Display = include('lib/display')
local Inputs = include('lib/inputs')
local Lfos = include('lib/lfos')
local Outputs = include('lib/outputs')
local Parameters = include('lib/parameters')
local Relayer = include('lib/relayer')
local display = nil
local emitters = nil
local inputs = nil
local lfos = nil
local midi_connections = nil
local midi_devices = nil
local observable = require('container.observable')
local outputs = nil
local parameters = nil
local relayer = nil
local shift = false
local function midi_panic()
for note = 0, 127 do
for ch = 1, 16 do
for _, connection in pairs(midi_connections) do
connection:note_off(note, 0, ch)
end
end
end
end
local function init_display(emitters)
display = Display:new()
display:init(emitters)
end
local function init_emitters()
emitters = {}
end
local function init_inputs()
emitters.input = observable.new()
inputs = Inputs:new()
inputs:init(emitters.input, midi_connections)
end
local function init_lfos()
lfos = Lfos:new()
lfos:init()
end
local function init_midi()
midi_connections, midi_devices = {}, {}
for i = 1, #midi.vports do
if midi.vports[i].name ~= 'none' then
local device = midi.vports[i].device
if device then
midi_devices[i] = {name = device.name, port = device.port}
table.insert(midi_connections, midi.connect(device.port))
end
end
end
end
local function init_outputs()
emitters.output = observable.new()
outputs = Outputs:new()
outputs:init(emitters.output, midi_connections)
end
local function init_parameters()
parameters = Parameters:new()
parameters:init(lfos:get('list'), midi_devices, midi_panic)
end
local function init_relayer()
relayer = Relayer:new()
end
local function init_subscribers()
emitters.input:register('relayer_process', function(e)
local message = e[1]
local input_id = e[2]
local lfo_state = lfos:poll(input_id)
relayer:process(message, input_id, lfo_state, parameters:get('destinations'), outputs)
end)
emitters.output:register('output_test', function(message) test_message = message end)
end
function init()
init_midi()
init_emitters()
init_inputs()
init_lfos()
init_outputs()
init_parameters()
init_relayer()
init_subscribers()
init_display(emitters)
end
function enc(e, d)
end
function key(k, z)
if k == 1 then
if z == 1 then
shift = true
else
shift = false
end
end
end
function redraw()
screen.clear()
parameters:refresh(lfos)
display:render()
screen.update()
end
function refresh()
redraw()
end