Fix a problem of unwanted copy
This commit is contained in:
parent
ce43bb39ff
commit
45fe825bc0
2 changed files with 7 additions and 7 deletions
|
|
@ -271,8 +271,8 @@ void pitchBendEnvelope(const EventVector& events, absl::Span<float> envelope, F&
|
||||||
template <class F>
|
template <class F>
|
||||||
void linearModifier(const sfz::Resources& resources, absl::Span<float> span, const sfz::CCData<sfz::Modifier>& ccData, F&& lambda)
|
void linearModifier(const sfz::Resources& resources, absl::Span<float> span, const sfz::CCData<sfz::Modifier>& ccData, F&& lambda)
|
||||||
{
|
{
|
||||||
const auto events = resources.midiState.getCCEvents(ccData.cc);
|
const auto& events = resources.midiState.getCCEvents(ccData.cc);
|
||||||
const auto curve = resources.curves.getCurve(ccData.data.curve);
|
const auto& curve = resources.curves.getCurve(ccData.data.curve);
|
||||||
if (ccData.data.step == 0.0f) {
|
if (ccData.data.step == 0.0f) {
|
||||||
linearEnvelope(events, span, [&ccData, &curve, &lambda](float x) {
|
linearEnvelope(events, span, [&ccData, &curve, &lambda](float x) {
|
||||||
return lambda(curve.evalNormalized(x) * ccData.data.value);
|
return lambda(curve.evalNormalized(x) * ccData.data.value);
|
||||||
|
|
@ -301,8 +301,8 @@ void linearModifier(const sfz::Resources& resources, absl::Span<float> span, con
|
||||||
template <class F>
|
template <class F>
|
||||||
void multiplicativeModifier(const sfz::Resources& resources, absl::Span<float> span, const sfz::CCData<sfz::Modifier>& ccData, F&& lambda)
|
void multiplicativeModifier(const sfz::Resources& resources, absl::Span<float> span, const sfz::CCData<sfz::Modifier>& ccData, F&& lambda)
|
||||||
{
|
{
|
||||||
const auto events = resources.midiState.getCCEvents(ccData.cc);
|
const auto& events = resources.midiState.getCCEvents(ccData.cc);
|
||||||
const auto curve = resources.curves.getCurve(ccData.data.curve);
|
const auto& curve = resources.curves.getCurve(ccData.data.curve);
|
||||||
if (ccData.data.step == 0.0f) {
|
if (ccData.data.step == 0.0f) {
|
||||||
multiplicativeEnvelope(events, span, [&ccData, &curve, &lambda](float x) {
|
multiplicativeEnvelope(events, span, [&ccData, &curve, &lambda](float x) {
|
||||||
return lambda(curve.evalNormalized(x) * ccData.data.value);
|
return lambda(curve.evalNormalized(x) * ccData.data.value);
|
||||||
|
|
|
||||||
|
|
@ -142,7 +142,7 @@ void sfz::Voice::startVoice(Region* region, int delay, int number, float value,
|
||||||
ASSERT(modifierSmoothers[modId].size() >= region->modifiers[modId].size());
|
ASSERT(modifierSmoothers[modId].size() >= region->modifiers[modId].size());
|
||||||
forEachWithSmoother(modId, [modId, this](const CCData<Modifier>& mod, Smoother& smoother) {
|
forEachWithSmoother(modId, [modId, this](const CCData<Modifier>& mod, Smoother& smoother) {
|
||||||
const auto ccValue = resources.midiState.getCCValue(mod.cc);
|
const auto ccValue = resources.midiState.getCCValue(mod.cc);
|
||||||
const auto curve = resources.curves.getCurve(mod.data.curve);
|
const auto& curve = resources.curves.getCurve(mod.data.curve);
|
||||||
const auto finalValue = curve.evalNormalized(ccValue) * mod.data.value;
|
const auto finalValue = curve.evalNormalized(ccValue) * mod.data.value;
|
||||||
switch (modId) {
|
switch (modId) {
|
||||||
case Mod::volume:
|
case Mod::volume:
|
||||||
|
|
@ -347,7 +347,7 @@ void sfz::Voice::applyCrossfades(absl::Span<float> modulationSpan) noexcept
|
||||||
|
|
||||||
bool canShortcut = true;
|
bool canShortcut = true;
|
||||||
for (const auto& mod : region->crossfadeCCInRange) {
|
for (const auto& mod : region->crossfadeCCInRange) {
|
||||||
const auto events = resources.midiState.getCCEvents(mod.cc);
|
const auto& events = resources.midiState.getCCEvents(mod.cc);
|
||||||
canShortcut &= (events.size() == 1);
|
canShortcut &= (events.size() == 1);
|
||||||
linearEnvelope(events, *tempSpan, [&](float x) {
|
linearEnvelope(events, *tempSpan, [&](float x) {
|
||||||
return crossfadeIn(mod.data, x, xfCurve);
|
return crossfadeIn(mod.data, x, xfCurve);
|
||||||
|
|
@ -356,7 +356,7 @@ void sfz::Voice::applyCrossfades(absl::Span<float> modulationSpan) noexcept
|
||||||
}
|
}
|
||||||
|
|
||||||
for (const auto& mod : region->crossfadeCCOutRange) {
|
for (const auto& mod : region->crossfadeCCOutRange) {
|
||||||
const auto events = resources.midiState.getCCEvents(mod.cc);
|
const auto& events = resources.midiState.getCCEvents(mod.cc);
|
||||||
canShortcut &= (events.size() == 1);
|
canShortcut &= (events.size() == 1);
|
||||||
linearEnvelope(events, *tempSpan, [&](float x) {
|
linearEnvelope(events, *tempSpan, [&](float x) {
|
||||||
return crossfadeOut(mod.data, x, xfCurve);
|
return crossfadeOut(mod.data, x, xfCurve);
|
||||||
|
|
|
||||||
Loading…
Add table
Reference in a new issue