Skip to content

Commit

Permalink
Remove usage of std::variant, which fails on older macOS.
Browse files Browse the repository at this point in the history
  • Loading branch information
psobot committed Feb 9, 2022
1 parent 0f5ae08 commit 1089b51
Showing 1 changed file with 65 additions and 10 deletions.
75 changes: 65 additions & 10 deletions pedalboard/plugin_templates/Resample.h
Original file line number Diff line number Diff line change
Expand Up @@ -71,23 +71,78 @@ class VariableQualityResampler {
}

float getBaseLatency() const {
return std::visit([](auto &&i) -> float { return i.getBaseLatency(); },
interpolator);
// Unfortunately, std::visit cannot be used here due to macOS version
// issues: https://stackoverflow.com/q/52310835/679081
if (auto *i =
std::get_if<juce::Interpolators::ZeroOrderHold>(&interpolator)) {
return i->getBaseLatency();
} else if (auto *i =
std::get_if<juce::Interpolators::Linear>(&interpolator)) {
return i->getBaseLatency();
} else if (auto *i = std::get_if<juce::Interpolators::CatmullRom>(
&interpolator)) {
return i->getBaseLatency();
} else if (auto *i =
std::get_if<juce::Interpolators::Lagrange>(&interpolator)) {
return i->getBaseLatency();
} else if (auto *i = std::get_if<juce::Interpolators::WindowedSinc>(
&interpolator)) {
return i->getBaseLatency();
} else {
throw std::runtime_error("Unknown resampler quality!");
}
}

void reset() noexcept {
std::visit([](auto &&i) { return i.reset(); }, interpolator);
// Unfortunately, std::visit cannot be used here due to macOS version
// issues: https://stackoverflow.com/q/52310835/679081
if (auto *i =
std::get_if<juce::Interpolators::ZeroOrderHold>(&interpolator)) {
i->reset();
} else if (auto *i =
std::get_if<juce::Interpolators::Linear>(&interpolator)) {
i->reset();
} else if (auto *i = std::get_if<juce::Interpolators::CatmullRom>(
&interpolator)) {
i->reset();
} else if (auto *i =
std::get_if<juce::Interpolators::Lagrange>(&interpolator)) {
i->reset();
} else if (auto *i = std::get_if<juce::Interpolators::WindowedSinc>(
&interpolator)) {
i->reset();
} else {
throw std::runtime_error("Unknown resampler quality!");
}
}

int process(double speedRatio, const float *inputSamples,
float *outputSamples, int numOutputSamplesToProduce) noexcept {
return std::visit(
[speedRatio, inputSamples, outputSamples,
numOutputSamplesToProduce](auto &&i) -> float {
return i.process(speedRatio, inputSamples, outputSamples,
numOutputSamplesToProduce);
},
interpolator);
// Unfortunately, std::visit cannot be used here due to macOS version
// issues: https://stackoverflow.com/q/52310835/679081
if (auto *i =
std::get_if<juce::Interpolators::ZeroOrderHold>(&interpolator)) {
return i->process(speedRatio, inputSamples, outputSamples,
numOutputSamplesToProduce);
} else if (auto *i =
std::get_if<juce::Interpolators::Linear>(&interpolator)) {
return i->process(speedRatio, inputSamples, outputSamples,
numOutputSamplesToProduce);
} else if (auto *i = std::get_if<juce::Interpolators::CatmullRom>(
&interpolator)) {
return i->process(speedRatio, inputSamples, outputSamples,
numOutputSamplesToProduce);
} else if (auto *i =
std::get_if<juce::Interpolators::Lagrange>(&interpolator)) {
return i->process(speedRatio, inputSamples, outputSamples,
numOutputSamplesToProduce);
} else if (auto *i = std::get_if<juce::Interpolators::WindowedSinc>(
&interpolator)) {
return i->process(speedRatio, inputSamples, outputSamples,
numOutputSamplesToProduce);
} else {
throw std::runtime_error("Unknown resampler quality!");
}
}

private:
Expand Down

0 comments on commit 1089b51

Please sign in to comment.