PicoWaveTracker/ArpStrategy.h
2026-02-17 00:19:39 +01:00

47 lines
1.3 KiB
C++

#ifndef ARP_STRATEGY_H
#define ARP_STRATEGY_H
#include "MelodyStrategy.h"
#include <Arduino.h>
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