/
__init__.py
141 lines (109 loc) · 3.53 KB
/
__init__.py
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
131
132
133
134
135
136
137
138
139
140
141
"""
- checkout Launchkey/SessionNavigationComponent.py for scene/track scrolling
"""
from __future__ import with_statement
import Live
from _Framework.ButtonElement import ButtonElement
from _Framework.DeviceComponent import DeviceComponent
# from _Framework.ButtonMatrixElement import ButtonMatrixElement
# from _Framework.ChannelStripComponent import ChannelStripComponent
from _Framework.ControlSurface import OptimizedControlSurface
from _Framework.EncoderElement import EncoderElement
# from _Framework.Layer import Layer
# from _Framework.MixerComponent import MixerComponent
# from _Framework.SessionComponent import SessionComponent
# from _Framework.SliderElement import SliderElement
# from _Framework.TransportComponent import TransportComponent
from _Generic.SpecialMixerComponent import SpecialMixerComponent
from _Framework.InputControlElement import (
MIDI_CC_TYPE,
MIDI_NOTE_TYPE,
)
CHANNEL = 14
TRACKS = 4
SCENES = 4
MAP_MODE = Live.MidiMap.MapMode
class Note(ButtonElement):
channel = CHANNEL
def __init__(self, identifier):
ButtonElement.__init__(
self,
momentary=True,
msg_type=MIDI_NOTE_TYPE,
channel=self.channel,
identifier=identifier)
class Encoder(EncoderElement):
channel = CHANNEL
map_mode = MAP_MODE.absolute
def __init__(self, identifier):
EncoderElement.__init__(
self,
msg_type=MIDI_CC_TYPE,
channel=self.channel,
identifier=identifier,
map_mode=self.map_mode)
class Mixer(SpecialMixerComponent):
tracks = TRACKS
name = 'Mixer'
def __init__(self):
SpecialMixerComponent.__init__(
self,
self.tracks)
self.strips()
def strips(self):
for track in range(self.tracks):
self.strip(track)
def strip(self, track):
strip = self.channel_strip(track)
strip.name = "Channel_Strip_%d" % track
fader = VolumeFader(track)
strip.set_volume_control(fader)
return strip
class VolumeFader(Encoder):
ccs = [16, 17, 18, 19]
def __init__(self, index):
Encoder.__init__(
self,
self.ccs[index])
self.name = "Volume_Fader_%d" % index
class Device(DeviceComponent):
name = 'Device_Component'
rows = 2
columns = 4
def __init__(self):
DeviceComponent.__init__(
self)
parameter_controls = list(self.parameter_controls())
self.set_parameter_controls(parameter_controls)
def parameter_controls(self):
for row in range(self.rows):
for column in range(self.columns):
yield ParameterEncoder(row, column)
class ParameterEncoder(Encoder):
ccs = [
# Reserve the top row.
# [4, 5, 6, 7],
[8, 9, 10, 11],
[12, 13, 14, 15],
]
def __init__(self, row, index):
Encoder.__init__(
self,
self.ccs[row][index])
x = index + 1
y = row + 1
self.parameter = x * y
self.name = "Device_Parameter_%d_Control" % self.parameter
class Controller(OptimizedControlSurface):
def __init__(self, c):
OptimizedControlSurface.__init__(self, c)
with self.component_guard():
mixer = Mixer()
device = Device()
self.set_device_component(device)
# session = self.session()
# session.set_mixer(mixer)
def handle_sysex(self, midi_bytes):
pass
def create_instance(c):
return Controller(c)