|
8 | 8 | 1. **As constants** - reference CC numbers directly when sending raw MIDI or mapping features:: |
9 | 9 |
|
10 | 10 | import subsequence.constants.midi_cc as cc |
11 | | - |
| 11 | +
|
12 | 12 | @composition.pattern(...) |
13 | 13 | def sweep (p): |
14 | 14 | p.cc(cc.FILTER_CUTOFF, 127) |
15 | 15 |
|
16 | 16 | 2. **As a lookup map** - pass ``GM_CC_MAP`` if you want to allow string-based mapping in your extensions:: |
17 | 17 |
|
18 | 18 | print(subsequence.constants.midi_cc.GM_CC_MAP["filter_cutoff"]) # 74 |
| 19 | +
|
| 20 | +Canonical source: `pymididefs <https://github.com/simonholliday/PyMidiDefs>`_. |
19 | 21 | """ |
20 | 22 |
|
21 | 23 | import typing |
22 | 24 |
|
23 | | -# ─── Common Continuous Controllers (MSB) ───────────────────────────── |
24 | | -BANK_SELECT_MSB = 0 |
25 | | -MODULATION_WHEEL = 1 |
26 | | -BREATH_CONTROLLER = 2 |
27 | | -FOOT_CONTROLLER = 4 |
28 | | -PORTAMENTO_TIME = 5 |
29 | | -DATA_ENTRY_MSB = 6 |
30 | | -VOLUME = 7 |
31 | | -BALANCE = 8 |
32 | | -PAN = 10 |
33 | | -EXPRESSION = 11 |
34 | | -EFFECT_CONTROL_1 = 12 |
35 | | -EFFECT_CONTROL_2 = 13 |
36 | | - |
37 | | -# ─── General Purpose Controllers (MSB) ─────────────────────────────── |
38 | | -GENERAL_PURPOSE_1 = 16 |
39 | | -GENERAL_PURPOSE_2 = 17 |
40 | | -GENERAL_PURPOSE_3 = 18 |
41 | | -GENERAL_PURPOSE_4 = 19 |
42 | | - |
43 | | -# ─── Common Continuous Controllers (LSB) ───────────────────────────── |
44 | | -BANK_SELECT_LSB = 32 |
45 | | -MODULATION_WHEEL_LSB = 33 |
46 | | -BREATH_CONTROLLER_LSB = 34 |
47 | | -FOOT_PEDAL_LSB = 36 |
48 | | -PORTAMENTO_TIME_LSB = 37 |
49 | | -DATA_ENTRY_LSB = 38 |
50 | | - |
51 | | -# ─── On/Off Switches (0-63=Off, 64-127=On) ─────────────────────────── |
52 | | -SUSTAIN_PEDAL = 64 |
53 | | -PORTAMENTO_ON_OFF = 65 |
54 | | -SOSTENUTO_PEDAL = 66 |
55 | | -SOFT_PEDAL = 67 |
56 | | -LEGATO_PEDAL = 68 |
57 | | -HOLD_2 = 69 |
58 | | - |
59 | | -# ─── Sound Controllers ─────────────────────────────────────────────── |
60 | | -SOUND_VARIATION = 70 |
61 | | -FILTER_RESONANCE = 71 |
62 | | -RELEASE_TIME = 72 |
63 | | -ATTACK_TIME = 73 |
64 | | -FILTER_CUTOFF = 74 |
65 | | -SOUND_CONTROL_6 = 75 |
66 | | -SOUND_CONTROL_7 = 76 |
67 | | -SOUND_CONTROL_8 = 77 |
68 | | -SOUND_CONTROL_9 = 78 |
69 | | -SOUND_CONTROL_10 = 79 |
70 | | - |
71 | | -# ─── General Purpose Controllers (LSB) ─────────────────────────────── |
72 | | -GENERAL_PURPOSE_5 = 80 |
73 | | -GENERAL_PURPOSE_6 = 81 |
74 | | -GENERAL_PURPOSE_7 = 82 |
75 | | -GENERAL_PURPOSE_8 = 83 |
76 | | - |
77 | | -# ─── Effect Controllers ────────────────────────────────────────────── |
78 | | -PORTAMENTO_CONTROL = 84 |
79 | | -REVERB_DEPTH = 91 |
80 | | -TREMOLO_DEPTH = 92 |
81 | | -CHORUS_DEPTH = 93 |
82 | | -CELESTE_DEPTH = 94 |
83 | | -PHASER_DEPTH = 95 |
84 | | - |
85 | | -# ─── Parameter Control ─────────────────────────────────────────────── |
86 | | -DATA_INCREMENT = 96 |
87 | | -DATA_DECREMENT = 97 |
88 | | -NRPN_LSB = 98 |
89 | | -NRPN_MSB = 99 |
90 | | -RPN_LSB = 100 |
91 | | -RPN_MSB = 101 |
92 | | - |
93 | | -# ─── Channel Mode Messages ─────────────────────────────────────────── |
94 | | -ALL_SOUND_OFF = 120 |
95 | | -RESET_ALL_CONTROLLERS = 121 |
96 | | -LOCAL_CONTROL_ON_OFF = 122 |
97 | | -ALL_NOTES_OFF = 123 |
98 | | -OMNI_MODE_OFF = 124 |
99 | | -OMNI_MODE_ON = 125 |
100 | | -MONO_MODE_ON = 126 |
101 | | -POLY_MODE_ON = 127 |
| 25 | +# Re-export everything from pymididefs.cc — all CC constants and the lookup dict. |
| 26 | +from pymididefs.cc import * # noqa: F401,F403 |
| 27 | +from pymididefs.cc import CC_MAP # noqa: F401 |
102 | 28 |
|
103 | | -# ─── Complete CC map ───────────────────────────────────────────────── |
104 | | -# |
105 | | -# Pass this dict to map string names to CC integers if needed. |
| 29 | +# ─── Backward-compatibility aliases ───────────────────────────────────────── |
| 30 | +# Subsequence used FOOT_PEDAL_LSB; pymididefs uses FOOT_CONTROLLER_LSB. |
| 31 | +FOOT_PEDAL_LSB = FOOT_CONTROLLER_LSB # noqa: F405 |
106 | 32 |
|
| 33 | +# Subsequence exposed the lookup dict as GM_CC_MAP; pymididefs uses CC_MAP. |
107 | 34 | GM_CC_MAP: typing.Dict[str, int] = { |
108 | | - "bank_select_msb": BANK_SELECT_MSB, |
109 | | - "modulation_wheel": MODULATION_WHEEL, |
110 | | - "breath_controller": BREATH_CONTROLLER, |
111 | | - "foot_controller": FOOT_CONTROLLER, |
112 | | - "portamento_time": PORTAMENTO_TIME, |
113 | | - "data_entry_msb": DATA_ENTRY_MSB, |
114 | | - "volume": VOLUME, |
115 | | - "balance": BALANCE, |
116 | | - "pan": PAN, |
117 | | - "expression": EXPRESSION, |
118 | | - "effect_control_1": EFFECT_CONTROL_1, |
119 | | - "effect_control_2": EFFECT_CONTROL_2, |
120 | | - "general_purpose_1": GENERAL_PURPOSE_1, |
121 | | - "general_purpose_2": GENERAL_PURPOSE_2, |
122 | | - "general_purpose_3": GENERAL_PURPOSE_3, |
123 | | - "general_purpose_4": GENERAL_PURPOSE_4, |
124 | | - "bank_select_lsb": BANK_SELECT_LSB, |
125 | | - "modulation_wheel_lsb": MODULATION_WHEEL_LSB, |
126 | | - "breath_controller_lsb": BREATH_CONTROLLER_LSB, |
| 35 | + **CC_MAP, |
127 | 36 | "foot_pedal_lsb": FOOT_PEDAL_LSB, |
128 | | - "portamento_time_lsb": PORTAMENTO_TIME_LSB, |
129 | | - "data_entry_lsb": DATA_ENTRY_LSB, |
130 | | - "sustain_pedal": SUSTAIN_PEDAL, |
131 | | - "portamento_on_off": PORTAMENTO_ON_OFF, |
132 | | - "sostenuto_pedal": SOSTENUTO_PEDAL, |
133 | | - "soft_pedal": SOFT_PEDAL, |
134 | | - "legato_pedal": LEGATO_PEDAL, |
135 | | - "hold_2": HOLD_2, |
136 | | - "sound_variation": SOUND_VARIATION, |
137 | | - "filter_resonance": FILTER_RESONANCE, |
138 | | - "release_time": RELEASE_TIME, |
139 | | - "attack_time": ATTACK_TIME, |
140 | | - "filter_cutoff": FILTER_CUTOFF, |
141 | | - "sound_control_6": SOUND_CONTROL_6, |
142 | | - "sound_control_7": SOUND_CONTROL_7, |
143 | | - "sound_control_8": SOUND_CONTROL_8, |
144 | | - "sound_control_9": SOUND_CONTROL_9, |
145 | | - "sound_control_10": SOUND_CONTROL_10, |
146 | | - "general_purpose_5": GENERAL_PURPOSE_5, |
147 | | - "general_purpose_6": GENERAL_PURPOSE_6, |
148 | | - "general_purpose_7": GENERAL_PURPOSE_7, |
149 | | - "general_purpose_8": GENERAL_PURPOSE_8, |
150 | | - "portamento_control": PORTAMENTO_CONTROL, |
151 | | - "reverb_depth": REVERB_DEPTH, |
152 | | - "tremolo_depth": TREMOLO_DEPTH, |
153 | | - "chorus_depth": CHORUS_DEPTH, |
154 | | - "celeste_depth": CELESTE_DEPTH, |
155 | | - "phaser_depth": PHASER_DEPTH, |
156 | | - "data_increment": DATA_INCREMENT, |
157 | | - "data_decrement": DATA_DECREMENT, |
158 | | - "nrpn_lsb": NRPN_LSB, |
159 | | - "nrpn_msb": NRPN_MSB, |
160 | | - "rpn_lsb": RPN_LSB, |
161 | | - "rpn_msb": RPN_MSB, |
162 | | - "all_sound_off": ALL_SOUND_OFF, |
163 | | - "reset_all_controllers": RESET_ALL_CONTROLLERS, |
164 | | - "local_control_on_off": LOCAL_CONTROL_ON_OFF, |
165 | | - "all_notes_off": ALL_NOTES_OFF, |
166 | | - "omni_mode_off": OMNI_MODE_OFF, |
167 | | - "omni_mode_on": OMNI_MODE_ON, |
168 | | - "mono_mode_on": MONO_MODE_ON, |
169 | | - "poly_mode_on": POLY_MODE_ON, |
170 | 37 | } |
0 commit comments