@ -269,6 +269,7 @@ void Arpeggiator::reset()
for ( unsigned i = 0 ; i < NUM_VOICES ; i + + ) {
midiNotes [ i ] [ MIDI_NOTE ] = EMPTY_SLOT ;
midiNotes [ i ] [ MIDI_NOTE_VELOCITY ] = 0 ;
midiNotes [ i ] [ MIDI_CHANNEL ] = 0 ;
}
}
@ -304,6 +305,7 @@ void Arpeggiator::process(const MidiEvent* events, uint32_t eventCount, uint32_t
for ( unsigned clear_notes = 0 ; clear_notes < NUM_VOICES ; clear_notes + + ) {
midiNotes [ clear_notes ] [ MIDI_NOTE ] = EMPTY_SLOT ;
midiNotes [ clear_notes ] [ MIDI_NOTE_VELOCITY ] = 0 ;
midiNotes [ clear_notes ] [ MIDI_CHANNEL ] = 0 ;
}
}
@ -325,6 +327,7 @@ void Arpeggiator::process(const MidiEvent* events, uint32_t eventCount, uint32_t
uint8_t status = events [ i ] . data [ 0 ] & 0xF0 ;
uint8_t midiNote = events [ i ] . data [ 1 ] ;
uint8_t midiNoteVelocity = events [ i ] . data [ 2 ] ;
uint8_t noteToFind ;
uint8_t foundNote ;
size_t searchNote ;
@ -364,6 +367,7 @@ void Arpeggiator::process(const MidiEvent* events, uint32_t eventCount, uint32_t
activeNotes = 0 ;
for ( unsigned i = 0 ; i < NUM_VOICES ; i + + ) {
midiNotes [ i ] [ MIDI_NOTE ] = EMPTY_SLOT ;
midiNotes [ i ] [ MIDI_NOTE_VELOCITY ] = 0 ;
midiNotes [ i ] [ MIDI_CHANNEL ] = 0 ;
}
}
@ -388,6 +392,7 @@ void Arpeggiator::process(const MidiEvent* events, uint32_t eventCount, uint32_t
{
if ( midiNotes [ findFreeVoice ] [ MIDI_NOTE ] = = EMPTY_SLOT ) {
midiNotes [ findFreeVoice ] [ MIDI_NOTE ] = midiNote ;
midiNotes [ findFreeVoice ] [ MIDI_NOTE_VELOCITY ] = midiNoteVelocity ;
midiNotes [ findFreeVoice ] [ MIDI_CHANNEL ] = channel ;
voiceFound = true ;
}
@ -437,6 +442,7 @@ void Arpeggiator::process(const MidiEvent* events, uint32_t eventCount, uint32_t
if ( ! latchMode ) {
midiNotes [ foundNote ] [ MIDI_NOTE ] = EMPTY_SLOT ;
midiNotes [ foundNote ] [ MIDI_NOTE_VELOCITY ] = 0 ;
midiNotes [ foundNote ] [ MIDI_CHANNEL ] = 0 ;
if ( arpMode ! = ARP_PLAYED )
utils . quicksort ( midiNotes , 0 , NUM_VOICES - 1 ) ;
@ -593,6 +599,7 @@ void Arpeggiator::process(const MidiEvent* events, uint32_t eventCount, uint32_t
{
//create MIDI note on message
uint8_t midiNote = midiNotes [ notePlayed ] [ MIDI_NOTE ] ;
uint8_t midiNoteVelocity = midiNotes [ notePlayed ] [ MIDI_NOTE_VELOCITY ] ;
uint8_t channel = midiNotes [ notePlayed ] [ MIDI_CHANNEL ] ;
if ( arpEnabled ) {
@ -606,7 +613,11 @@ void Arpeggiator::process(const MidiEvent* events, uint32_t eventCount, uint32_t
midiEvent . size = 3 ;
midiEvent . data [ 0 ] = MIDI_NOTEON | channel ;
midiEvent . data [ 1 ] = midiNote ;
if ( velocity > 0 ) {
midiEvent . data [ 2 ] = velocity ;
} else {
midiEvent . data [ 2 ] = midiNoteVelocity ;
}
midiHandler . appendMidiMessage ( midiEvent ) ;