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
+10 -10
View File
@@ -6,15 +6,15 @@
class LuckyStrategy : 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;
for (int i = 0; i < numSteps; i++) {
int octave = random(3) + 3; // 3, 4, 5 (Base is 4)
sequence[i].note = (random(100) < 50) ? (12 * octave + scaleNotes[random(numScaleNotes)]) : -1;
sequence[i].accent = (random(100) < 30);
sequence[i].tie = (random(100) < 20);
sequence[track][i].note = (random(100) < 50) ? (12 * octave + scaleNotes[random(numScaleNotes)]) : -1;
sequence[track][i].accent = (random(100) < 30);
sequence[track][i].tie = (random(100) < 20);
}
randomSeed(micros());
}
@@ -34,17 +34,17 @@ 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 {
// Mutate 1 or 2 steps
int count = random(1, 3);
for (int i = 0; i < count; i++) {
int s = random(numSteps);
if (sequence[s].note != -1) {
if (sequence[track][s].note != -1) {
int r = random(100);
if (r < 30) sequence[s].accent = !sequence[s].accent;
else if (r < 60) sequence[s].tie = !sequence[s].tie;
else if (r < 80) sequence[s].note += 12; // Up octave
else sequence[s].note -= 12; // Down octave
if (r < 30) sequence[track][s].accent = !sequence[track][s].accent;
else if (r < 60) sequence[track][s].tie = !sequence[track][s].tie;
else if (r < 80) sequence[track][s].note += 12; // Up octave
else sequence[track][s].note -= 12; // Down octave
}
}
}