Skip to content

This repository presents three audio plugins developed to assess the efficiency of algorithms designed to prevent mechanical overload of loudspeakers.

License

Unknown, OFL-1.1 licenses found

Licenses found

Unknown
LICENSE-CC-BY-NC-SA.txt
OFL-1.1
OFL.txt
Notifications You must be signed in to change notification settings

eliot-des/Xmax-Protection-Plugins

Repository files navigation

Xmax Protection Plugins : Audio plugins for mechanical overload protection of loudspeakers.


CC BY-NC-SA 4.0

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 $X_{\text{max}}$. The implemented plugins are designed to limit loudspeakers where the transfer function linking displacement to voltage is of the second order. This approach is feasible under certain assumptions, such as loudspeakers mounted on an infinite baffle or in sealed-box systems.

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.

Notes on plugins design and performances


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

Potential Extensions and Improvements


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.

Build


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:

  1. Install the JUCE Framework on your machine.
  2. Open the Projucer application.
  3. Click on File in the top-left menu bar and select Open....
  4. Choose XmaxLimiter.jucer if you want to build the XmaxLimiter plugin.
  5. Add the appropriate source code files associated with the plugin to the Projucer project.
  6. Compile the plugin using your preferred IDE or build system.

XmaxFeedback


XmaxFeedback plugin image

XmaxLimiter


XmaxLimiter plugin image

XmaxLowshelf


XmaxLowShelf plugin image

Credit


  • GUI Design: Matthijs Hollemans, who created this repository, from which the majority of the GUI components are derived.
  • Lato Font: Designed by Łukasz Dziedzic.

Licences


This work is licensed under a Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International License.

CC BY-NC-SA 4.0

For a change in licence, and/or if one/some algorithms are intented to be used by a company, please contact the authors.

About

This repository presents three audio plugins developed to assess the efficiency of algorithms designed to prevent mechanical overload of loudspeakers.

Topics

Resources

License

Unknown, OFL-1.1 licenses found

Licenses found

Unknown
LICENSE-CC-BY-NC-SA.txt
OFL-1.1
OFL.txt

Stars

Watchers

Forks

Packages

No packages published

Languages