Files
AciduinoCV/AcidTHarmonizer.ino

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];
}