Drone strategy and fixed MIDI panic
This commit is contained in:
+15
-8
@@ -60,9 +60,13 @@ static void handlePlayback() {
|
||||
}
|
||||
|
||||
playbackStep++;
|
||||
bool justPanicked = false;
|
||||
if (playbackStep >= numSteps) {
|
||||
playbackStep = 0;
|
||||
|
||||
for (int i=0; i<NUM_TRACKS; i++) midi.panic(midiChannels[i]);
|
||||
justPanicked = true;
|
||||
|
||||
// Theme change
|
||||
if (sequenceChangeScheduled && queuedTheme != -1) {
|
||||
currentThemeIndex = queuedTheme;
|
||||
@@ -82,8 +86,6 @@ static void handlePlayback() {
|
||||
midi.unlock();
|
||||
}
|
||||
|
||||
for (int i=0; i<NUM_TRACKS; i++) midi.panic(midiChannels[i]);
|
||||
|
||||
if (sequenceChangeScheduled) {
|
||||
memcpy(local_sequence, local_nextSequence, sizeof(local_sequence));
|
||||
midi.lock();
|
||||
@@ -112,16 +114,21 @@ static void handlePlayback() {
|
||||
// Note On for new step
|
||||
for(int t=0; t<NUM_TRACKS; t++) {
|
||||
int trackChannel = midiChannels[t];
|
||||
if (!trackMute[t] && local_sequence[t][playbackStep].note != -1) {
|
||||
uint8_t velocity = local_sequence[t][playbackStep].accent ? 127 : 100;
|
||||
midi.sendNoteOn(local_sequence[t][playbackStep].note, velocity, trackChannel);
|
||||
}
|
||||
|
||||
int prevStep = (playbackStep == 0) ? numSteps - 1 : playbackStep - 1;
|
||||
bool wasTied = local_sequence[t][prevStep].tie && (local_sequence[t][playbackStep].note != -1);
|
||||
int prevNote = local_sequence[t][prevStep].note;
|
||||
int currentNote = local_sequence[t][playbackStep].note;
|
||||
|
||||
// If tied to the SAME note, do not retrigger (sustain)
|
||||
bool isContinuing = wasTied && (prevNote == currentNote) && !justPanicked;
|
||||
|
||||
if (!trackMute[t] && currentNote != -1 && !isContinuing) {
|
||||
uint8_t velocity = local_sequence[t][playbackStep].accent ? 127 : 100;
|
||||
midi.sendNoteOn(currentNote, velocity, trackChannel);
|
||||
}
|
||||
|
||||
// Note Off for previous step (if tied - delayed Note Off)
|
||||
if (wasTied && prevNote != -1) {
|
||||
if (wasTied && prevNote != -1 && !isContinuing && !justPanicked) {
|
||||
midi.sendNoteOff(prevNote, trackChannel);
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user