-
Notifications
You must be signed in to change notification settings - Fork 1
/
TODO
100 lines (63 loc) · 2.71 KB
/
TODO
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
=== TODO ===
[x] offset encoders
[] CWEncode should inherit from CWCc
[] Perhaps CWBend should, too
[] CWCc should have a raw argument
[] it isn't obvious that "sane" value is needed with midiEncoder
[] auto sane on encoder input?
[] trace facility
[] trace points
[] trace raw midi in/out
[] send a SysEx on trigger? midiSysEx?
[] automatic init of MIDI?
this is enough:
MIDIIn.connectAll;
but you need this if you want to force it:
MIDIClient.init;
MIDIIn.connectAll;
[] automatic registration with CmdPeriod?
CmdPeriod.add(this)
[] call .asSpec on spec arguments
[] point names don't have to be symbols
[\mute, 3]
[] for synthArg, use ControlSpec from SynthDef if exists
- You can get the SynthDesc from a node by doing something
like `SynthDescLib.match(node.defName)`.
[] support for alternate port names on Linux
[] "no out" optimization in Point (add to separate list)
[] figure out way to restart clearing previous connections
=== FUTURE ===
[] Reconnect feature: Remember all midiDevice assignments that couldn't be
made, re-init MIDIClient and then remake everything
[] will need some form of MIDI In/Out proxying
[] settable "on" value for buttons (some devices take 1, not 127... others
the value sets the color)
[] GUI elements
[] like MIDI elements
[] utility to generate from Points?
[] does the range/type info need to move to Point?
[] CWSelect keys? currently integers from 0
[] periodic readback from synth args and update if changed
[] trace facility in point
[] trace items!
[] support different types of relative ccs
=== NOTES ====
[] relative ccs
-2 -1 0 1 2
2s comp: 126 127 0 1 2
offset: 62 63 64 65 66
sign bit: 66 65 0/64 1 2
-from Ableton-
ENCODER_VALUE_NORMALIZER = {
_map_modes.relative_smooth_two_compliment: lambda v: (v if v <= 64 else v - 128),
_map_modes.relative_smooth_signed_bit: lambda v: (v if v <= 64 else 64 - v),
_map_modes.relative_smooth_binary_offset: lambda v: v - 64
}
[] Button -> RadioButton (vel > 0 is on, no off)
[] and have ToggleButton (vel > 0 toggles on/off, no way to reflect state)
[] and have StateButton(?) (vel > 0 is on, vel = 0 is off, reflects state)
Note On Note Off Set(w)
Radio set(v) - if (w==v) note on, else note off
Trigger trigger - note on, note off 150ms later?
Button set(1) set(0) if (w>0) note on, else note off
Toggle set(!s) - s=w