]> git.sesse.net Git - nageru/blob - midi_mapping.proto
Fix an issue where the mixer lagging too much behind CEF would cause us to display...
[nageru] / midi_mapping.proto
1 // Mappings from MIDI controllers to the UI. (We don't really build
2 // a more complicated data structure than this in Nageru itself either;
3 // we just edit and match directly against the protobuf.)
4
5 syntax = "proto2";
6
7 // A single, given controller mapping.
8 message MIDIControllerProto {
9         required int32 controller_number = 1;
10         // TODO: Add flags like invert here if/when we need them.
11 }
12
13 message MIDIButtonProto {
14         required int32 note_number = 1;
15 }
16
17 message MIDILightProto {
18         required int32 note_number = 1;
19 }
20
21 // All the mappings for a given a bus.
22 message MIDIMappingBusProto {
23         // TODO: If we need support for lots of buses (i.e., more than the typical eight
24         // on a mixer), add a system for bus banks, like we have for controller banks.
25         // optional int32 bus_bank = 1;
26
27         optional MIDIControllerProto treble = 2;
28         optional MIDIControllerProto mid = 3;
29         optional MIDIControllerProto bass = 4;
30         optional MIDIControllerProto gain = 5;
31         optional MIDIControllerProto compressor_threshold = 6;
32         optional MIDIControllerProto fader = 7;
33
34         optional MIDIButtonProto toggle_mute = 8;
35         optional MIDIButtonProto toggle_locut = 9;
36         optional MIDIButtonProto toggle_auto_gain_staging = 10;
37         optional MIDIButtonProto toggle_compressor = 11;
38         optional MIDIButtonProto clear_peak = 12;
39
40         // These are really global (controller bank change affects all buss),
41         // but it's not uncommon that we'd want one button per bus to switch banks.
42         // E.g., if the user binds the “mute” button to “next bank”, they'd want every
43         // mute button on the mixer to do that, so they need one mapping per bus.
44         optional MIDIButtonProto prev_bank = 13;
45         optional MIDIButtonProto next_bank = 14;
46         optional MIDIButtonProto select_bank_1 = 15;
47         optional MIDIButtonProto select_bank_2 = 16;
48         optional MIDIButtonProto select_bank_3 = 17;
49         optional MIDIButtonProto select_bank_4 = 18;
50         optional MIDIButtonProto select_bank_5 = 19;
51         optional MIDIButtonProto toggle_limiter = 20;
52         optional MIDIButtonProto toggle_auto_makeup_gain = 21;
53
54         // These are also global (they belong to the master bus), and unlike
55         // the bank change commands, one would usually have only one of each,
56         // but there's no reason to limit them to one each, and the editor UI
57         // becomes simpler if they are the treated the same way as the bank
58         // commands.
59         optional MIDIControllerProto locut = 22;
60         optional MIDIControllerProto limiter_threshold = 23;
61         optional MIDIControllerProto makeup_gain = 24;
62
63         // Per-bus lights.
64         optional MIDILightProto is_muted = 25;
65         optional MIDILightProto locut_is_on = 26;
66         optional MIDILightProto auto_gain_staging_is_on = 27;
67         optional MIDILightProto compressor_is_on = 28;
68         optional MIDILightProto has_peaked = 29;
69
70         // Global lights. Same logic as above for why they're in this proto.
71         optional MIDILightProto bank_1_is_selected = 30;
72         optional MIDILightProto bank_2_is_selected = 31;
73         optional MIDILightProto bank_3_is_selected = 32;
74         optional MIDILightProto bank_4_is_selected = 33;
75         optional MIDILightProto bank_5_is_selected = 34;
76         optional MIDILightProto limiter_is_on = 35;
77         optional MIDILightProto auto_makeup_gain_is_on = 36;
78 }
79
80 // The top-level protobuf, containing all the bus mappings, as well as
81 // more global settings.
82 //
83 // Since a typical mixer will have fewer physical controls than what Nageru
84 // could use, Nageru supports so-called controller banks. A mapping can
85 // optionally belong to a bank, and if so, that mapping is only active when
86 // that bank is selected. The user can then select the current bank using
87 // other mappings, typically by having some mixer button assigned to
88 // “next bank”. This yields effective multiplexing of lesser-used controls.
89 message MIDIMappingProto {
90         optional int32 num_controller_banks = 1 [default = 0];  // Max 5.
91
92         // Bus controller banks.
93         optional int32 treble_bank = 2;
94         optional int32 mid_bank = 3;
95         optional int32 bass_bank = 4;
96         optional int32 gain_bank = 5;
97         optional int32 compressor_threshold_bank = 6;
98         optional int32 fader_bank = 7;
99
100         // Bus button banks.
101         optional int32 toggle_mute_bank = 8;
102         optional int32 toggle_locut_bank = 9;
103         optional int32 toggle_auto_gain_staging_bank = 10;
104         optional int32 toggle_compressor_bank = 11;
105         optional int32 clear_peak_bank = 12;
106
107         // Global controller banks.
108         optional int32 locut_bank = 13;
109         optional int32 limiter_threshold_bank = 14;
110         optional int32 makeup_gain_bank = 15;
111
112         // Global buttons.
113         optional int32 toggle_limiter_bank = 16;
114         optional int32 toggle_auto_makeup_gain_bank = 17;
115
116         repeated MIDIMappingBusProto bus_mapping = 18;
117 }