better note stealing in bw_voice_alloc

This commit is contained in:
Stefano D'Angelo 2023-06-09 09:47:05 +02:00
parent a5741471d6
commit 8cd630c80e

View File

@ -99,6 +99,18 @@ void bw_voice_alloc(const bw_voice_alloc_opts *BW_RESTRICT opts, bw_note_queue *
int k = -1;
int v = ev->note;
for (int j = 0; j < n_voices; j++) {
int n = opts->get_note(voices[j]);
if (!queue->status[n].pressed && (k < 0 || (opts->mode == bw_voice_alloc_mode_low ? n > v : n < v))) {
v = n;
k = j;
}
}
if (k >= 0) {
opts->note_on(voices[k], ev->note, ev->status.velocity);
continue;
}
for (int j = 0; j < n_voices; j++) {
int n = opts->get_note(voices[j]);
if (opts->mode == bw_voice_alloc_mode_low ? n > v : n < v) {