#ifndef ARP_STRATEGY_H #define ARP_STRATEGY_H #include "MelodyStrategy.h" #include class ArpStrategy : public MelodyStrategy { public: void generate(Step* sequence, int numSteps, int* scaleNotes, int numScaleNotes, int seed) override { randomSeed(seed); if (numScaleNotes == 0) return; int currentNoteIndex = 0; int octave = 4; for (int i = 0; i < numSteps; i++) { sequence[i].note = 12 * octave + scaleNotes[currentNoteIndex]; sequence[i].accent = (i % 4 == 0); // Accent on beat sequence[i].tie = false; currentNoteIndex++; if (currentNoteIndex >= numScaleNotes) { currentNoteIndex = 0; octave++; if (octave > 5) octave = 3; } } randomSeed(micros()); } void mutate(Step* sequence, int numSteps, int* scaleNotes, int numScaleNotes) override { // Swap two notes int s1 = random(numSteps); int s2 = random(numSteps); if (sequence[s1].note != -1 && sequence[s2].note != -1) { int8_t temp = sequence[s1].note; sequence[s1].note = sequence[s2].note; sequence[s2].note = temp; } } const char* getName() override { return "Arp"; } }; #endif