Intensity setting
This commit is contained in:
@@ -6,7 +6,7 @@
|
||||
|
||||
class CellularAutomataStrategy : 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) return;
|
||||
|
||||
@@ -23,7 +23,8 @@ public:
|
||||
for(int i=0; i<numSteps; i++) cells[i] = false;
|
||||
cells[numSteps/2] = true;
|
||||
} else {
|
||||
for(int i=0; i<numSteps; i++) cells[i] = (random(100) < 30);
|
||||
int initChance = intensity * 8; // 8% to 80%
|
||||
for(int i=0; i<numSteps; i++) cells[i] = (random(100) < initChance);
|
||||
}
|
||||
|
||||
// Evolve for some generations to let patterns emerge
|
||||
@@ -43,7 +44,9 @@ public:
|
||||
|
||||
// Map to notes
|
||||
for (int i = 0; i < numSteps; i++) {
|
||||
if (cells[i]) {
|
||||
// Intensity also affects survival of active cells to notes
|
||||
// Intensity 1 = 50% survival, Intensity 10 = 100% survival
|
||||
if (cells[i] && random(100) < (50 + intensity * 5)) {
|
||||
int octave = 3 + random(3); // 3, 4, 5
|
||||
sequence[track][i].note = 12 * octave + scaleNotes[random(numScaleNotes)];
|
||||
sequence[track][i].accent = (random(100) < 30);
|
||||
@@ -71,7 +74,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 {
|
||||
// Evolve the current sequence by one generation
|
||||
// Use a random rule for mutation to keep it dynamic
|
||||
uint8_t rule = random(256);
|
||||
|
||||
Reference in New Issue
Block a user