Use the same idiom for finding free voices
This commit is contained in:
parent
5139c648f0
commit
ff1be61dc1
1 changed files with 21 additions and 29 deletions
|
|
@ -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);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Add table
Reference in a new issue