diff --git a/BREAKING_CHANGES.md b/BREAKING_CHANGES.md index 71dfa397e8..3cc2b27e4e 100644 --- a/BREAKING_CHANGES.md +++ b/BREAKING_CHANGES.md @@ -1,5 +1,30 @@ # JUCE breaking changes +# develop + +## Change + +The coefficients of LadderFilter::Mode::BPF12 have been changed, causing a +slight change in the filter's transfer function. + +**Possible Issues** + +Code that uses the LadderFilter in BPF12 mode may produce different output +samples. + +**Workaround** + +There is no workaround. If you need this functionality, please let us know +about your use case. In the meantime, you may be able to copy the old class +into your own project/module and use it that way. + +**Rationale** + +The LadderFilter implementation follows the paper Valimaki (2006): Oscillator +and Filter Algorithms for Virtual Analog Synthesis. The BPF12 mode coefficients +however contained a typo compared to the paper, making the BPF12 mode incorrect. + + # Version 8.0.1 ## Change diff --git a/modules/juce_dsp/widgets/juce_LadderFilter.cpp b/modules/juce_dsp/widgets/juce_LadderFilter.cpp index 679f734385..1b29a3ac57 100644 --- a/modules/juce_dsp/widgets/juce_LadderFilter.cpp +++ b/modules/juce_dsp/widgets/juce_LadderFilter.cpp @@ -59,7 +59,7 @@ void LadderFilter::setMode (Mode newMode) noexcept { case Mode::LPF12: A = {{ SampleType (0), SampleType (0), SampleType (1), SampleType (0), SampleType (0) }}; comp = SampleType (0.5); break; case Mode::HPF12: A = {{ SampleType (1), SampleType (-2), SampleType (1), SampleType (0), SampleType (0) }}; comp = SampleType (0); break; - case Mode::BPF12: A = {{ SampleType (0), SampleType (0), SampleType (-1), SampleType (1), SampleType (0) }}; comp = SampleType (0.5); break; + case Mode::BPF12: A = {{ SampleType (0), SampleType (1), SampleType (-1), SampleType (0), SampleType (0) }}; comp = SampleType (0.5); break; case Mode::LPF24: A = {{ SampleType (0), SampleType (0), SampleType (0), SampleType (0), SampleType (1) }}; comp = SampleType (0.5); break; case Mode::HPF24: A = {{ SampleType (1), SampleType (-4), SampleType (6), SampleType (-4), SampleType (1) }}; comp = SampleType (0); break; case Mode::BPF24: A = {{ SampleType (0), SampleType (0), SampleType (1), SampleType (-2), SampleType (1) }}; comp = SampleType (0.5); break;