Move the voice ordering as a free function

This commit is contained in:
Paul Ferrand 2020-05-08 00:16:50 +02:00
parent 6df5b217c9
commit 59c25dccf1
2 changed files with 30 additions and 27 deletions

View file

@ -482,27 +482,7 @@ sfz::Voice* sfz::Synth::findFreeVoice() noexcept
return freeVoice->get(); return freeVoice->get();
// Find voices that can be stolen // Find voices that can be stolen
absl::c_sort(voiceViewArray, [](Voice* lhs, Voice* rhs) { absl::c_sort(voiceViewArray, voiceOrdering);
if (lhs->getAge() > rhs->getAge())
return true;
if (lhs->getAge() < rhs->getAge())
return false;
if (lhs->getTriggerNumber() > rhs->getTriggerNumber())
return true;
if (lhs->getTriggerNumber() < rhs->getTriggerNumber())
return false;
if (lhs->getTriggerValue() > rhs->getTriggerValue())
return true;
if (lhs->getTriggerValue() < rhs->getTriggerValue())
return false;
if (lhs->getTriggerType() > rhs->getTriggerType())
return true;
return false;
});
const auto sumEnvelope = absl::c_accumulate(voiceViewArray, 0.0f, [](float sum, const Voice* v) { const auto sumEnvelope = absl::c_accumulate(voiceViewArray, 0.0f, [](float sum, const Voice* v) {
return sum + v->getAverageEnvelope(); return sum + v->getAverageEnvelope();

View file

@ -322,4 +322,27 @@ inline bool sisterVoices(const Voice* lhs, const Voice* rhs)
&& lhs->getTriggerType() == rhs->getTriggerType(); && lhs->getTriggerType() == rhs->getTriggerType();
} }
inline bool voiceOrdering(const Voice* lhs, const Voice* rhs)
{
if (lhs->getAge() > rhs->getAge())
return true;
if (lhs->getAge() < rhs->getAge())
return false;
if (lhs->getTriggerNumber() > rhs->getTriggerNumber())
return true;
if (lhs->getTriggerNumber() < rhs->getTriggerNumber())
return false;
if (lhs->getTriggerValue() > rhs->getTriggerValue())
return true;
if (lhs->getTriggerValue() < rhs->getTriggerValue())
return false;
if (lhs->getTriggerType() > rhs->getTriggerType())
return true;
return false;
}
} // namespace sfz } // namespace sfz