Added sequence player
This commit is contained in:
@ -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];
|
||||||
|
|||||||
@ -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) {
|
||||||
@ -137,7 +154,7 @@ void checkInputs() {
|
|||||||
channels[displayTab - 1].CV2Target = 2;
|
channels[displayTab - 1].CV2Target = 2;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
updateScreen();
|
updateScreen();
|
||||||
encPositionOld = encPosition;
|
encPositionOld = encPosition;
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user