Use the same idiom for finding free voices

This commit is contained in:
Paul Ferrand 2020-08-25 19:36:49 +02:00
parent 5139c648f0
commit ff1be61dc1

View file

@ -922,14 +922,13 @@ void sfz::Synth::noteOffDispatch(int delay, int noteNumber, float velocity) noex
continue; continue;
} }
auto voice = findFreeVoice(); if (Voice* selectedVoice = findFreeVoice()) {
if (voice == nullptr) ASSERT(selectedVoice->isFree());
continue; selectedVoice->startVoice(region, delay, noteNumber, velocity, Voice::TriggerType::NoteOff);
ring.addVoiceToRing(selectedVoice);
voice->startVoice(region, delay, noteNumber, velocity, Voice::TriggerType::NoteOff); RegionSet::registerVoiceInHierarchy(region, selectedVoice);
ring.addVoiceToRing(voice); polyphonyGroups[region->group].registerVoice(selectedVoice);
RegionSet::registerVoiceInHierarchy(region, voice); }
polyphonyGroups[region->group].registerVoice(voice);
} }
} }
} }
@ -1007,12 +1006,7 @@ void sfz::Synth::noteOnDispatch(int delay, int noteNumber, float velocity) noexc
parent = parent->getParent(); parent = parent->getParent();
} }
Voice* selectedVoice = findFreeVoice(); if (Voice* selectedVoice = findFreeVoice()) {
// For some reason we did not find a voice to use.
// This is a degraded case but we'll just drop the note on.
if (selectedVoice == nullptr)
continue;
ASSERT(selectedVoice->isFree()); ASSERT(selectedVoice->isFree());
selectedVoice->startVoice(region, delay, noteNumber, velocity, Voice::TriggerType::NoteOn); selectedVoice->startVoice(region, delay, noteNumber, velocity, Voice::TriggerType::NoteOn);
ring.addVoiceToRing(selectedVoice); ring.addVoiceToRing(selectedVoice);
@ -1020,6 +1014,7 @@ void sfz::Synth::noteOnDispatch(int delay, int noteNumber, float velocity) noexc
polyphonyGroups[region->group].registerVoice(selectedVoice); polyphonyGroups[region->group].registerVoice(selectedVoice);
} }
} }
}
} }
void sfz::Synth::cc(int delay, int ccNumber, uint8_t ccValue) noexcept void sfz::Synth::cc(int delay, int ccNumber, uint8_t ccValue) noexcept
@ -1090,16 +1085,13 @@ void sfz::Synth::hdcc(int delay, int ccNumber, float normValue) noexcept
} }
if (region->registerCC(ccNumber, normValue)) { if (region->registerCC(ccNumber, normValue)) {
auto voice = findFreeVoice(); if (Voice* selectedVoice = findFreeVoice()) {
if (voice == nullptr) ASSERT(selectedVoice->isFree());
continue; selectedVoice->startVoice(region, delay, ccNumber, normValue, Voice::TriggerType::CC);
ring.addVoiceToRing(selectedVoice);
RegionSet::registerVoiceInHierarchy(region, selectedVoice);
voice->startVoice(region, delay, ccNumber, normValue, Voice::TriggerType::CC); polyphonyGroups[region->group].registerVoice(selectedVoice);
}
ring.addVoiceToRing(voice);
RegionSet::registerVoiceInHierarchy(region, voice);
polyphonyGroups[region->group].registerVoice(voice);
} }
} }
} }