Eliot Deschang & Florian Marie 2025, IMDEA Master students, Le Mans University.
This repository gathers three different plugins implemented as part of a Master 2 project scheduled over three months, supervised by Antonin Novak. The aim of the project was to develop algorithms to prevent mechanical overload of loudspeakers. Mechanical overload is prevented by limiting the membrane excursion to a certain threshold, referred to as
During the course of this research, three plugins were developed to evaluate the effectiveness of these algorithms on a loudspeaker. The plugins were fully coded in C++ using the JUCE framework, after implementing and testing the algorithms in Python.
Disclaimer: As a self-taugh C++ coder, some of the code could certainly be better written, both in terms of clarity and optimisation.
For detailed information about the algorithms design (block diagrams), performances on various test signals, and more, please refer to the project report provided in this repository.
Here's a quick summary of the advantages and disadvantages of each plugin in table form. These observations are likely to depend on the excitation signal, as well as the loudspeaker used, but have been observed in most cases.
Algorithm | Pros | Cons |
---|---|---|
Feedback | No latency Sounds transparent |
Can add distortion Poor transient robustness |
Feedback look-ahead | More robust to transients |
Can add distortion Latency |
Limiter | Very robust (brickwall) | Can add Pumping effect Latency Add quantization noise |
Low-shelf | Sounds transparent | Less robust compared to the limiter Latency |
Future developments or enhancements to this project could include:
- Support for Higher-Order Transfer Functions: Allowing the input of higher-order transfer functions to control the membrane excursion of more complex systems, such as bass-reflex enclosures.
- User-Friendly Loudspeaker Parameter Input: Adding a tool to input the characteristics of the loudspeaker directly, instead of relying on hard-coded values in the source code.
- Stereo button support: In fact, the stereo button does nothing... The idea was to merge a stereo signal and process a mono signal in the plugin.
- Moving minimum filter optimization: The actual moving minimum filter implemented could be optimized according to algorithms described by Gil & Kimmel, or by Yuan & Atallah, for example.
Since plugin formats differ depending on the operating system (Windows, macOS ARM/Intel, or Linux), prebuilt versions in VST/VST3/AAX formats are not provided in this repository, except for Windows (check release section on the right), as it is the only operating system available on my machine.
To build these plugins from scratch, follow these steps:
- Install the JUCE Framework on your machine.
- Open the Projucer application.
- Click on File in the top-left menu bar and select Open....
- Choose
XmaxLimiter.jucer
if you want to build the XmaxLimiter plugin. - Add the appropriate source code files associated with the plugin to the Projucer project.
- Compile the plugin using your preferred IDE or build system.
- GUI Design: Matthijs Hollemans, who created this repository, from which the majority of the GUI components are derived.
- Lato Font: Designed by Łukasz Dziedzic.
This work is licensed under a Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International License.
For a change in licence, and/or if one/some algorithms are intented to be used by a company, please contact the authors.