60 lines
1.6 KiB
C++
60 lines
1.6 KiB
C++
//
|
|
// MODE temperament
|
|
//
|
|
// MAJOR MODES
|
|
uint8_t _ionian[8] = { 0, 2, 4, 5, 7, 9, 11, 12 };
|
|
uint8_t _dorian[8] = { 0, 2, 3, 5, 7, 9, 10, 12 };
|
|
uint8_t _phrygian[8] = { 0, 1, 3, 5, 7, 8, 10, 12 };
|
|
uint8_t _lydian[8] = { 0, 2, 4, 6, 7, 9, 11, 12 };
|
|
uint8_t _mixolidian[8] = { 0, 2, 4, 5, 7, 9, 10, 12 };
|
|
uint8_t _aeolian[8] = { 0, 2, 3, 5, 7, 8, 10, 12 };
|
|
uint8_t _locrian[8] = { 0, 1, 3, 5, 6, 8, 10, 12 };
|
|
|
|
// MINOR MODES
|
|
// ascending melodic minor
|
|
uint8_t _melodic[8] = { 0, 2, 3, 5, 7, 9, 11, 12 };
|
|
// phrygian ♮6 (dorian ♭2)
|
|
uint8_t _phrygian6[8] = { 0, 1, 3, 5, 7, 9, 10, 12 };
|
|
// lydian augmented (lydian ♯5)
|
|
uint8_t _lydian5[8] = { 0, 2, 4, 6, 8, 9, 11, 12 };
|
|
// lydian dominant (also, "lydian ♭7", acoustic scale, or mixolydian ♯4)
|
|
uint8_t _lydian7[8] = { 0, 2, 4, 6, 7, 9, 10, 12 };
|
|
// mixolydian ♭6 (or melodic major or simply "fifth mode")
|
|
uint8_t _mixolydian6[8] = { 0, 2, 4, 5, 7, 8, 10, 12 };
|
|
// locrian ♮2 (also known as "half-diminished" scale)
|
|
uint8_t _locrian2[8] = { 0, 2, 3, 5, 6, 8, 10, 12 };
|
|
// super Locrian (also "altered dominant scale", or "altered scale")
|
|
uint8_t _super_locrian[8] = { 0, 1, 3, 4, 6, 8, 10, 12 };
|
|
|
|
uint8_t * _mode[] = {
|
|
// MAJOR MODES
|
|
_ionian,
|
|
_dorian,
|
|
_phrygian,
|
|
_lydian,
|
|
_mixolidian,
|
|
_aeolian,
|
|
_locrian,
|
|
// MINOR MODES
|
|
_melodic,
|
|
_phrygian6,
|
|
_lydian5,
|
|
_lydian7,
|
|
_mixolydian6,
|
|
_locrian2,
|
|
_super_locrian
|
|
};
|
|
|
|
#define MODES_NUMBER (sizeof(_mode) / sizeof(uint16_t)) // its array pointer we are holding here
|
|
|
|
uint8_t harmonizer(uint8_t note)
|
|
{
|
|
uint8_t octave, interval;
|
|
|
|
octave = floor(note/12);
|
|
interval = floor((note%12)/1.5);
|
|
|
|
return (octave*12) + _mode[_selected_mode][interval];
|
|
}
|
|
|