Added sequence player

This commit is contained in:
2023-07-30 23:25:14 +03:00
parent fe99d57afa
commit 189e233481
2 changed files with 52 additions and 19 deletions

View File

@ -65,23 +65,18 @@ channel channels[6] = { //array of channel settings
{ 0, 7, 0, 3, 0, 3, 0, 0, 0 } { 0, 7, 0, 3, 0, 3, 0, 0, 0 }
}; };
bool sequences[8][16] { bool seqA1[16] = {1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0};
{1, 0, 0, 1, 0, 0, 1, 0, 1, 0, 0, 1, 0, 1, 0, 0}, bool seqA2[16] = {0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0};
{1, 0, 0, 1, 0, 0, 1, 0, 1, 0, 0, 1, 0, 1, 0, 0}, bool seqA3[16] = {1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1};
{1, 0, 0, 1, 0, 0, 1, 0, 1, 0, 0, 1, 0, 1, 0, 0}, bool seqA4[16] = {1, 1, 0, 0, 1, 1, 0, 0, 1, 1, 0, 0, 1, 1, 0, 0};
{1, 0, 0, 1, 0, 0, 1, 0, 1, 0, 0, 1, 0, 1, 0, 0}, bool *currentSeq;
{1, 0, 0, 1, 0, 0, 1, 0, 1, 0, 0, 1, 0, 1, 0, 0}, int currentStep = 0;
{1, 0, 0, 1, 0, 0, 1, 0, 1, 0, 0, 1, 0, 1, 0, 0},
{1, 0, 0, 1, 0, 0, 1, 0, 1, 0, 0, 1, 0, 1, 0, 0},
{1, 0, 0, 1, 0, 0, 1, 0, 1, 0, 0, 1, 0, 1, 0, 0}
};
byte seqStepCount[8] = {0,0,0,0,0,0,0,0};
byte memCode = 'A'; //Change to different letter if you changed the data structure byte memCode = 'A'; //Change to different letter if you changed the data structure
int channelPulseCount[6]; int channelPulseCount[6];
int channelPulsesPerCycle[6]; int channelPulsesPerCycle[6];
int sixteenthPulseCount = 0;
int playingModes[6]; //actual channel modes array updated from channels object on each beat int playingModes[6]; //actual channel modes array updated from channels object on each beat
unsigned int pulsePeriod; unsigned int pulsePeriod;
@ -272,6 +267,25 @@ void sendTriggers() {
} }
} }
//16th notes for sequencer
if (sixteenthPulseCount == 0) {
for (byte i = 0; i < 6; i++) {
if (channels[i].mode == 2 && channelPulseCount[i] == 0 && currentSeq[currentStep]) {
digitalWrite(outsPins[i], HIGH);
}
}
}
if (sixteenthPulseCount < (PPQN / 4) - 1) {
sixteenthPulseCount++;
} else {
sixteenthPulseCount = 0;
if (currentStep < 15) {
currentStep ++;
} else {
currentStep = 0;
}
}
//switching modes on the beat and resetting channel clock //switching modes on the beat and resetting channel clock
if (pulseCount == 0) { if (pulseCount == 0) {
calculateCycles(); calculateCycles();
@ -285,7 +299,6 @@ void sendTriggers() {
//multiplier //multiplier
for (byte i = 0; i < 6; i++) { for (byte i = 0; i < 6; i++) {
int currentSeq = channels[i].seqPattern;
//RND modulation //RND modulation
byte randMod = 0; byte randMod = 0;
@ -306,9 +319,9 @@ void sendTriggers() {
} }
if ((channels[i].mode == 0 && channelPulseCount[i] == channels[i].offset) || //CLK with offset if ((channels[i].mode == 0 && channelPulseCount[i] == channels[i].offset) //CLK with offset
(channels[i].mode == 1 && channelPulseCount[i] == 0 && (random(10) + 1) > randAmount) //|| //RND || (channels[i].mode == 1 && channelPulseCount[i] == 0 && (random(10) + 1) > randAmount) //RND
//(channels[i].mode == 2 && channelPulseCount[i] == 0 && sequences[currentSeq][0]) //SEQ (for some reason doesn't lke variables inside the index) //|| (channels[i].mode == 2 && channelPulseCount[i] == 0 && currentSeq[currentStep])
) { ) {
digitalWrite(outsPins[i], HIGH); digitalWrite(outsPins[i], HIGH);
} }
@ -318,6 +331,7 @@ void sendTriggers() {
channelPulseCount[i] = 0; channelPulseCount[i] = 0;
} }
} }
} }
void calculateCycles() { void calculateCycles() {
@ -337,10 +351,12 @@ void calculateCycles() {
playingModes[i] = subDivs[channels[i].subDiv - mod]; playingModes[i] = subDivs[channels[i].subDiv - mod];
} }
if (playingModes[i] > 0) { if (playingModes[i] > 0 && channels[i].mode != 2) {
channelPulsesPerCycle[i] = (playingModes[i] * PPQN) - 1; channelPulsesPerCycle[i] = (playingModes[i] * PPQN) - 1;
} else { } else if (playingModes[i] <= 0 && channels[i].mode != 2) {
channelPulsesPerCycle[i] = (PPQN / abs(playingModes[i])) - 1; channelPulsesPerCycle[i] = (PPQN / abs(playingModes[i])) - 1;
} else if (channels[i].mode == 2) { //Sequencer plays 1/16th
channelPulsesPerCycle[i] = (PPQN / 4) - 1;
} }
if (channels[i].offset > channelPulsesPerCycle[i]) { if (channels[i].offset > channelPulsesPerCycle[i]) {
channels[i].offset = channelPulsesPerCycle[i]; channels[i].offset = channelPulsesPerCycle[i];

View File

@ -106,6 +106,23 @@ void checkInputs() {
} else if (channels[displayTab - 1].random > 9) { } else if (channels[displayTab - 1].random > 9) {
channels[displayTab - 1].random = 9; channels[displayTab - 1].random = 9;
} }
} else if (insideTab && shiftBtnPushed && displayTab != 0 && menuItem == 1 && channels[displayTab - 1].mode == 2) { //Seq PAttern
channels[displayTab - 1].seqPattern = channels[displayTab - 1].seqPattern + change;
if (channels[displayTab - 1].seqPattern > 100) {
channels[displayTab - 1].seqPattern = 0;
} else if (channels[displayTab - 1].seqPattern > 8) {
channels[displayTab - 1].seqPattern = 8;
}
if (channels[displayTab - 1].seqPattern == 0) {
currentSeq = seqA1;
} else if (channels[displayTab - 1].seqPattern == 1) {
currentSeq = seqA2;
} else if (channels[displayTab - 1].seqPattern == 2) {
currentSeq = seqA3;
} else if (channels[displayTab - 1].seqPattern == 3) {
currentSeq = seqA4;
}
} else if (insideTab && shiftBtnPushed && displayTab != 0 && menuItem == 2 && channels[displayTab - 1].mode == 0) { //CV1 for CLK } else if (insideTab && shiftBtnPushed && displayTab != 0 && menuItem == 2 && channels[displayTab - 1].mode == 0) { //CV1 for CLK
channels[displayTab - 1].CV1Target = channels[displayTab - 1].CV1Target + change; channels[displayTab - 1].CV1Target = channels[displayTab - 1].CV1Target + change;
if (channels[displayTab - 1].CV1Target > 100) { if (channels[displayTab - 1].CV1Target > 100) {