A free audio compressor plugin with character. Smoosher combines aggressive compression, tube-style saturation, and intelligent sibilance detection into a simple, intuitive interface.
- Single "Smoosh" Control: One knob controls threshold, ratio, attack, release, makeup gain, and saturation
- 0-60%: Gentle to moderate compression
- 60-100%: "Hammer Mode" - extreme, aggressive compression with fast attack
- Input Gain: 0 to +30 dB drive stage
- Output Gain: -12 to +12 dB output trim
- Mix Control: 0-100% wet/dry blend for parallel processing
- Adaptive compression with musical attack/release curves
- Tube-style soft-clipping saturation using hyperbolic tangent
- Intelligent sibilance detection with high-pass sidechain
- Adaptive low-pass filtering to reduce high-frequency harshness
- Soft limiting in hammer mode to prevent hard clipping
- Compact, clean interface (500x260px)
- Color-gradient knobs (green to red) for visual feedback
- 7 factory presets plus Init preset:
- Hell Smarsh: Balanced warmth (45% smoosh, 15dB input, +1dB gain)
- Wenger's 7-String: Modern tightness (60% smoosh, 10.5dB input, +2dB gain)
- That Joe Sound: Natural dynamics (70% smoosh, 15dB input, 0dB gain)
- Gravy River: Rich and smooth (70% smoosh, 12dB input, +2dB gain)
- Dani Time: Subtle enhancement (30% smoosh, 35dB input, +2dB gain)
- Gloopy: Warm and vintage (40% smoosh, 7.5dB input, +1dB gain)
- Limit THIS!: Maximum aggression (75% smoosh, 24dB input, +3dB gain)
- Mouse wheel parameter control
- Mix control independent of presets
- Download the latest release
- Extract the zip file
- Copy the plugin to the appropriate folder:
- AU:
~/Library/Audio/Plug-Ins/Components/ - VST3:
~/Library/Audio/Plug-Ins/VST3/
- AU:
- Rescan plugins in your DAW
- Download the latest release
- Extract the zip file
- Copy
Smoosher.vst3to:C:\Program Files\Common Files\VST3\
- Rescan plugins in your DAW
- CMake 3.15 or higher
- C++ compiler with C++17 support
- macOS: Xcode Command Line Tools
- Windows: Visual Studio 2019 or higher
- Linux: GCC 7+ or Clang 6+
- Git
- Clone the repository:
git clone https://github.com/yourusername/smoosher.git
cd smoosher- Create build directory:
mkdir build
cd build- Configure with CMake:
cmake ..- Build:
# Release build
cmake --build . --config Release
# Debug build (for development)
cmake --build . --config Debug- The compiled plugins will be in:
build/Smoosher_artefacts/AU/(macOS only)build/Smoosher_artefacts/VST3/build/Smoosher_artefacts/Standalone/
macOS:
# AU
cp -r build/Smoosher_artefacts/AU/Smoosher.component ~/Library/Audio/Plug-Ins/Components/
# VST3
cp -r build/Smoosher_artefacts/VST3/Smoosher.vst3 ~/Library/Audio/Plug-Ins/VST3/Windows:
# VST3
copy build\Smoosher_artefacts\VST3\Smoosher.vst3 "C:\Program Files\Common Files\VST3\"Presets are defined in Source/PluginEditor.cpp in the setupPresets() function:
void SmoosherAudioProcessorEditor::setupPresets()
{
// Format: {"Name", Smoosh %, Input dB (0-30), Output/Gain dB (-12 to +12)}
factoryPresets.push_back({"Preset Name", 50.0f, 12.0f, 0.0f});
// Add more presets here...
}Preset Parameters:
- Name: String (appears in dropdown)
- Smoosh: 0.0 to 100.0 (compression amount)
- Input: 0.0 to 30.0 (input gain in dB)
- Output/Gain: -12.0 to 12.0 (output gain in dB)
Default values are set in Source/PluginProcessor.cpp in the createParameterLayout() function:
// Smoosh default (4th parameter)
layout.add(std::make_unique<juce::AudioParameterFloat>(
"smoosh", "Smoosh",
juce::NormalisableRange<float>(0.0f, 100.0f, 0.1f),
0.0f, // <- Change this value (0-100)
// ...
));
// Input Gain default
layout.add(std::make_unique<juce::AudioParameterFloat>(
"inputGain", "Input",
juce::NormalisableRange<float>(0.0f, 30.0f, 0.1f),
0.0f, // <- Change this value (0-30)
// ...
));
// Output Gain default
layout.add(std::make_unique<juce::AudioParameterFloat>(
"outputGain", "Output",
juce::NormalisableRange<float>(-12.0f, 12.0f, 0.1f),
0.0f, // <- Change this value (-12 to +12)
// ...
));
// Mix default
layout.add(std::make_unique<juce::AudioParameterFloat>(
"mix", "Mix",
juce::NormalisableRange<float>(0.0f, 100.0f, 0.1f),
100.0f, // <- Change this value (0-100, 100 = fully wet)
// ...
));The compression behavior is defined in Source/PluginProcessor.cpp in the processBlock() function:
Threshold Curve (line ~206-218):
// Normal mode: 0 to -12 dB
threshold = juce::jmap(remappedSmoosh * remappedSmoosh, 0.0f, -12.0f);
// Hammer mode: -12 dB to -6.4 dB
threshold = juce::jmap(hammerAmount, -12.0f, -6.4f);Compression Ratio (line ~220-232):
// Normal mode: 1:1 to 10:1
ratio = juce::jmap(remappedSmoosh, 1.0f, 10.0f);
// Hammer mode: 10:1 to 16:1
ratio = juce::jmap(hammerAmount, 10.0f, 16.0f);Attack Time (line ~234-245):
// Normal mode: 10ms to 3ms
attackMs = juce::jmap(remappedSmoosh, 10.0f, 3.0f);
// Hammer mode: 3ms to 1ms
attackMs = juce::jmap(hammerAmount, 3.0f, 1.0f);Release Time (line ~247-258):
// Normal mode: 100ms to 200ms
releaseMs = juce::jmap(remappedSmoosh, 100.0f, 200.0f);
// Hammer mode: 200ms to 150ms
releaseMs = juce::jmap(hammerAmount, 200.0f, 150.0f);Makeup Gain (line ~267-279):
// Normal mode: 1.0 to 2.0
makeupGain = 1.0f + (remappedSmoosh * remappedSmoosh * 1.0f);
// Hammer mode: 2.0 to 2.8
makeupGain = juce::jmap(hammerAmount, 2.0f, 2.8f);Saturation Amount (line ~281-292):
// Normal mode: 0 to 0.24
saturationAmount = remappedSmoosh * 0.24f;
// Hammer mode: 0.24 to 0.28
saturationAmount = juce::jmap(hammerAmount, 0.24f, 0.28f);Window Size - Source/PluginEditor.cpp line 56:
setSize (500, 260); // Width, HeightControl Sizes - Source/PluginEditor.cpp in resized() function:
// Input/Output knobs (line ~201, 213)
auto inputSliderBounds = inputArea.withSizeKeepingCentre(110, 110);
auto outputSliderBounds = outputArea.withSizeKeepingCentre(110, 110);
// Smoosh knob (line ~207)
auto smooshSliderBounds = smooshArea.withSizeKeepingCentre(140, 140);
// Mix knob (line ~219)
auto mixSliderBounds = mixArea.withSizeKeepingCentre(48, 48);Color Gradient - Source/PluginEditor.cpp line 19-24:
juce::Colour fillColour = juce::Colour::fromHSV(
juce::jmap(sliderPos, 0.33f, 0.0f), // Hue: 0.33 (green) to 0.0 (red)
0.8f, // Saturation
0.7f, // Brightness
1.0f // Alpha
);- JUCE Framework 8.0.4 - Cross-platform audio plugin framework
- CMake - Build system
- AU (Audio Units) - macOS only
- VST3 - macOS, Windows, Linux
- AAX - Coming soon (pending Avid developer approval)
- Input gain stage
- Tube-style saturation (tanh soft clipping)
- Adaptive low-pass filtering
- Sibilance-sensitive envelope detection
- Dynamic compression with musical curves
- Soft limiting (hammer mode only)
- Makeup gain
- Output gain
- Wet/dry mixing
Smoosher/
├── Source/
│ ├── PluginProcessor.h # Audio processor declaration
│ ├── PluginProcessor.cpp # DSP implementation
│ ├── PluginEditor.h # UI declaration
│ └── PluginEditor.cpp # UI implementation
├── CMakeLists.txt # Build configuration
└── README.md # This file
After building, you can test the plugin:
Standalone App:
open build/Smoosher_artefacts/Standalone/Smoosher.app # macOSAudio Unit Validation (macOS):
auval -v aufx Smsh YrCm # Validate AU plugin- C++17 standard
- JUCE coding conventions
- Comments for complex DSP sections
- Start Simple: Begin with a preset that matches your source material
- Parallel Processing: Use the Mix control to blend compressed and dry signals for "New York" style compression
- Drive It: Push the Input gain to add saturation character before compression
- Hammer Mode: Beyond 60% Smoosh for aggressive, limiting-style compression
- Match Levels: Use Output gain to match bypassed levels, or add extra punch
This project is free and open source. Feel free to use, modify, and distribute.
Built as a need by Seánan McCullough, Helvete Sound, LLC, Portland, OR - https://helvetesound.com
Built with JUCE Framework by Roli Ltd.
For issues, questions, or feature requests, please open an issue on GitHub.
Note: This plugin is provided as-is with no warranty. Always test thoroughly before using in production.