3#include "model/scale/note_set.h"
27#define DEF_NOTES(...) NoteSet({__VA_ARGS__})
34 DEF(MAJOR_SCALE, "MAJOR", DEF_NOTES(0, 2, 4, 5, 7, 9, 11)) \
36 DEF(MINOR_SCALE, "MINOR", DEF_NOTES(0, 2, 3, 5, 7, 8, 10)) \
38 DEF(DORIAN_SCALE, "DORIAN", DEF_NOTES(0, 2, 3, 5, 7, 9, 10)) \
40 DEF(PHRYGIAN_SCALE, "PHRYGIAN", DEF_NOTES(0, 1, 3, 5, 7, 8, 10)) \
42 DEF(LYDIAN_SCALE, "LYDIAN", DEF_NOTES(0, 2, 4, 6, 7, 9, 11)) \
44 DEF(MIXOLYDIAN_SCALE, "MIXOLYDIAN", DEF_NOTES(0, 2, 4, 5, 7, 9, 10)) \
46 DEF(LOCRIAN_SCALE, "LOCRIAN", DEF_NOTES(0, 1, 3, 5, 6, 8, 10)) \
49 DEF(MELODIC_MINOR_SCALE, "MELODIC MINOR", DEF_NOTES(0, 2, 3, 5, 7, 9, 11)) \
51 DEF(HARMONIC_MINOR_SCALE, "HARMONIC MINOR", DEF_NOTES(0, 2, 3, 5, 7, 8, 11)) \
54 DEF(HUNGARIAN_MINOR_SCALE, "HUNGARIAN MINOR", DEF_NOTES(0, 2, 3, 6, 7, 8, 11)) \
56 DEF(MARVA_SCALE, "MARVA", DEF_NOTES(0, 1, 4, 6, 7, 9, 11)) \
58 DEF(ARABIAN_SCALE, "ARABIAN", DEF_NOTES(0, 2, 4, 5, 6, 8, 10)) \
61 DEF(WHOLE_TONE_SCALE, "WHOLE TONE", DEF_NOTES(0, 2, 4, 6, 8, 10, 0)) \
63 DEF(BLUES_SCALE, "BLUES", DEF_NOTES(0, 3, 5, 6, 7, 10, 0)) \
66 DEF(PENTATONIC_MINOR_SCALE, "PENTATONIC MINOR", DEF_NOTES(0, 3, 5, 7, 10)) \
68 DEF(HIRAJOSHI_SCALE, "HIRAJOSHI", DEF_NOTES(0, 2, 3, 7, 8))
74#define DEF(id, name, notes) id,
78 LAST_PRESET_SCALE = HIRAJOSHI_SCALE,
80 USER_SCALE = NUM_PRESET_SCALES,
82 RANDOM_SCALE = NUM_ALL_SCALES,
88#define FIRST_6_NOTE_SCALE_INDEX WHOLE_TONE_SCALE
89#define FIRST_5_NOTE_SCALE_INDEX PENTATONIC_MINOR_SCALE
93#define OFFICIAL_FIRMWARE_RANDOM_SCALE_INDEX 7
94#define OFFICIAL_FIRMWARE_NONE_SCALE_INDEX 8
96extern const NoteSet presetScaleNotes[NUM_PRESET_SCALES];
97extern std::array<char const*, NUM_SCALELIKE> scalelikeNames;
99const char* getScaleName(Scale scale);
103bool isUserScale(
NoteSet notes);
105void ensureNotAllPresetScalesDisabled(std::bitset<NUM_PRESET_SCALES>& disabled);
115Scale flashStorageCodeToScale(uint8_t code);
116uint8_t scaleToFlashStorageCode(Scale scale);