Minor Stuff. Branching out

This commit is contained in:
Oleksiy
2024-10-20 13:57:19 +03:00
parent a7fc9663da
commit 2285da9bd4

View File

@ -26,25 +26,25 @@ byte bpmModulationRange = 0;
struct channel { struct channel {
byte mode : 3; //mv: 7. 0 - CLK, 1 - RND, 2 - SEQ, 3 - SWING, 4 - Gate byte mode : 3; //mv: 7. 0 - CLK, 1 - RND, 2 - SEQ, 3 - SWING, 4 - Gate
byte subDiv : 5; //mv: 32 byte subDiv : 5; //mv: 32
byte CV1Target : 3; //0 - Off, 1 - Subdiv, 2 - RND, 3 - SeqPattern
byte CV2Target : 3;
uint8_t offset : 7; //mv: 128
byte random : 4; //mv: 16 byte random : 4; //mv: 16
byte seqPattern : 4; byte seqPattern : 4;
byte CV1Target : 3; //0 - Off, 1 - Subdiv, 2 - RND, 3 - SeqPattern
byte CV2Target : 3;
uint8_t swing : 3;
uint8_t offset : 7; //mv: 128
uint8_t gate : 6; //mv: 64 uint8_t gate : 6; //mv: 64
uint8_t swing : 3; //some of this params can be combinde into 4+4 bits to save space
}; };
channel channels[6] = { //array of channel settings channel channels[6] = { //array of channel settings
{ 0, 7, 0, 0, 0, 0, 0, 23, 0 }, { 0, 7, 0, 0, 0, 0, 0, 0, 0 },
{ 0, 7, 0, 0, 0, 0, 0, 23, 0 }, { 0, 7, 0, 0, 0, 0, 0, 0, 0 },
{ 0, 7, 0, 0, 0, 0, 0, 23, 0 }, { 0, 7, 0, 0, 0, 0, 0, 0, 0 },
{ 0, 7, 0, 0, 0, 0, 0, 23, 0 }, { 0, 7, 0, 0, 0, 0, 0, 0, 0 },
{ 0, 7, 0, 0, 0, 0, 0, 23, 0 }, { 0, 7, 0, 0, 0, 0, 0, 0, 0 },
{ 0, 7, 0, 0, 0, 0, 0, 23, 0 } { 0, 7, 0, 0, 0, 0, 0, 0, 0 }
}; };
bool seqA1[16] = {1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 1}; //switch to struct seqs { uint32_t sequence; uint8_t length; uint8_t subdiv }. test with lengthOf bool seqA1[16] = {1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 1}; //switch to struct seqs { uint32_t sequence; uint8_t length : 5 ; uint8_t currentStep : 5}. test with lengthOf
bool seqA2[16] = {0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0}; bool seqA2[16] = {0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0};
bool seqA3[16] = {1, 0, 0, 1, 0, 0, 1, 0, 0, 1, 0, 0, 1, 0, 0, 0}; bool seqA3[16] = {1, 0, 0, 1, 0, 0, 1, 0, 0, 1, 0, 0, 1, 0, 0, 0};
bool seqA4[16] = {0, 0, 1, 1, 0, 0, 1, 1, 0, 0, 1, 1, 0, 0, 1, 1}; bool seqA4[16] = {0, 0, 1, 1, 0, 0, 1, 1, 0, 0, 1, 1, 0, 0, 1, 1};
@ -64,7 +64,6 @@ byte currentStep = 0;
byte stepNumSelected = 0; byte stepNumSelected = 0;
bool *patternToEdit; bool *patternToEdit;
unsigned int channelPulseCount[6]; unsigned int channelPulseCount[6];
unsigned int channelPulsesPerCycle[6]; unsigned int channelPulsesPerCycle[6];
byte sixteenthPulseCount = 0; byte sixteenthPulseCount = 0;
@ -87,7 +86,7 @@ unsigned long newExtPulseTime = 0;
bool needPulseReset[6] = { true, true, true, true, true, true }; bool needPulseReset[6] = { true, true, true, true, true, true };
int gatePulseCount[6] = {0,0,0,0,0,0}; int gatePulseCount[6] = {0,0,0,0,0,0};
bool swingBit = 0; bool stepIsOdd = 1;
byte displayTab = 0; byte displayTab = 0;
bool insideTab = false; bool insideTab = false;
@ -300,10 +299,10 @@ void sendTriggers() { //rename to onPulse or something
playingModesOld[i] = playingModes[i]; playingModesOld[i] = playingModes[i];
} }
} }
//16th notes for sequencer //16th notes for sequencer and swing
if (sixteenthPulseCount == 0) { if (sixteenthPulseCount == 0) {
bool *currentSeq; bool *currentSeq;
stepIsOdd = !stepIsOdd;
for (byte i = 0; i < 6; i++) { for (byte i = 0; i < 6; i++) {
//pattern modulation //pattern modulation
@ -418,11 +417,10 @@ void sendTriggers() { //rename to onPulse or something
} }
} }
if ((channels[i].mode == 3 && channelPulseCount[i] == 0 && swingBit == 0) if ((channels[i].mode == 3 && channelPulseCount[i] == 0 && stepIsOdd == 0)
|| (channels[i].mode == 3 && channelPulseCount[i] == channels[i].swing && swingBit == 1 && currentStep %2 == 0) //swing || (channels[i].mode == 3 && channelPulseCount[i] == channels[i].swing && stepIsOdd == 1) //swing
) { ) {
digitalWrite(outsPins[i], HIGH); digitalWrite(outsPins[i], HIGH);
swingBit = !swingBit;
} }
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
@ -438,7 +436,6 @@ void sendTriggers() { //rename to onPulse or something
channelPulseCount[i] = 0; channelPulseCount[i] = 0;
} }
} }
} }
void calculateCycles() { void calculateCycles() {
@ -452,7 +449,7 @@ void calculateCycles() {
} }
playingModes[i] = subDivs[channels[i].subDiv - mod]; //subtracting because the innitial array is backwards playingModes[i] = subDivs[channels[i].subDiv - mod]; //subtracting because the innitial array is backwards
if (channels[i].mode == 2 || channels[i].mode == 3) { //Sequencer and swing plays 1/16th if (channels[i].mode == 2) { //} || channels[i].mode == 3) { //Sequencer and swing plays 1/16th
channelPulsesPerCycle[i] = (PPQN / 4) - 1; channelPulsesPerCycle[i] = (PPQN / 4) - 1;
} else if (playingModes[i] > 0) { } else if (playingModes[i] > 0) {
channelPulsesPerCycle[i] = (playingModes[i] * PPQN) - 1; channelPulsesPerCycle[i] = (playingModes[i] * PPQN) - 1;
@ -489,6 +486,7 @@ void resetClocks() {
tickCount = 0; tickCount = 0;
sixteenthPulseCount = 0; sixteenthPulseCount = 0;
currentStep = 0; currentStep = 0;
stepIsOdd = 1;
} }
void saveState() { void saveState() {