This repository hosts PeakRMSCompressorWorkbench, a JUCE-based application inspired by the CTAGDRC project designed to test and analyze the effects of dynamic range compression algorithms on audio signals using peak-based and RMS-based level detection methods. It provides tools to measure and compare these effects via various metrics.
This application was developed as part of the bachelor's thesis titled Experimental Workbench for Testing Audio Signal Dynamic Range Compression Algorithms.
- Peak and RMS Compression: Analyze compression behavior using peak-based and RMS-based level detection methods.
- Metrics Extraction: LUFS, dynamic range, crest factor, and other key metrics.
- Real-time Playback: Integrates with AudioFilePlayerPlugin by Matkat Music for testing in real-time.
-
The export metrics functionality saves the computed metrics as a
.txt
file. The default export directory is specified in theConfig.h
file located in:util/include/Config.h
-
Windows Default Output Path:
C:\Users\Public\Documents
-
MacOS Default Output Path:
/Users/Shared/
In the output directory, the metrics files are saved under the
/PeakRMSCompressorWorkbench_testing_results
folder. -
Compressed Files: In
Config.h
, you can configure whether the compressed audio files should also be saved alongside the metrics. By default, this option is set to false.
To customize the output behavior, update the appropriate parameters in the Config.h
file before running the application.
To add a new preset:
-
Define the Preset:
-
Open
util/include/Presets.h
. -
Add a new
PresetData
entry inside thePresets
namespace.Example:
constexpr PresetData Piano = { 6, "Piano", { -22.0f, 3.5f, 15.0f, 90.0f, 1.5f, 0.0f }, // Peak { -24.0f, 3.8f, 20.0f, 120.0f, 1.8f, 0.0f } // RMS };
-
-
Add to the Preset List:
- Add the new preset to
AllPresets
:constexpr auto AllPresets = std::array{ Drums, Bass, Guitar, Vocals, FullMix, Piano };
- Add the new preset to
-
Save and Rebuild:
- Save
Presets.h
and rebuild your project.
- Save
Notes:
- Ensure the
id
is unique. - Use valid parameter ranges (defined in
util/include/Constants.h
).
To set up and run this project, ensure you have the following installed:
- JUCE: A C++ framework for audio application development.
- AudioFilePlayerPlugin: Required for real-time audio compression playback.
- Visual Studio Community Edition 2022: The IDE for building the project.
- The project is not compatible with Visual Studio 2019 version.
(Based on this video tutorial)
git clone https://github.com/s1m0ness/PeakRMSCompressorWorkbench.git
Run the setup.sh
script located in the PeakRMSCompressorWorkbench
repository root to ensure Config.h
stays local and doesn't get committed accidentally:
./setup.sh
(Video reference: 23:17)
- Download and install Visual Studio Community Edition 2022.
- During installation, select the Desktop Development with C++ workload.
(Video reference: 27:32)
- Clone the JUCE repository:
git clone https://github.com/juce-framework/JUCE.git
- Navigate to the Projucer build directory:
JUCE\extras\Projucer\Builds\VisualStudio2022
- Open
Projucer.sln
in Visual Studio and build it.
(Video reference: 37:36)
- Navigate to the following directory:
C:\Program Files\Common Files
- Right-click the
VST3
folder (create it if doesn't exist), select Properties, then go to the Security tab. - Select Users and allow modification permissions. Click Apply.
(Video reference: 42:06, 29:32)
- Clone the AudioFilePlayerPlugin repository:
git clone https://github.com/hollance/AudioFilePlayerPlugin.git
- Navigate to the directory:
AudioFilePlayerPlugin\
- Right-click on
AudioFilePlayer.jucer
and select Open in Program and navigate to:and selectJUCE\extras\Projucer\Builds\VisualStudio2022\x64\Debug\App
Projucer.exe
file (you can ignore this step if the .jucer file is already recognized). - Once the project opens in Projucer, go to File > Global Paths > JUCE Modules, click on Select directory and navigate to:
JUCE\modules
- in Projucer, click on Visual Studio exporter and build the solution.
(Video reference: 35:32)
- Navigate to the JUCE AudioPluginHost directory:
JUCE\extras\AudioPluginHost
- Open
AudioPluginHost.jucer
in Projucer, click on Visual Studio exporter and build the solution.
(Video reference: 36:06)
- Navigate to your
PeakRMSCompressorWorkbench
directory. - Open
PeakRMSCompressorWorkbench.projucer
in Projucer and open the project in Visual Studio. - In Visual Studio:
- Right-click on
PeakRMSCompressorWorkbench_VST3
in Solution Explorer and select Properties. - Go to Configuration Properties > Debugging.
- Click on the Command field, select <browse...> and navigate to:
JUCE\extras\AudioPluginHost\Builds\VisualStudio2022\x64\Debug\App
- Select
AudioPluginHost.exe
and click Apply.
- Right-click on
(Video reference: 38:49)
- Set
PeakRMSCompressorWorkbench_VST3
as the startup project in Visual Studio. - Build and run the project.
- In AudioPluginHost:
- Go to Options > Edit the list of Available Plug-ins > Options > Scan for new or updated VST3 plug-ins.
- Add
AudioFilePlayer
andPeakRMSCompressorWorkbench
VSTs to the host. - Save the configuration as a
.filtergraph
file in yourPeakRMSCompressorWorkbench
directory. - Your
.filtergraph
file should look like the following:
To set up and run this project on MacOS, ensure you have the following installed:
- JUCE: A C++ framework for audio application development.
- AudioFilePlayerPlugin: Required for real-time audio compression playback.
- Xcode: The IDE for building and running the project.
(Based on this video tutorial)
git clone https://github.com/s1m0ness/PeakRMSCompressorWorkbench.git
Run the setup.sh
script located in the PeakRMSCompressorWorkbench
repository root to ensure Config.h
stays local and doesn't get committed accidentally:
./setup.sh
(Video reference: 4:29)
- Navigate to Apple App Store on your macOS device and download Xcode.
(Video reference: 6:37)
- Clone the JUCE repository:
git clone https://github.com/juce-framework/JUCE.git
- Navigate to the Projucer build directory:
JUCE/extras/Projucer/Builds/MacOSX/
- Open
Projucer.xcodeproj
in Xcode and build it.
(Video reference: 19:54, 10:05)
- Clone the AudioFilePlayerPlugin repository:
git clone https://github.com/hollance/AudioFilePlayerPlugin.git
- Navigate to the directory:
AudioFilePlayerPlugin/
- Right-click on
AudioFilePlayer.jucer
and select Open with and navigate to:and selectJUCE/extras/Projucer/Builds/MacOSX/build/Debug/
Projucer.app
file (you can ignore this step if the .jucer file is already recognized). - Once the project opens in Projucer, go to Projucer > Global Paths > JUCE Modules and select the directory:
JUCE/modules
- Open
AudioFilePlayer.jucer
in Projucer, select the Xcode exporter, and build it.
(Video reference: 15:25)
- Navigate to the JUCE AudioPluginHost directory:
JUCE/extras/AudioPluginHost/
- Open
AudioPluginHost.jucer
in Projucer, select the Xcode exporter, and build the solution.
(Video reference: 15:50)
- Navigate to your
PeakRMSCompressorWorkbench
directory. - Open
PeakRMSCompressorWorkbench.projucer
in Projucer and open in Xcode. - In Xcode:
- Go to Set active scheme, select the VST3 and click on edit the scheme
- Go to the Run section, click on Executables, select Other... and navigate to:
JUCE/extras/AudioPluginHost/Builds/MacOSX/build/Debug/
- Select
AudioPluginHost.app
.
(Video reference: 16:26)
- Build and run the project.
- In AudioPluginHost:
- Go to Options > Edit the list of Available Plug-ins > Options > Scan for new or updated VST3 plug-ins, also click on Scan for new or updated AudioUnit plug-ins.
- Add
AudioFilePlayer
andPeakRMSCompressorWorkbench
VSTs to the host. - Save the configuration as a
.filtergraph
file in yourPeakRMSCompressorWorkbench
directory. - Your
.filtergraph
file should look like the following:
- Make sure the Projucer Global Paths are correctly set to your JUCE/modules directory.
- Make sure the AudioPluginHost path is correctly set in the project properties.
- Make sure your you choose PeakRMSCompressorWorkbench_VST3 as the target for running the project.
- If you encounter issues with VST scanning (on Windows), ensure that the VST3 folder permissions are correctly configured.
With this setup, you’re ready to test the PeakRMSCompressorWorkbench application and explore dynamic range compression metrics and real-time playback.