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