Deluge Firmware
Loading...
Searching...
No Matches
definitions.h
Go to the documentation of this file.
1/*
2 * Copyright © 2014-2023 Synthstrom Audible Limited
3 *
4 * This file is part of The Synthstrom Audible Deluge Firmware.
5 *
6 * The Synthstrom Audible Deluge Firmware is free software: you can redistribute it and/or modify it under the
7 * terms of the GNU General Public License as published by the Free Software Foundation,
8 * either version 3 of the License, or (at your option) any later version.
9 *
10 * This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY;
11 * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
12 * See the GNU General Public License for more details.
13 *
14 * You should have received a copy of the GNU General Public License along with this program.
15 * If not, see <https://www.gnu.org/licenses/>.
16*/
17
18#ifndef Definitions_h
19#define Definitions_h
20
21#include "r_typedefs.h"
22#include "cpu_specific.h"
23
24
25#define FIRMWARE_OLD 0
26#define FIRMWARE_1P2P0 1
27#define FIRMWARE_1P3P0_PRETEST 2
28#define FIRMWARE_1P3P0_BETA 3
29#define FIRMWARE_1P3P0 4
30#define FIRMWARE_1P3P1 5
31#define FIRMWARE_1P3P2 6
32#define FIRMWARE_1P4P0_PRETEST 7
33#define FIRMWARE_1P4P0_BETA 8
34#define FIRMWARE_1P4P0 9
35#define FIRMWARE_1P5P0_PREBETA 10
36#define FIRMWARE_2P0P0_BETA 11
37#define FIRMWARE_2P0P0 12
38#define FIRMWARE_2P0P1_BETA 13
39#define FIRMWARE_2P0P1 14
40#define FIRMWARE_2P0P2_BETA 15
41#define FIRMWARE_2P0P2 16
42#define FIRMWARE_2P0P3 17
43#define FIRMWARE_2P1P0_BETA 18
44#define FIRMWARE_2P1P0 19
45#define FIRMWARE_2P1P1_BETA 20
46#define FIRMWARE_2P1P1 21
47#define FIRMWARE_2P1P2_BETA 22
48#define FIRMWARE_2P1P2 23
49#define FIRMWARE_2P1P3_BETA 24
50#define FIRMWARE_2P1P3 25
51#define FIRMWARE_2P1P4_BETA 26
52#define FIRMWARE_2P1P4 27
53#define FIRMWARE_3P0P0_ALPHA 28
54#define FIRMWARE_3P0P0_BETA 29
55#define FIRMWARE_3P0P0 30
56#define FIRMWARE_3P0P1_BETA 31
57#define FIRMWARE_3P0P1 32
58#define FIRMWARE_3P0P2 33
59#define FIRMWARE_3P0P3_ALPHA 34
60#define FIRMWARE_3P0P3_BETA 35
61#define FIRMWARE_3P0P3 36
62#define FIRMWARE_3P0P4 37
63#define FIRMWARE_3P0P5_BETA 38
64#define FIRMWARE_3P0P5 39
65#define FIRMWARE_3P1P0_ALPHA 40
66#define FIRMWARE_3P1P0_ALPHA2 41
67#define FIRMWARE_3P1P0_BETA 42
68#define FIRMWARE_3P1P0 43
69#define FIRMWARE_3P1P1_BETA 44
70#define FIRMWARE_3P1P1 45
71#define FIRMWARE_3P1P2_BETA 46
72#define FIRMWARE_3P1P2 47
73#define FIRMWARE_3P1P3_BETA 48
74#define FIRMWARE_3P1P3 49
75#define FIRMWARE_3P1P4_BETA 50
76#define FIRMWARE_3P1P4 51
77#define FIRMWARE_3P1P5_BETA 52
78#define FIRMWARE_3P1P5 53
79#define FIRMWARE_3P2P0_ALPHA 54
80#define FIRMWARE_4P0P0_BETA 55
81#define FIRMWARE_4P0P0 56
82#define FIRMWARE_4P0P1_BETA 57
83#define FIRMWARE_4P0P1 58
84#define FIRMWARE_4P1P0_ALPHA 59
85#define FIRMWARE_4P1P0_BETA 60
86#define FIRMWARE_4P1P0 61
87#define FIRMWARE_4P1P1_ALPHA 62
88#define FIRMWARE_4P1P1 63
89#define FIRMWARE_4P1P2 64
90#define FIRMWARE_4P1P3_ALPHA 65
91#define FIRMWARE_4P1P3_BETA 66
92#define FIRMWARE_4P1P3 67
93#define FIRMWARE_4P1P4_ALPHA 68
94#define FIRMWARE_4P1P4_BETA 69
95#define FIRMWARE_4P1P4 70
96#define FIRMWARE_TOO_NEW 255
97
98#define CURRENT_FIRMWARE_VERSION FIRMWARE_4P1P4_ALPHA
99
100
101
102
103
104#if DELUGE_MODEL == DELUGE_MODEL_40_PAD
105
106#define syncScalingButtonX 8
107#define syncScalingButtonY 1
108#define syncScalingLedX 8
109#define syncScalingLedY 2
110
111#define crossScreenEditButtonX 5
112#define crossScreenEditButtonY 0
113#define crossScreenEditLedX 5
114#define crossScreenEditLedY 3
115
116#define xEncButtonX 1
117#define xEncButtonY 2
118
119#define selectEncButtonX 4
120#define selectEncButtonY 1
121
122#define yEncButtonX 0
123#define yEncButtonY 2
124
125#define tempoEncButtonX 7
126#define tempoEncButtonY 2
127
128#define backButtonX 4 // AKA back button
129#define backButtonY 2
130#define backLedX 4 // AKA back button
131#define backLedY 1
132
133#define syncedLedX 9
134#define syncedLedY 3
135
136#else
137
138#define syncScalingButtonX 7
139#define syncScalingButtonY 2
140#define syncScalingLedX 7
141#define syncScalingLedY 2
142
143#define crossScreenEditButtonX 6
144#define crossScreenEditButtonY 2
145#define crossScreenEditLedX 6
146#define crossScreenEditLedY 2
147
148#define xEncButtonX 0
149#define xEncButtonY 1
150
151#define yEncButtonX 0
152#define yEncButtonY 0
153
154#define tempoEncButtonX 4
155#define tempoEncButtonY 1
156
157#define affectEntireButtonX 3
158#define affectEntireButtonY 0
159#define affectEntireLedX 3
160#define affectEntireLedY 0
161
162#define modEncoder0ButtonX 0
163#define modEncoder0ButtonY 2
164
165#define modEncoder1ButtonX 0
166#define modEncoder1ButtonY 3
167
168#endif
169
170#define editPadPressBufferSize 8
171
172#if DELUGE_MODEL == DELUGE_MODEL_40_PAD
173#define NUM_MOD_BUTTONS 6
174#define displayHeight 4
175#define displayHeightMagnitude 2
176#define displayWidth 8
177#define displayWidthMagnitude 3
178#define NO_PRESSES_HAPPENING_MESSAGE 141
179#define RESEND_BUTTON_STATES_MESSAGE 72
180#define NUM_BYTES_IN_COL_UPDATE_MESSAGE 13
181#define NUM_BYTES_IN_LONGEST_MESSAGE 13
182#define NUM_BYTES_IN_SIDEBAR_REDRAW (NUM_BYTES_IN_COL_UPDATE_MESSAGE * 2)
183#define PAD_AND_BUTTON_MESSAGES_END 140
184#else
185#define NUM_MOD_BUTTONS 8
186#define displayHeight 8
187#define displayHeightMagnitude 3
188#define displayWidth 16
189#define displayWidthMagnitude 4
190#define NO_PRESSES_HAPPENING_MESSAGE 254
191#define RESEND_BUTTON_STATES_MESSAGE 22
192#define NUM_BYTES_IN_COL_UPDATE_MESSAGE 49
193#define NUM_BYTES_IN_LONGEST_MESSAGE 55
194#define NUM_BYTES_IN_SIDEBAR_REDRAW (NUM_BYTES_IN_COL_UPDATE_MESSAGE)
195#define PAD_AND_BUTTON_MESSAGES_END 180
196#endif
197
198#define NUM_BYTES_IN_MAIN_PAD_REDRAW (NUM_BYTES_IN_COL_UPDATE_MESSAGE * 8)
199
200#define DEFAULT_ARRANGER_ZOOM (DEFAULT_CLIP_LENGTH >> 1)
201
202#if DELUGE_MODEL == DELUGE_MODEL_40_PAD
203#define LINE_OUT_DETECT_L_1 1
204#define LINE_OUT_DETECT_L_2 4
205#define LINE_OUT_DETECT_R_1 1
206#define LINE_OUT_DETECT_R_2 3
207#define ANALOG_CLOCK_IN_1 1
208#define ANALOG_CLOCK_IN_2 2
209#else
210#define LINE_OUT_DETECT_L_1 6
211#define LINE_OUT_DETECT_L_2 3
212#define LINE_OUT_DETECT_R_1 6
213#define LINE_OUT_DETECT_R_2 4
214#define ANALOG_CLOCK_IN_1 1
215#define ANALOG_CLOCK_IN_2 14
216#define SPEAKER_ENABLE_1 4
217#define SPEAKER_ENABLE_2 1
218#define HEADPHONE_DETECT_1 6
219#define HEADPHONE_DETECT_2 5
220#endif
221
222#define sideBarWidth 2
223#define MAX_NUM_ANIMATED_ROWS ((displayHeight * 3) >> 1)
224
225#define MIDI_LEARN_CLIP 1
226#define MIDI_LEARN_NOTEROW_MUTE 2
227#define MIDI_LEARN_PLAY_BUTTON 3
228#define MIDI_LEARN_RECORD_BUTTON 4
229#define MIDI_LEARN_TAP_TEMPO_BUTTON 5
230#define MIDI_LEARN_SECTION 6
231#define MIDI_LEARN_MELODIC_INSTRUMENT_INPUT 7
232#define MIDI_LEARN_DRUM_INPUT 8
233
234
235#define minTimePerTimerTick 1
236#define numInputTicksToAverageTime 24
237#define numInputTicksToAllowTempoTargeting 24 // This is probably even high enough to cause audible glitches
238#define maxOutputTickMagnitude 5
239
240#define buttonDebounceTime 100 // Milliseconds
241#define padDebounceTime 50 // Milliseconds
242#define colTime 36 // In 21.25 uS's (or did I mean nS?)
243#define zoomSpeed 110
244#define clipCollapseSpeed 200
245#define fadeSpeed 300
246#define flashLength 3
247#define DEFAULT_CLIP_LENGTH 96 // You'll want to <<displayWidthMagnitude this each time used
248#define horizontalSongSelectorSpeed 90
249#define noteRowCollapseSpeed 150
250#define greyoutSpeed (300 * 44)
251
252#define initialFlashTime 250
253#define flashTime 110
254#define fastFlashTime 60
255#define SAMPLE_MARKER_BLINK_TIME 200
256
257#define disabledColourRed 255
258#define disabledColourGreen 0
259#define disabledColourBlue 0
260
261#define groupEnabledColourRed 0
262#define groupEnabledColourGreen 255
263#define groupEnabledColourBlue 6
264
265#define enabledColourRed 0
266#define enabledColourGreen 255
267#define enabledColourBlue 6
268
269#define mutedColourRed 255
270#define mutedColourGreen 160
271#define mutedColourBlue 0
272
273#define midiCommandColourRed 255
274#define midiCommandColourGreen 80
275#define midiCommandColourBlue 120
276
277#define midiNoCommandColourRed 50
278#define midiNoCommandColourGreen 50
279#define midiNoCommandColourBlue 50
280
281#define selectedDrumColourRed 30
282#define selectedDrumColourGreen 30
283#define selectedDrumColourBlue 10
284
285
286#define MAX_SEQUENCE_LENGTH 1610612736 // The biggest multiple of 3 which can fit in a signed 32-bit int
287#define noteOnLatenessAllowed 2205 // In audio samples. That's 50mS. Multiply mS by 44.1
288
289
290#define GATE_MODE_V_TRIG 0
291#define GATE_MODE_S_TRIG 1
292
293#define numSongSlots 1000
294#define numInstrumentSlots 1000
295#define maxNumInstrumentPresets 128
296#define FILENAME_BUFFER_SIZE 256 // Don't ever make this less! The zoom rendering code uses this buffer for its stuff
297
298#define INSTRUMENT_TYPE_SYNTH 0
299#define INSTRUMENT_TYPE_KIT 1
300#define INSTRUMENT_TYPE_MIDI_OUT 2
301#define INSTRUMENT_TYPE_CV 3
302#define OUTPUT_TYPE_AUDIO 4
303
304#define THING_TYPE_SYNTH 0
305#define THING_TYPE_KIT 1
306#define THING_TYPE_SONG 2
307#define THING_TYPE_NONE 3
308
309#define audioEngineBufferSize 128 // Maximum num samples that may be processed in one "frame". Actual size of output buffer is in ssi.h
310#define modFXBufferSize 512
311#define modFXBufferIndexMask (modFXBufferSize - 1)
312#define modFXMaxDelay ((modFXBufferSize - 1) << 16)
313#define flangerMinTime (3 << 16)
314#define flangerAmplitude (modFXMaxDelay - flangerMinTime)
315#define flangerOffset ((modFXMaxDelay + flangerMinTime) >> 1)
316
317#define numEnvelopes 2
318#define numLFOs 2
319#define numModulators 2
320
321#define maxNumUnison 8
322#define NUM_VOICES_STATIC 24
323#define NUM_VOICE_SAMPLES_STATIC 20
324#define NUM_TIME_STRETCHERS_STATIC 6
325#define maxNumNoteOnsPending 64
326
327#define NUM_UINTS_TO_REP_PATCH_CABLES 1
328#define MAX_NUM_PATCH_CABLES (NUM_UINTS_TO_REP_PATCH_CABLES * 32)
329
330
331#define ENVELOPE_STAGE_ATTACK 0
332#define ENVELOPE_STAGE_DECAY 1
333#define ENVELOPE_STAGE_SUSTAIN 2
334#define ENVELOPE_STAGE_RELEASE 3
335#define ENVELOPE_STAGE_FAST_RELEASE 4
336#define ENVELOPE_STAGE_OFF 5
337
338#define NUM_ENVELOPE_STAGES 6
339
340
341
342#define NUM_PRIORITY_OPTIONS 3
343
344#define PATCH_SOURCE_LFO_GLOBAL 0
345#define PATCH_SOURCE_COMPRESSOR 1
346#define PATCH_SOURCE_ENVELOPE_0 2
347#define PATCH_SOURCE_ENVELOPE_1 3
348#define PATCH_SOURCE_LFO_LOCAL 4
349#define PATCH_SOURCE_X 5
350#define PATCH_SOURCE_Y 6
351#define PATCH_SOURCE_AFTERTOUCH 7
352#define PATCH_SOURCE_VELOCITY 8
353#define PATCH_SOURCE_NOTE 9
354#define PATCH_SOURCE_RANDOM 10
355#define NUM_PATCH_SOURCES 11
356
357#define PATCH_SOURCE_NONE (NUM_PATCH_SOURCES)
358
359#define FIRST_GLOBAL_SOURCE_WITH_CHANGED_STATUS_AUTOMATICALLY_UPDATED (PATCH_SOURCE_ENVELOPE_0)
360#define FIRST_LOCAL_SOURCE (PATCH_SOURCE_ENVELOPE_0)
361#define FIRST_UNCHANGEABLE_SOURCE (PATCH_SOURCE_VELOCITY)
362
363
364// Linear params have different sources multiplied together, then multiplied by the neutral value
365// -- and "volume" ones get squared at the end
366
367// Hybrid params have different sources added together, then added to the neutral value
368
369// Exp params have different sources added together, converted to an exponential scale, then multiplied by the neutral value
370
371
372
373#define PARAM_LOCAL_OSC_A_VOLUME 0
374#define PARAM_LOCAL_OSC_B_VOLUME 1
375#define PARAM_LOCAL_VOLUME 2
376#define PARAM_LOCAL_NOISE_VOLUME 3
377#define PARAM_LOCAL_MODULATOR_0_VOLUME 4
378#define PARAM_LOCAL_MODULATOR_1_VOLUME 5
379// Local non-volume params begin
380#define PARAM_LOCAL_MODULATOR_0_FEEDBACK 6
381#define PARAM_LOCAL_MODULATOR_1_FEEDBACK 7
382#define PARAM_LOCAL_CARRIER_0_FEEDBACK 8
383#define PARAM_LOCAL_CARRIER_1_FEEDBACK 9
384#define PARAM_LOCAL_LPF_RESONANCE 10
385#define PARAM_LOCAL_HPF_RESONANCE 11
386#define PARAM_LOCAL_ENV_0_SUSTAIN 12
387#define PARAM_LOCAL_ENV_1_SUSTAIN 13
388// Local hybrid params begin
389#define PARAM_LOCAL_OSC_A_PHASE_WIDTH 14
390#define PARAM_LOCAL_OSC_B_PHASE_WIDTH 15
391#define PARAM_LOCAL_OSC_A_WAVE_INDEX 16
392#define PARAM_LOCAL_OSC_B_WAVE_INDEX 17
393#define PARAM_LOCAL_PAN 18
394// Local exp params begin
395#define PARAM_LOCAL_LPF_FREQ 19
396#define PARAM_LOCAL_PITCH_ADJUST 20
397#define PARAM_LOCAL_OSC_A_PITCH_ADJUST 21
398#define PARAM_LOCAL_OSC_B_PITCH_ADJUST 22
399#define PARAM_LOCAL_MODULATOR_0_PITCH_ADJUST 23
400#define PARAM_LOCAL_MODULATOR_1_PITCH_ADJUST 24
401#define PARAM_LOCAL_HPF_FREQ 25
402#define PARAM_LOCAL_LFO_LOCAL_FREQ 26
403#define PARAM_LOCAL_ENV_0_ATTACK 27
404#define PARAM_LOCAL_ENV_1_ATTACK 28
405#define PARAM_LOCAL_ENV_0_DECAY 29
406#define PARAM_LOCAL_ENV_1_DECAY 30
407#define PARAM_LOCAL_ENV_0_RELEASE 31
408#define PARAM_LOCAL_ENV_1_RELEASE 32
409// Global params begin
410#define PARAM_GLOBAL_VOLUME_POST_FX 33
411#define PARAM_GLOBAL_VOLUME_POST_REVERB_SEND 34
412#define PARAM_GLOBAL_REVERB_AMOUNT 35
413#define PARAM_GLOBAL_MOD_FX_DEPTH 36
414// Global non-volume params begin
415#define PARAM_GLOBAL_DELAY_FEEDBACK 37
416// Global hybrid params begin
417// Global exp params begin
418#define PARAM_GLOBAL_DELAY_RATE 38
419#define PARAM_GLOBAL_MOD_FX_RATE 39
420#define PARAM_GLOBAL_LFO_FREQ 40
421#define PARAM_GLOBAL_ARP_RATE 41
422// ANY TIME YOU UPDATE THIS LIST! CHANGE Sound::paramToString()
423
424#define PARAM_NONE 42
425
426#define FIRST_LOCAL_NON_VOLUME_PARAM 6
427#define FIRST_LOCAL_HYBRID_PARAM 14
428#define FIRST_LOCAL_EXP_PARAM 19
429
430#define FIRST_GLOBAL_PARAM 33
431#define FIRST_GLOBAL_NON_VOLUME_PARAM 37
432#define FIRST_GLOBAL_HYBRID_PARAM 38
433#define FIRST_GLOBAL_EXP_PARAM 38
434#define NUM_PARAMS 42 // Not including the "none" param
435
436#define PARAM_PLACEHOLDER_RANGE 89 // Not a real param. For the purpose of reading old files from before V3.2.0
437
438#define PARAM_UNPATCHED_SECTION 90
439
440// For all ModControllables
441#define PARAM_UNPATCHED_STUTTER_RATE 0
442#define PARAM_UNPATCHED_BASS 1
443#define PARAM_UNPATCHED_TREBLE 2
444#define PARAM_UNPATCHED_BASS_FREQ 3
445#define PARAM_UNPATCHED_TREBLE_FREQ 4
446#define PARAM_UNPATCHED_SAMPLE_RATE_REDUCTION 5
447#define PARAM_UNPATCHED_BITCRUSHING 6
448#define PARAM_UNPATCHED_MOD_FX_OFFSET 7
449#define PARAM_UNPATCHED_MOD_FX_FEEDBACK 8
450#define PARAM_UNPATCHED_COMPRESSOR_SHAPE 9
451// ANY TIME YOU UPDATE THIS LIST! paramToString() in functions.cpp
452
453#define NUM_SHARED_UNPATCHED_PARAMS 10
454
455// Just for Sounds
456#define PARAM_UNPATCHED_SOUND_ARP_GATE 10
457#define PARAM_UNPATCHED_SOUND_PORTA 11
458// ANY TIME YOU UPDATE THIS LIST! paramToString() in functions.cpp
459
460#define MAX_NUM_UNPATCHED_PARAM_FOR_SOUNDS 12
461
462// Just for GlobalEffectables
463#define PARAM_UNPATCHED_GLOBALEFFECTABLE_MOD_FX_RATE 10
464#define PARAM_UNPATCHED_GLOBALEFFECTABLE_MOD_FX_DEPTH 11
465#define PARAM_UNPATCHED_GLOBALEFFECTABLE_DELAY_RATE 12
466#define PARAM_UNPATCHED_GLOBALEFFECTABLE_DELAY_AMOUNT 13
467#define PARAM_UNPATCHED_GLOBALEFFECTABLE_PAN 14
468#define PARAM_UNPATCHED_GLOBALEFFECTABLE_LPF_FREQ 15
469#define PARAM_UNPATCHED_GLOBALEFFECTABLE_LPF_RES 16
470#define PARAM_UNPATCHED_GLOBALEFFECTABLE_HPF_FREQ 17
471#define PARAM_UNPATCHED_GLOBALEFFECTABLE_HPF_RES 18
472#define PARAM_UNPATCHED_GLOBALEFFECTABLE_REVERB_SEND_AMOUNT 19
473#define PARAM_UNPATCHED_GLOBALEFFECTABLE_VOLUME 20
474#define PARAM_UNPATCHED_GLOBALEFFECTABLE_SIDECHAIN_VOLUME 21
475#define PARAM_UNPATCHED_GLOBALEFFECTABLE_PITCH_ADJUST 22
476
477#define MAX_NUM_UNPATCHED_PARAMS 23
478
479
480
481#define KIT_SIDECHAIN_SHAPE (-601295438)
482
483#define OSC_TYPE_SINE 0
484#define OSC_TYPE_TRIANGLE 1
485#define OSC_TYPE_SQUARE 2
486#define OSC_TYPE_ANALOG_SQUARE 3
487#define OSC_TYPE_SAW 4
488#define OSC_TYPE_ANALOG_SAW_2 5
489#define OSC_TYPE_WAVETABLE 6
490#define OSC_TYPE_SAMPLE 7
491#define OSC_TYPE_INPUT_L 8
492#define OSC_TYPE_INPUT_R 9
493#define OSC_TYPE_INPUT_STEREO 10
494
495
496#define NUM_OSC_TYPES_RINGMODDABLE OSC_TYPE_SAMPLE
497
498#if DELUGE_MODEL == DELUGE_MODEL_40_PAD
499#define NUM_OSC_TYPES 7
500#else
501#define NUM_OSC_TYPES 11
502#endif
503
504
505
506
507#define LFO_TYPE_SINE 0
508#define LFO_TYPE_TRIANGLE 1
509#define LFO_TYPE_SQUARE 2
510#define LFO_TYPE_SAW 3
511
512#define NUM_LFO_TYPES 4
513
514
515#define SYNTH_MODE_SUBTRACTIVE 0
516#define SYNTH_MODE_FM 1
517#define SYNTH_MODE_RINGMOD 2
518
519#define MOD_FX_TYPE_NONE 0
520#define MOD_FX_TYPE_FLANGER 1
521#define MOD_FX_TYPE_CHORUS 2
522#define MOD_FX_TYPE_PHASER 3
523#define NUM_MOD_FX_TYPES 4
524
525#define SAMPLE_MAX_TRANSPOSE 24
526#define SAMPLE_MIN_TRANSPOSE (-96)
527
528#define WAV_FORMAT_PCM 1
529#define WAV_FORMAT_FLOAT 3
530
531#define POLYPHONY_AUTO 0
532#define POLYPHONY_POLY 1
533#define POLYPHONY_MONO 2
534#define POLYPHONY_LEGATO 3
535#define POLYPHONY_CHOKE 4
536
537#define NUM_POLYPHONY_TYPES 5
538
539
540#define NUMERIC_DISPLAY_LENGTH 4
541
542#define MAX_NUM_SECTIONS 12
543
544#if DELUGE_MODEL >= DELUGE_MODEL_144_G
545#define XTAL_SPEED_MHZ 13007402 // 1.65% lower, for SSCG
546#else
547#define XTAL_SPEED_MHZ 13225625
548#endif
549
550
551
552
553#define NUM_PHYSICAL_MOD_KNOBS 2
554
555#define LPF_MODE_12DB 0
556#define LPF_MODE_TRANSISTOR_24DB 1
557#define LPF_MODE_TRANSISTOR_24DB_DRIVE 2
558#define LPF_MODE_DIODE 3
559#define NUM_LPF_MODES 3
560
561#define PHASER_NUM_ALLPASS_FILTERS 6
562
563#define NO_ERROR 0
564#define ERROR_INSUFFICIENT_RAM 1
565#define ERROR_UNSPECIFIED 2
566#define ERROR_SD_CARD 3
567#define ERROR_NO_FURTHER_PRESETS 4
568#define ERROR_FILE_CORRUPTED 5
569#define ERROR_FILE_UNREADABLE 6 // Or not found, I think?
570#define ERROR_FILE_UNSUPPORTED 7
571#define ERROR_FILE_FIRMWARE_VERSION_TOO_NEW 8
572#define RESULT_TAG_UNUSED 9
573#define ERROR_FOLDER_DOESNT_EXIST 10
574#define ERROR_WRITE_PROTECTED 11
575#define ERROR_BUG 12
576#define ERROR_WRITE_FAIL 13
577#define ERROR_FILE_TOO_BIG 14
578#define ERROR_PRESET_IN_USE 15
579#define ERROR_NO_FURTHER_FILES_THIS_DIRECTION 16
580#define ERROR_FILE_ALREADY_EXISTS 17
581#define ERROR_FILE_NOT_FOUND 18
582#define ERROR_ABORTED_BY_USER 19
583#define ERROR_MAX_FILE_SIZE_REACHED 20
584#define ERROR_SD_CARD_FULL 21
585#define ERROR_FILE_NOT_LOADABLE_AS_WAVETABLE 22
586#define ERROR_FILE_NOT_LOADABLE_AS_WAVETABLE_BECAUSE_STEREO 23
587#define ERROR_NO_FURTHER_DIRECTORY_LEVELS_TO_GO_UP 24
588#define NO_ERROR_BUT_GET_OUT 25
589#define ERROR_INSUFFICIENT_RAM_FOR_FOLDER_CONTENTS_SIZE 26
590#define ERROR_SD_CARD_NOT_PRESENT 27
591#define ERROR_SD_CARD_NO_FILESYSTEM 28
592
593#define SAMPLE_REPEAT_CUT 0
594#define SAMPLE_REPEAT_ONCE 1
595#define SAMPLE_REPEAT_LOOP 2
596#define SAMPLE_REPEAT_STRETCH 3
597
598#define NUM_REPEAT_MODES 4
599
600
601#define FILTER_TYPE_LPF 0
602#define FILTER_TYPE_HPF 1
603#define FILTER_TYPE_EQ 2
604#define NUM_FILTER_TYPES 3
605
606
607
608#define NUM_SOURCES 2 // That's sources as in oscillators - within a Sound (synth).
609
610
611
612#define PIC_MESSAGE_REFRESH_TIME 19
613
614#define NUM_ARP_MODES 5
615#define ARP_MODE_OFF 0
616#define ARP_MODE_UP 1
617#define ARP_MODE_DOWN 2
618#define ARP_MODE_BOTH 3
619#define ARP_MODE_RANDOM 4
620
621#define ALLOW_SPAM_MODE 0 // For debugging I think?
622
623
624#define KEYBOARD_ROW_INTERVAL 5
625
626
627
628
629// UART
630#define MIDI_TX_BUFFER_SIZE 1024
631
632#define MIDI_RX_BUFFER_SIZE 512
633#define MIDI_RX_TIMING_BUFFER_SIZE 32 // Must be <= MIDI_RX_BUFFER_SIZE, above
634
635
636
637#define MOD_FX_PARAM_DEPTH 0
638#define MOD_FX_PARAM_FEEDBACK 1
639#define MOD_FX_PARAM_OFFSET 2
640#define NUM_MOD_FX_PARAMS 3
641
642#define PATCH_CABLE_ACCEPTANCE_YET_T0_BE_DETERMINED 3
643#define PATCH_CABLE_ACCEPTANCE_ALLOWED 2
644#define PATCH_CABLE_ACCEPTANCE_EDITABLE 1
645#define PATCH_CABLE_ACCEPTANCE_DISALLOWED 0
646
647#define DOUBLE_TAP_MS 400
648
649#define SD_TEST_MODE_ENABLED 0
650#define SD_TEST_MODE_ENABLED_LOAD_SONGS 0
651#define SD_TEST_MODE_ENABLED_SAVE_SONGS 0
652#define UNDO_REDO_TEST_ENABLED 0
653#define RECORDING_TEST_ENABLED 0
654#define AUTOPILOT_TEST_ENABLED 0
655#define LAUNCH_CLIP_TEST_ENABLED 0
656
657#define NUM_GLOBAL_MIDI_COMMANDS 8
658#define GLOBAL_MIDI_COMMAND_PLAYBACK_RESTART 0
659#define GLOBAL_MIDI_COMMAND_PLAY 1
660#define GLOBAL_MIDI_COMMAND_RECORD 2
661#define GLOBAL_MIDI_COMMAND_TAP 3
662#define GLOBAL_MIDI_COMMAND_LOOP 4
663#define GLOBAL_MIDI_COMMAND_LOOP_CONTINUOUS_LAYERING 5
664#define GLOBAL_MIDI_COMMAND_UNDO 6
665#define GLOBAL_MIDI_COMMAND_REDO 7
666
667#define NUM_CLUSTERS_LOADED_AHEAD 2
668
669#define INPUT_MONITORING_SMART 0
670#define INPUT_MONITORING_ON 1
671#define INPUT_MONITORING_OFF 2
672#define NUM_INPUT_MONITORING_MODES 3
673
674#define CACHE_LINE_SIZE 32
675
676
677#define CLUSTER_DONT_LOAD 0
678#define CLUSTER_ENQUEUE 1
679#define CLUSTER_LOAD_IMMEDIATELY 2
680#define CLUSTER_LOAD_IMMEDIATELY_OR_ENQUEUE 3
681
682#define SCALE_TYPE_SCALE 0
683#define SCALE_TYPE_CHROMATIC 1
684#define SCALE_TYPE_KIT 2
685
686#define ARM_STATE_OFF 0
687#define ARM_STATE_ON_NORMAL 1 // Arming to stop or start normally, or to stop soloing
688#define ARM_STATE_ON_TO_SOLO 2
689
690#define ALPHA_OR_BETA_VERSION 1 // Whether to compile with additional error-checking
691
692#define NUM_PROBABILITY_VALUES 20
693#define DEFAULT_LIFT_VALUE 64
694
695
696#if ALPHA_OR_BETA_VERSION
697//#define TEST_VECTOR 1
698//#define TEST_VECTOR_SEARCH_MULTIPLE 1
699//#define TEST_GENERAL_MEMORY_ALLOCATION 1
700//#define TEST_VECTOR_DUPLICATES 1
701//#define TEST_BST 1
702//#define TEST_OPEN_ADDRESSING_HASH_TABLE 1
703//#define TEST_SD_WRITE 1
704//#define TEST_SAMPLE_LOOP_POINTS 1
705#endif
706
707
708#define NAVIGATION_CLIP 0
709#define NAVIGATION_ARRANGEMENT 1
710
711#define PRESET_SEARCH_ALL 0
712#define PRESET_SEARCH_NOT_ACTIVE_IN_SESSION 1
713#define PRESET_SEARCH_NOT_ACTIVE_IN_ARRANGEMENT 2
714
715#define AVAILABILITY_ANY 0
716#define AVAILABILITY_INSTRUMENT_AVAILABLE_IN_SESSION 1
717#define AVAILABILITY_INSTRUMENT_UNUSED 2
718
719#define BEFORE 0
720#define AFTER 1
721
722#define DELETE 1
723#define CREATE 0
724
725#define CC_NUMBER_PITCH_BEND 120
726#define CC_NUMBER_AFTERTOUCH 121
727#define CC_NUMBER_NONE 122
728#define NUM_CC_NUMBERS_INCLUDING_FAKE 123
729#define NUM_REAL_CC_NUMBERS 120
730
731#define INSTRUMENT_REMOVAL_NONE 0
732#define INSTRUMENT_REMOVAL_DELETE_OR_HIBERNATE_IF_UNUSED 1
733#define INSTRUMENT_REMOVAL_DELETE 2
734
735
736
737#define HARDWARE_TEST_MODE 0
738
739#define DRUM_TYPE_SOUND 0
740#define DRUM_TYPE_MIDI 1
741#define DRUM_TYPE_GATE 2
742
743#define PGM_CHANGE_SEND_NEVER 0
744#define PGM_CHANGE_SEND_ONCE 1
745
746#define MARKER_NONE -1
747#define MARKER_START 0
748#define MARKER_LOOP_START 1
749#define MARKER_LOOP_END 2
750#define MARKER_END 3
751#define NUM_MARKER_TYPES 4
752
753#define INTERPOLATION_MODE_LINEAR 0
754#define INTERPOLATION_MODE_SMOOTH 1
755#define NUM_INTERPOLATION_MODES 2
756
757#define CACHE_BYTE_DEPTH 3
758#define CACHE_BYTE_DEPTH_MAGNITUDE 2 // Invalid / unused for odd numbers of bytes like 3
759
760#define MAX_UNISON_DETUNE 50
761
762#define PARAM_STATIC_COMPRESSOR_ATTACK 162
763#define PARAM_STATIC_COMPRESSOR_RELEASE 163
764#define PARAM_STATIC_COMPRESSOR_VOLUME 164 // Only used for the reverb compressor. Normally this is done with patching
765#define PARAM_STATIC_PATCH_CABLE 190 // Special case
766
767#define PERC_BUFFER_REDUCTION_MAGNITUDE 7 // This is about right. Making it smaller didn't help. Tried it as 9, and I'm pretty sure some fast percussive details were lost in the output
768#define PERC_BUFFER_REDUCTION_SIZE (1 << PERC_BUFFER_REDUCTION_MAGNITUDE)
769#define DIFFERENCE_LPF_POLES 2
770
771
772#define INTERPOLATION_MAX_NUM_SAMPLES 16
773#define INTERPOLATION_MAX_NUM_SAMPLES_MAGNITUDE 4
774
775
776#define CLUSTER_EMPTY 0
777#define CLUSTER_SAMPLE 1
778#define CLUSTER_GENERAL_MEMORY 2
779#define CLUSTER_SAMPLE_CACHE 3
780#define CLUSTER_PERC_CACHE_FORWARDS 4
781#define CLUSTER_PERC_CACHE_REVERSED 5
782#define CLUSTER_OTHER 6
783
784#define PLAY_HEAD_OLDER 0
785#define PLAY_HEAD_NEWER 1
786
787#define INPUT_RAW_BUFFER_SIZE 8192
788#define INPUT_REPITCHED_BUFFER_SIZE 2048
789#define INPUT_PERC_BUFFER_SIZE (INPUT_RAW_BUFFER_SIZE >> PERC_BUFFER_REDUCTION_MAGNITUDE)
790
791#define INPUT_ENABLE_REPITCHED_BUFFER 0 // Experimental, from when developing input pitch shifting. Probably won't actually work now, if it ever did!
792
793
794
795
796#define TIME_STRETCH_DEFAULT_FIRST_HOP_LENGTH 200
797
798#define TIME_STRETCH_CROSSFADE_NUM_MOVING_AVERAGES 3 // 3 sounds way better than 2. After that, kinda diminishing returns
799#define TIME_STRETCH_CROSSFADE_MOVING_AVERAGE_LENGTH 35 // Anywhere between 30 and 40 seemed ideal. Point of interest - high numbers (e.g. I tried 140) screw up the high notes, so more is not more!
800
801#define TIME_STRETCH_ENABLE_BUFFER 0 // I think this was an experimental mode which allowed the pitch-change effect (i.e. windowed sinc interpolation)
802 // to be stored and reused between the two time-stretch play-heads. Probably won't work anymore. From memory, wasn't
803 // very beneficial, especially relative to its complexity and potential bugginess.
804
805#if TIME_STRETCH_ENABLE_BUFFER
806#define TIME_STRETCH_BUFFER_SIZE 4096
807#else
808#define TIME_STRETCH_BUFFER_SIZE 256
809#endif
810
811
812#define PITCH_DETECT_WINDOW_SIZE_MAGNITUDE 13 // We don't want the window too short, or some sounds / harmonics can be missed during the attack
813#define PITCH_DETECT_WINDOW_SIZE (1 << PITCH_DETECT_WINDOW_SIZE_MAGNITUDE)
814
815#define MAX_FILE_SIZE 1073741824
816
817#define QWERTY_HOME_ROW 3
818
819#define AUDIO_RECORD_LAG_COMPENTATION 294
820
821
822#define AUDIO_INPUT_CHANNEL_NONE 0
823#define AUDIO_INPUT_CHANNEL_LEFT 1
824#define AUDIO_INPUT_CHANNEL_RIGHT 2
825#define AUDIO_INPUT_CHANNEL_STEREO 3
826#define AUDIO_INPUT_CHANNEL_BALANCED 4
827#define AUDIO_INPUT_CHANNEL_MIX 5
828#define AUDIO_INPUT_CHANNEL_OUTPUT 6
829
830#define AUDIO_INPUT_CHANNEL_FIRST_INTERNAL_OPTION 5
831
832#define ACTION_RESULT_DEALT_WITH 0
833#define ACTION_RESULT_NOT_DEALT_WITH 1
834#define ACTION_RESULT_REMIND_ME_OUTSIDE_CARD_ROUTINE 2
835#define ACTION_RESULT_ACTIONED_AND_CAUSED_CHANGE 3
836
837#define ENABLE_CLIP_CUTTING_DIAGNOSTICS 1
838
839#define AUDIO_CLIP_MARGIN_SIZE_POST_END 2048
840
841
842// Let's just do a 100 sample crossfade. Even 12 samples actually sounded fine for my voice - just obviously not so good for a low sine wave.
843// Of course, if like 60 samples are being processed at a time under CPU load, then this might end up as low as 40.
844#define ANTI_CLICK_CROSSFADE_LENGTH 100
845
846#define AUDIO_CLIP_DEFAULT_ATTACK_IF_PRE_MARGIN (7 * 85899345 - 2147483648)
847
848#define AUDIO_RECORDING_FOLDER_CLIPS 0
849#define AUDIO_RECORDING_FOLDER_RECORD 1
850#define AUDIO_RECORDING_FOLDER_RESAMPLE 2
851#define NUM_AUDIO_RECORDING_FOLDERS 3
852
853#define MIDI_CC_FOR_COMMANDS_ENABLED 0 // Was partially developed I think.
854
855#define KEYBOARD_LAYOUT_QWERTY 0
856#define KEYBOARD_LAYOUT_AZERTY 1
857#define KEYBOARD_LAYOUT_QWERTZ 2
858#define NUM_KEYBOARD_LAYOUTS 3
859
860#define INTERNAL_BUTTON_PRESS_LATENCY 380
861#define MIDI_KEY_INPUT_LATENCY 100
862
863#define LINEAR_RECORDING_EARLY_FIRST_NOTE_ALLOWANCE (100 * 44) // In samples
864
865#define LOOP_LOW_LEVEL 1
866#define LOOP_TIMESTRETCHER_LEVEL_IF_ACTIVE 2 // Will cause low-level looping if no time-stretching
867
868#define TRIGGER_CLOCK_INPUT_NUM_TIMES_STORED 4
869
870
871#define INTERNAL_MEMORY_END 0x20300000
872#define PROGRAM_STACK_MAX_SIZE 8192
873
874
875#define STEALABLE_QUEUE_NO_SONG_SAMPLE_DATA 0
876#define STEALABLE_QUEUE_NO_SONG_SAMPLE_DATA_CONVERTED 1 // E.g. from floating point file, or wrong endianness AIFF file.
877#define STEALABLE_QUEUE_NO_SONG_WAVETABLE_BAND_DATA 2
878#define STEALABLE_QUEUE_NO_SONG_SAMPLE_DATA_REPITCHED_CACHE 3
879#define STEALABLE_QUEUE_NO_SONG_SAMPLE_DATA_PERC_CACHE 4
880#define STEALABLE_QUEUE_NO_SONG_AUDIO_FILE_OBJECTS 5
881#define STEALABLE_QUEUE_CURRENT_SONG_SAMPLE_DATA 6
882#define STEALABLE_QUEUE_CURRENT_SONG_SAMPLE_DATA_CONVERTED 7
883#define STEALABLE_QUEUE_CURRENT_SONG_SAMPLE_DATA_REPITCHED_CACHE 8
884#define STEALABLE_QUEUE_CURRENT_SONG_SAMPLE_DATA_PERC_CACHE 9 // This one is super valuable and compacted data - lots of work to load it all again
885#define NUM_STEALABLE_QUEUES 10
886
887#define TIMER_MIDI_GATE_OUTPUT 2
888#define TIMER_SYSTEM_FAST 0
889#define TIMER_SYSTEM_SLOW 4
890#define TIMER_SYSTEM_SUPERFAST 1
891
892#define SSI_TX_BUFFER_NUM_SAMPLES 128
893#define SSI_RX_BUFFER_NUM_SAMPLES 2048
894#define NUM_MONO_INPUT_CHANNELS (NUM_STEREO_INPUT_CHANNELS * 2)
895#define NUM_MONO_OUTPUT_CHANNELS (NUM_STEREO_OUTPUT_CHANNELS * 2)
896
897
898#define MAX_NUM_USB_MIDI_DEVICES 6
899
900#define UNDEFINED_GREY_SHADE 7
901
902#define HAVE_SEQUENCE_STEP_CONTROL 1
903
904#define SEQUENCE_DIRECTION_FORWARD 0
905#define SEQUENCE_DIRECTION_REVERSE 1
906#define SEQUENCE_DIRECTION_PINGPONG 2
907#define SEQUENCE_DIRECTION_OBEY_PARENT 3
908#define NUM_SEQUENCE_DIRECTION_OPTIONS 3
909
910#define AUDIO_FILE_TYPE_SAMPLE 0
911#define AUDIO_FILE_TYPE_WAVETABLE 1
912
913#define WAVETABLE_MIN_CYCLE_SIZE 8 // Not 4 - because NE10 can't do FFTs that small unless we enable its additional C code, which would take up program size for little gain.
914#define WAVETABLE_MAX_CYCLE_SIZE 65536 // TODO: work out what this should actually be.
915
916
917#define MAX_IMAGE_STORE_WIDTH displayWidth
918
919#define NUM_EXPRESSION_DIMENSIONS 3
920
921#define EXPRESSION_X_PITCH_BEND 0
922#define EXPRESSION_Y_SLIDE_TIMBRE 1
923#define EXPRESSION_Z_PRESSURE 2
924
925#define MIDI_CHANNEL_MPE_LOWER_ZONE 16
926#define MIDI_CHANNEL_MPE_UPPER_ZONE 17
927#define MIDI_CHANNEL_NONE 255
928
929#define MIDI_OUTPUT_FILTER_NO_MPE 0 // To be used instead of MIDI_CHANNEL_MPE_LOWER_ZONE etc for functions that require a "midi output filter".
930 // Although in fact, any number <16 or >=18 would work, the way I've defined it.
931
932
933#define AUTOMATED_TESTER_ENABLED (0 && ALPHA_OR_BETA_VERSION)
934
935
936// OLED -----------------
937#define OLED_MAIN_WIDTH_PIXELS 128
938
939#define OLED_WIDTH_CHARS 16
940#define OLED_MENU_NUM_OPTIONS_VISIBLE (OLED_HEIGHT_CHARS - 1)
941
942
943#define CONSOLE_IMAGE_HEIGHT (OLED_MAIN_HEIGHT_PIXELS + 16)
944#define CONSOLE_IMAGE_NUM_ROWS (CONSOLE_IMAGE_HEIGHT >> 3)
945
946#define TEXT_SPACING_X 6
947#define TEXT_SPACING_Y 9
948#define TEXT_SIZE_Y_UPDATED 7
949
950#define TEXT_TITLE_SPACING_X 9
951#define TEXT_TITLE_SIZE_Y 10
952
953#define TEXT_BIG_SPACING_X 11
954#define TEXT_BIG_SIZE_Y 13
955
956#define TEXT_HUGE_SPACING_X 18
957#define TEXT_HUGE_SIZE_Y 20
958
959#define OLED_ALLOW_LOWER_CASE 0
960
961#define NOTE_FOR_DRUM 60
962
963
964#define BEND_RANGE_MAIN 0
965#define BEND_RANGE_FINGER_LEVEL 1
966
967#define MIDI_CHARACTERISTIC_NOTE 0
968#define MIDI_CHARACTERISTIC_CHANNEL 1
969
970#define PLAYBACK_STOP_SHOULD_CLEAR_MONO_EXPRESSION 1
971
972#define INDEPENDENT_NOTEROW_LENGTH_INCREASE_DOUBLE 0
973#define INDEPENDENT_NOTEROW_LENGTH_INCREASE_ROUND_UP 1
974
975// From FatFS - we need access to this:
976#define DIR_FileSize 28 /* File size (DWORD) */
977
978
979#define MAX_NUM_UINTS_TO_REP_ALL_PARAMS 2
980
981
982#if HAVE_OLED
983#define BROWSER_AND_MENU_NUM_LINES 3
984#else
985#define BROWSER_AND_MENU_NUM_LINES 1
986#endif
987
988
989#endif