Poly mode

This commit is contained in:
Dejvino
2026-02-18 14:50:03 +01:00
parent 4180bb6a12
commit 5ea0070283
9 changed files with 496 additions and 219 deletions
+13 -13
View File
@@ -6,7 +6,7 @@
class EuclideanStrategy : public MelodyStrategy {
public:
void generate(Step* sequence, int numSteps, int* scaleNotes, int numScaleNotes, int seed) override {
void generate(Step (*sequence)[NUM_STEPS], int track, int numSteps, int* scaleNotes, int numScaleNotes, int seed) override {
randomSeed(seed);
if (numScaleNotes == 0) return;
@@ -34,13 +34,13 @@ public:
if (pattern[i]) {
int octave = random(3) + 3; // 3, 4, 5
sequence[stepIndex].note = 12 * octave + scaleNotes[random(numScaleNotes)];
sequence[stepIndex].accent = (random(100) < 30);
sequence[stepIndex].tie = (random(100) < 10);
sequence[track][stepIndex].note = 12 * octave + scaleNotes[random(numScaleNotes)];
sequence[track][stepIndex].accent = (random(100) < 30);
sequence[track][stepIndex].tie = (random(100) < 10);
} else {
sequence[stepIndex].note = -1;
sequence[stepIndex].accent = false;
sequence[stepIndex].tie = false;
sequence[track][stepIndex].note = -1;
sequence[track][stepIndex].accent = false;
sequence[track][stepIndex].tie = false;
}
}
randomSeed(micros());
@@ -61,20 +61,20 @@ public:
sortArray(scaleNotes, numScaleNotes);
}
void mutate(Step* sequence, int numSteps, int* scaleNotes, int numScaleNotes) override {
void mutate(Step (*sequence)[NUM_STEPS], int track, int numSteps, int* scaleNotes, int numScaleNotes) override {
// Rotate sequence
if (random(2) == 0) {
Step last = sequence[numSteps - 1];
Step last = sequence[track][numSteps - 1];
for (int i = numSteps - 1; i > 0; i--) {
sequence[i] = sequence[i - 1];
sequence[track][i] = sequence[track][i - 1];
}
sequence[0] = last;
sequence[track][0] = last;
} else {
// Randomize a note
int s = random(numSteps);
if (sequence[s].note != -1) {
if (sequence[track][s].note != -1) {
int octave = random(3) + 3;
sequence[s].note = 12 * octave + scaleNotes[random(numScaleNotes)];
sequence[track][s].note = 12 * octave + scaleNotes[random(numScaleNotes)];
}
}
}