Intensity setting
This commit is contained in:
+9
-4
@@ -29,7 +29,7 @@ const uint8_t numRuleSets = sizeof(ruleSets) / sizeof(RuleSet);
|
||||
|
||||
class LSystemStrategy : public MelodyStrategy {
|
||||
public:
|
||||
void generate(Step (*sequence)[NUM_STEPS], int track, 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, int intensity) override {
|
||||
randomSeed(seed);
|
||||
if (numScaleNotes == 0) {
|
||||
// Fill with silence if no scale
|
||||
@@ -76,14 +76,19 @@ public:
|
||||
int octave_stack[8];
|
||||
int stack_ptr = 0;
|
||||
|
||||
// High intensity = more accents, fewer ties (staccato)
|
||||
// Low intensity = fewer accents, more ties (legato)
|
||||
int accentChance = intensity * 6; // 6% to 60%
|
||||
int tieChance = 50 - (intensity * 5); // 45% to 0%
|
||||
|
||||
for (char c : currentString) {
|
||||
if (stepIndex >= numSteps) break;
|
||||
|
||||
switch(c) {
|
||||
case 'F': case 'G': case 'A': case 'B': // Characters that draw notes
|
||||
sequence[track][stepIndex].note = 12 * octave + scaleNotes[noteIndex];
|
||||
sequence[track][stepIndex].accent = (random(100) < 25);
|
||||
sequence[track][stepIndex].tie = (random(100) < 10);
|
||||
sequence[track][stepIndex].accent = (random(100) < accentChance);
|
||||
sequence[track][stepIndex].tie = (random(100) < tieChance);
|
||||
stepIndex++;
|
||||
break;
|
||||
case '+': // Go up in scale
|
||||
@@ -135,7 +140,7 @@ public:
|
||||
sortArray(scaleNotes, numScaleNotes);
|
||||
}
|
||||
|
||||
void mutate(Step (*sequence)[NUM_STEPS], int track, int numSteps, int* scaleNotes, int numScaleNotes) override {
|
||||
void mutate(Step (*sequence)[NUM_STEPS], int track, int numSteps, int* scaleNotes, int numScaleNotes, int intensity) override {
|
||||
// Swap two non-rest steps to create a variation
|
||||
int s1 = random(numSteps);
|
||||
int s2 = random(numSteps);
|
||||
|
||||
Reference in New Issue
Block a user