|
|
@ -124,6 +124,7 @@ void ClockOut96PPQN(uint32_t * tick) |
|
|
|
Serial.write(MIDI_CLOCK); |
|
|
|
Serial.write(MIDI_CLOCK); |
|
|
|
|
|
|
|
|
|
|
|
// handle note on stack
|
|
|
|
// handle note on stack
|
|
|
|
|
|
|
|
// [1] is notes to be glided, its in hold on mode until we reach the glided step
|
|
|
|
if ( _note_stack[1].length != -1 ) { |
|
|
|
if ( _note_stack[1].length != -1 ) { |
|
|
|
--_note_stack[1].length; |
|
|
|
--_note_stack[1].length; |
|
|
|
if ( _note_stack[1].length == 0 ) { |
|
|
|
if ( _note_stack[1].length == 0 ) { |
|
|
@ -131,6 +132,7 @@ void ClockOut96PPQN(uint32_t * tick) |
|
|
|
_note_stack[1].length = -1; |
|
|
|
_note_stack[1].length = -1; |
|
|
|
} |
|
|
|
} |
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
// [0] is the actual step note stack
|
|
|
|
if ( _note_stack[0].length != -1 ) { |
|
|
|
if ( _note_stack[0].length != -1 ) { |
|
|
|
--_note_stack[0].length; |
|
|
|
--_note_stack[0].length; |
|
|
|
if ( _note_stack[0].length == 0 ) { |
|
|
|
if ( _note_stack[0].length == 0 ) { |
|
|
@ -139,12 +141,6 @@ void ClockOut96PPQN(uint32_t * tick) |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
// time to let glide go away? be shure to send glided note off after the actual step send his note on
|
|
|
|
|
|
|
|
// same note? do not send note off
|
|
|
|
|
|
|
|
//if ( _sequencer[_last_step].glide == true && _sequencer[_step].note != _sequencer[_last_step].note ) {
|
|
|
|
|
|
|
|
// sendMidiMessage(NOTE_OFF, _sequencer[_last_step].note, 0);
|
|
|
|
|
|
|
|
//}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// BPM led indicator
|
|
|
|
// BPM led indicator
|
|
|
|
if ( !(*tick % (96)) || (*tick == 0) ) { // first compass step will flash longer
|
|
|
|
if ( !(*tick % (96)) || (*tick == 0) ) { // first compass step will flash longer
|
|
|
|
_bpm_blink_timer = 8; |
|
|
|
_bpm_blink_timer = 8; |
|
|
@ -169,7 +165,6 @@ void onClockStart() |
|
|
|
void onClockStop()
|
|
|
|
void onClockStop()
|
|
|
|
{ |
|
|
|
{ |
|
|
|
Serial.write(MIDI_STOP); |
|
|
|
Serial.write(MIDI_STOP); |
|
|
|
//sendMidiMessage(NOTE_OFF, _last_note_on, 0);
|
|
|
|
|
|
|
|
sendMidiMessage(NOTE_OFF, _note_stack[1].note, 0); |
|
|
|
sendMidiMessage(NOTE_OFF, _note_stack[1].note, 0); |
|
|
|
sendMidiMessage(NOTE_OFF, _note_stack[0].note, 0); |
|
|
|
sendMidiMessage(NOTE_OFF, _note_stack[0].note, 0); |
|
|
|
_playing = false; |
|
|
|
_playing = false; |
|
|
@ -342,7 +337,7 @@ void processPots() |
|
|
|
// changes on octave or note pot?
|
|
|
|
// changes on octave or note pot?
|
|
|
|
if ( octave != -1 || note != -1 ) { |
|
|
|
if ( octave != -1 || note != -1 ) { |
|
|
|
_sequencer[_step_edit].note = (_last_octave * 8) + _last_note; |
|
|
|
_sequencer[_step_edit].note = (_last_octave * 8) + _last_note; |
|
|
|
if ( _playing == false ) { |
|
|
|
if ( _playing == false && _sequencer[_step_edit].rest == false ) { |
|
|
|
sendPreviewNote(_step_edit); |
|
|
|
sendPreviewNote(_step_edit); |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
@ -376,7 +371,7 @@ void processButtons() |
|
|
|
if ( _step_edit != 0 ) { |
|
|
|
if ( _step_edit != 0 ) { |
|
|
|
--_step_edit; |
|
|
|
--_step_edit; |
|
|
|
} |
|
|
|
} |
|
|
|
if ( _playing == false ) { |
|
|
|
if ( _playing == false && _sequencer[_step_edit].rest == false ) { |
|
|
|
sendPreviewNote(_step_edit); |
|
|
|
sendPreviewNote(_step_edit); |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
@ -386,7 +381,7 @@ void processButtons() |
|
|
|
if ( _step_edit < _step_length-1 ) { |
|
|
|
if ( _step_edit < _step_length-1 ) { |
|
|
|
++_step_edit; |
|
|
|
++_step_edit; |
|
|
|
} |
|
|
|
} |
|
|
|
if ( _playing == false ) { |
|
|
|
if ( _playing == false && _sequencer[_step_edit].rest == false ) { |
|
|
|
sendPreviewNote(_step_edit); |
|
|
|
sendPreviewNote(_step_edit); |
|
|
|
}
|
|
|
|
}
|
|
|
|
} |
|
|
|
} |
|
|
@ -394,6 +389,9 @@ void processButtons() |
|
|
|
// step rest
|
|
|
|
// step rest
|
|
|
|
if ( pressed(REST_BUTTON_PIN) ) { |
|
|
|
if ( pressed(REST_BUTTON_PIN) ) { |
|
|
|
_sequencer[_step_edit].rest = !_sequencer[_step_edit].rest; |
|
|
|
_sequencer[_step_edit].rest = !_sequencer[_step_edit].rest; |
|
|
|
|
|
|
|
if ( _playing == false && _sequencer[_step_edit].rest == false ) { |
|
|
|
|
|
|
|
sendPreviewNote(_step_edit); |
|
|
|
|
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
// step glide
|
|
|
|
// step glide
|
|
|
@ -404,6 +402,9 @@ void processButtons() |
|
|
|
// step accent
|
|
|
|
// step accent
|
|
|
|
if ( pressed(ACCENT_BUTTON_PIN) ) { |
|
|
|
if ( pressed(ACCENT_BUTTON_PIN) ) { |
|
|
|
_sequencer[_step_edit].accent = !_sequencer[_step_edit].accent; |
|
|
|
_sequencer[_step_edit].accent = !_sequencer[_step_edit].accent; |
|
|
|
|
|
|
|
if ( _playing == false && _sequencer[_step_edit].rest == false ) { |
|
|
|
|
|
|
|
sendPreviewNote(_step_edit); |
|
|
|
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|