A JUCE-based experimental audio app/plugin (VST3, etc.) that models the acoustics of a simple rectangular room using ray-tracing techniques.
The plugin generates an impulse response (IR) of the simulated room which can be loaded into a convolution reverb application, allowing users to hear the reverberation of the modelled space.
- Audio plugin format: VST3 (and other JUCE-supported formats).
- Room acoustic modelling: Simulates a basic rectangular or square room using ray-tracing and reflection techniques.
- Path tracing: Randomly distributed ray paths.
- Two-pass simulation:
- Pass 1: Identify successful ray paths.
- Pass 2: Hone in on these paths to generate a more accurate sound field representation.
- Room scaling: User can modify the size of the room (currently only in code).
- First-person display: Graphical first-person view of the simulated room to visualise the model in real-time.
- Impulse response generation: Export IRs of the current room model with one click.
- Convolution reverb compatibility: Exported IR files can be loaded into a convolution reverb to hear the simulated room’s reverberation.
Planned improvements and enhancements include:
- Integration of the 3D sound engine from the
ThreeDSoundEngine
project for 3D spatialisation of reverberation (pending refinement and testing of the engine). - Improved first-person display:
- Better lighting and texturing.
- More intuitive navigation controls.
- Enhanced GUI design.
- Integration with JUCE’s Convolution Reverb module for in-plugin playback.
- Improved memory handling in reflection processing.
- Attempting real-time processing, enabling users to hear room changes interactively:
- GPU acceleration where appropriate.
- Improved error catching and reporting.
- Improved IR generation.
- Potential integration with the Spatial Audio Framework (SAF).
This project uses JUCE.
To build:
- Clone this repository and initialise submodules if required.
- Open the project in Projucer (or build directly via Makefiles if using the Linux exporter).
- Select your desired plugin format (e.g., VST3) in Projucer.
- Save and build.
Dependencies (Linux example):
sudo apt install build-essential cmake pkg-config libfreetype6-dev libx11-dev libxcomposite-dev libxinerama-dev libxcursor-dev libxext-dev libwebkit2gtk-4.0-dev libgtk-3-dev libasound2-dev libjack-jackd2-dev libsndfile1-dev libcurl4-openssl-dev
- Load the plugin into your DAW or run as a standalone application.
- View the simulation in the graphical first-person display.
- Generate an impulse response (IR) of the current room (using the 'Process' button).
- Import the IR ('output.wav') into any convolution reverb plugin to hear the reverberation.
Contributions are welcome! Requirements document and project specification can be found in the 'Docs' folder as a guide. Areas where help is especially valuable:
- Optimising the ray-tracing / reflection engine.
- Improving the IR to prevent distortion.
- Improving the GUI and 3D graphics rendering.
- Integrating external spatial audio engines (e.g. ThreeDSoundEngine, SAF).
- Extending platform support and build configurations.
Please fork the repository and submit a pull request.
This project is licensed under the GPL v3.
For commercial licensing options, please contact the project maintainer.
Built with JUCE, an open-source cross-platform C++ framework for audio and GUI applications.
Help with the camera header and other OpenGL features from LearnOpenGL.