A JUCE audio plugin with a modular effects chain architecture.
Audio Input → Input Trim → FX Slot → Output Trim → Audio Output
- Input/Output Trim: ±12dB gain control
- Swappable FX Slot: Modular architecture for runtime effect switching
- Preset Management: Save and load plugin states
- Cross-platform: Builds on macOS, Windows, and Linux
- Formats: AU and VST3
- CMake 3.15 or higher
- C++17 compatible compiler
- Git
-
Clone and configure
cd AlternaFX cmake -B build -DCMAKE_BUILD_TYPE=Release -
Build
cmake --build build --config Release
-
Install (copies plugin to system folders)
cmake --build build --config Release --target install
- Debug build: Use
-DCMAKE_BUILD_TYPE=Debug - Specific generator: Add
-G "Unix Makefiles"or-G "Ninja" - Custom JUCE: Clone JUCE manually and modify CMakeLists.txt
- macOS AU:
~/Library/Audio/Plug-Ins/Components/AlternaFX.component - macOS VST3:
~/Library/Audio/Plug-Ins/VST3/AlternaFX.vst3 - Windows VST3:
C:\Program Files\Common Files\VST3\AlternaFX.vst3
The plugin uses an abstract FXSlot base class that can be subclassed to create custom effects:
class FXSlot
{
public:
virtual void process(juce::AudioBuffer<float>& buffer) = 0;
virtual void reset() = 0;
virtual void prepare(double sampleRate, int samplesPerBlock, int numChannels) = 0;
};The default implementation is PassthroughFX which passes audio unchanged. To add custom effects:
- Create a new class inheriting from
FXSlot - Implement the three virtual methods
- Swap the effect at runtime using
std::unique_ptr<FXSlot>
AlternaFX/
├── CMakeLists.txt # Build configuration
├── Source/
│ ├── FXSlot.h # Abstract FX base class
│ ├── PassthroughFX.h # Default passthrough effect
│ ├── PluginProcessor.h # Main audio processor
│ ├── PluginProcessor.cpp # Audio processing logic
│ ├── PluginEditor.h # GUI (minimal)
│ └── PluginEditor.cpp # GUI implementation
└── README.md
- VS Code: Open folder and use CMake Tools extension
- CLion: Open CMakeLists.txt as project
- Xcode: Generate with
cmake -B build -G Xcode - Command line: Use the build steps above
- Create
MyEffect.hinSource/ - Inherit from
FXSlotand implement methods - Add to CMakeLists.txt
target_sources() - Swap in processor:
fxSlot = std::make_unique<MyEffect>();
(Add your license here)