inline void init_ladderfilter()

in pedalboard/plugins/LadderFilter.h [60:153]


inline void init_ladderfilter(py::module &m) {
  py::class_<LadderFilter<float>, Plugin, std::shared_ptr<LadderFilter<float>>>
      ladderFilter(
          m, "LadderFilter",
          "A multi-mode audio filter based on the classic Moog "
          "synthesizer ladder filter, invented by Dr. Bob Moog in "
          "1968.\n\nDepending on the filter's mode, frequencies above, "
          "below, or on both sides of the cutoff frequency will be "
          "attenuated. Higher values for the ``resonance`` parameter "
          "may cause peaks in the frequency response around the "
          "cutoff frequency.");

  py::enum_<juce::dsp::LadderFilterMode>(
      ladderFilter, "Mode", "The type of filter architecture to use.")
      .value("LPF12", juce::dsp::LadderFilterMode::LPF12,
             "A low-pass filter with 12 dB of attenuation per octave above the "
             "cutoff frequency.")
      .value(
          "HPF12", juce::dsp::LadderFilterMode::HPF12,
          "A high-pass filter with 12 dB of attenuation per octave below the "
          "cutoff frequency.")
      .value("BPF12", juce::dsp::LadderFilterMode::BPF12,
             "A band-pass filter with 12 dB of attenuation per octave on both "
             "sides of the cutoff frequency.")
      .value("LPF24", juce::dsp::LadderFilterMode::LPF24,
             "A low-pass filter with 24 dB of attenuation per octave above the "
             "cutoff frequency.")
      .value(
          "HPF24", juce::dsp::LadderFilterMode::HPF24,
          "A high-pass filter with 24 dB of attenuation per octave below the "
          "cutoff frequency.")
      .value("BPF24", juce::dsp::LadderFilterMode::BPF24,
             "A band-pass filter with 24 dB of attenuation per octave on both "
             "sides of the cutoff frequency.")
      .export_values();

  ladderFilter
      .def(py::init([](juce::dsp::LadderFilterMode mode, float cutoffHz,
                       float resonance, float drive) {
             auto plugin = std::make_unique<LadderFilter<float>>();
             plugin->setMode(mode);
             plugin->setCutoffFrequencyHz(cutoffHz);
             plugin->setResonance(resonance);
             plugin->setDrive(drive);
             return plugin;
           }),
           py::arg("mode") = juce::dsp::LadderFilterMode::LPF12,
           py::arg("cutoff_hz") = 200, py::arg("resonance") = 0,
           py::arg("drive") = 1.0)
      .def("__repr__",
           [](const LadderFilter<float> &plugin) {
             std::ostringstream ss;
             ss << "<pedalboard.LadderFilter";
             ss << " mode=";
             switch (plugin.getMode()) {
             case juce::dsp::LadderFilterMode::LPF12:
               ss << "pedalboard.LadderFilter.LPF12";
               break;
             case juce::dsp::LadderFilterMode::HPF12:
               ss << "pedalboard.LadderFilter.HPF12";
               break;
             case juce::dsp::LadderFilterMode::BPF12:
               ss << "pedalboard.LadderFilter.BPF12";
               break;
             case juce::dsp::LadderFilterMode::LPF24:
               ss << "pedalboard.LadderFilter.LPF24";
               break;
             case juce::dsp::LadderFilterMode::HPF24:
               ss << "pedalboard.LadderFilter.HPF24";
               break;
             case juce::dsp::LadderFilterMode::BPF24:
               ss << "pedalboard.LadderFilter.BPF24";
               break;
             default:
               ss << "unknown";
               break;
             }
             ss << " cutoff_hz=" << plugin.getCutoffFrequencyHz();
             ss << " resonance=" << plugin.getResonance();
             ss << " drive=" << plugin.getDrive();
             ss << " at " << &plugin;
             ss << ">";
             return ss.str();
           })
      .def_property("mode", &LadderFilter<float>::getMode,
                    &LadderFilter<float>::setMode)
      .def_property("cutoff_hz", &LadderFilter<float>::getCutoffFrequencyHz,
                    &LadderFilter<float>::setCutoffFrequencyHz)
      .def_property("resonance", &LadderFilter<float>::getResonance,
                    &LadderFilter<float>::setResonance)
      .def_property("drive", &LadderFilter<float>::getDrive,
                    &LadderFilter<float>::setDrive);
  ;
}