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,17 +1006,13 @@ 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. ASSERT(selectedVoice->isFree());
// This is a degraded case but we'll just drop the note on. selectedVoice->startVoice(region, delay, noteNumber, velocity, Voice::TriggerType::NoteOn);
if (selectedVoice == nullptr) ring.addVoiceToRing(selectedVoice);
continue; RegionSet::registerVoiceInHierarchy(region, selectedVoice);
polyphonyGroups[region->group].registerVoice(selectedVoice);
ASSERT(selectedVoice->isFree()); }
selectedVoice->startVoice(region, delay, noteNumber, velocity, Voice::TriggerType::NoteOn);
ring.addVoiceToRing(selectedVoice);
RegionSet::registerVoiceInHierarchy(region, selectedVoice);
polyphonyGroups[region->group].registerVoice(selectedVoice);
} }
} }
} }
@ -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);
} }
} }
} }