Если вы действительно хотите, чтобы это были простые массивы, вы можете просто создать макросы #define
(определения препроцессора) для аккордов и сделать так, чтобы прогрессии ссылались на эти аккорды:
typedef const float Chord[6];
#define CHORD_I { 5.0f / 6.0f, 1.0, 1.25, 5.0f / 3.0f, 2.0, 2.5 }
#define CHORD_VI { 5.0f / 6.0f, 2.0f / 3.0f, 1.0, 4.0f / 3.0f, 5.0f / 3.0f, 2.0 }
#define CHORD_III { 0.75, 1.0, 1.25, 1.5, 2.0, 2.5 }
#define CHORD_VII { 1.125, 1.5, 1.875, 2.25, 3.0, 3.75 }
const Chord progressionOne[] = {
CHORD_I,
CHORD_VI,
CHORD_III,
CHORD_VII,
};
const Chord progressionTwo[] = {
CHORD_VI,
CHORD_VII,
CHORD_I,
CHORD_I,
};
ПредварительноОпределения процессора не совсем понятны.
Если вы превратите Chord
в полноценный класс, вы можете определить их как локальные или статические переменные таким же образом, но с большей безопасностью типов и большей гибкостью.,Тогда вы могли бы ссылаться на progressionOne
, определяя progressionTwo
нужным вам способом (по крайней мере, вы можете с местными. С глобальными переменными вы можете столкнуться с "фиаско статической инициализации порядка" )