Overview
Orange Music Player includes a full Audio Unit (AU) plugin host. Any AU effect plugin installed on your Mac can be loaded into Orange's effect chain and applied to your music in real time. This lets you use professional studio plugins — EQs, compressors, reverbs, saturators, and more — alongside Orange's built-in effects.
8-Slot Chain
Mix and match built-in effects and AU plugins in any order across 8 configurable slots.
Auto-Discovery
Scans your system for all installed AU effect plugins. New plugins appear automatically.
Native Plugin UI
Opens the plugin's own interface in a floating window. Falls back to a generic parameter view if unavailable.
Full State Persistence
Every plugin's parameters and state are saved and restored between sessions automatically.
Non-Destructive
All processing is real-time. Your audio files are never modified.
Script Control
Inspect the chain, toggle bypass, tweak parameters, and load presets from JavaScript.
Signal Flow
Audio flows from the player through each occupied slot in order, then to the system output. Bypassed slots are skipped. Empty slots are ignored.
Effect Chain
The effect chain is the heart of the audio processing pipeline. It provides 8 slots that can each hold either a built-in effect or a third-party AU plugin.
Adding Effects
Open the Audio Effects panel from the menu bar (Playback → Audio Effects or Cmd+Shift+E). Click the + button on any empty slot to open the plugin picker. You'll see two tabs:
- Built-in — Orange's four built-in effect types (EQ, Reverb, Delay, Pitch/Speed)
- Audio Units — All AU effect plugins installed on your system, grouped by manufacturer
Select a plugin to insert it into the slot. AU plugins load asynchronously — playback continues uninterrupted while the plugin initializes.
Reordering
Drag and drop slots to reorder them. The effect chain rebuilds automatically. Signal flow always follows slot order from top to bottom (1 → 8).
Bypass
Click the power icon on any slot to bypass it. A bypassed effect is removed from the signal path without being unloaded — its state and parameters are preserved. Click again to re-enable.
Bypassing is instant and glitch-free. Use it to A/B compare your chain with and without specific effects.
Built-In Effects
Orange ships with four built-in audio effects. These load instantly and have dedicated UIs in the effects panel.
| Effect | Description | Key Parameters |
|---|---|---|
EQ |
10-band parametric equalizer | Per-band gain, built-in presets (Flat, Classical, Vocal Boost), custom presets |
Reverb |
Convolution reverb with 13 room types | Preset (Small Room, Large Hall, Cathedral, Plate, etc.), Wet/Dry mix |
Delay |
Stereo delay with feedback | Delay time, Feedback, Wet/Dry mix, Low-pass cutoff |
Pitch / Speed |
Independent pitch shift and tempo change | Pitch (−2400 to +2400 cents), Rate (0.5x to 2.0x) |
AU Plugins
Any Audio Unit effect (kAudioUnitType_Effect) installed on your Mac is automatically discovered and available in the plugin picker. Orange scans for AU components at launch and watches for newly installed plugins.
Supported Plugin Types
Orange hosts AU effect plugins only (type aufx). Instrument plugins (aumu) and MIDI processors are not supported. Both Apple Silicon native and Rosetta-translated plugins work.
Plugin UI
When you click the sliders icon on an AU slot, Orange opens the plugin's user interface in a floating panel. The panel:
- Uses the plugin's native CoreAudioKit view if available
- Falls back to a generic parameter view with sliders for every parameter
- Floats above other windows and is available in all Spaces
- Can be resized, and its size follows the plugin's preferred dimensions
Parameters
Every AU plugin exposes a parameter tree. Orange reads this tree to populate the generic parameter UI. Parameters are organized into groups (if the plugin defines them) and displayed as labeled sliders with real-time value readouts.
Each parameter has:
| Property | Description |
|---|---|
address | Unique numeric identifier used for scripting access |
displayName | Human-readable label |
minValue / maxValue | Valid range for the parameter |
value | Current value (read/write, updates in real time) |
Factory Presets
Many AU plugins ship with factory presets. Orange can load these via the scripting API:
// Load by preset number orange.effects.loadPreset(0, 0, 'factory'); // Load by preset name orange.effects.loadPreset(0, 'Warm Vocal', 'factory');
State & Persistence
Orange automatically saves and restores the complete state of your effect chain:
- Chain configuration (which slots are filled, effect types, order, bypass state) is saved as JSON
- AU plugin state (all parameter values + any internal plugin data) is saved as a binary property list per plugin instance
- Everything is stored in
~/Library/Application Support/OrangeMusicPlayer/
When you relaunch Orange, your entire effect chain — including all AU plugin settings — is restored exactly as you left it.
Storage Locations
| Data | Format | Path |
|---|---|---|
| Chain config | JSON | EffectChains/Default.json |
| AU plugin states | Binary plist | PluginPresets/<uuid>.plist |
Combined Presets
Orange includes a combined preset system that captures the state of all built-in effects at once. These let you switch between complete effect configurations instantly.
Built-In Presets
| Preset | Description |
|---|---|
| Slowed + Reverb | Slowed tempo with large hall reverb for a dreamy aesthetic |
| Concert Hall | Simulates a live concert hall environment |
| Bathroom Singer | Tight room reverb with slight echo |
| Nightcore | Increased pitch and tempo for the Nightcore effect |
| Practice Slow | Reduced speed without pitch change for learning songs |
| Echo Chamber | Heavy delay and feedback for atmospheric listening |
You can also save your own custom presets. Custom presets capture the full state of EQ, Reverb, Delay, and Pitch/Speed settings.
Combined presets capture built-in effects only. AU plugin states are saved independently per slot and persist automatically across sessions.
Scripting Integration
The entire effect chain is accessible from the JavaScript scripting API via orange.effects. You can inspect the chain, toggle bypass, read and write parameters, and load factory presets programmatically.
// Inspect the chain var slots = orange.effects.chain(); for (var i = 0; i < slots.length; i++) { if (slots[i]) { console.log( 'Slot ' + i + ': ' + slots[i].name + ' (' + slots[i].manufacturer + ')' + (slots[i].isBypassed ? ' [BYPASSED]' : '') ); } } // Toggle bypass on slot 0 orange.effects.bypass(0, true); // Tweak a parameter (slot index, param address, value) orange.effects.setParameter(1, 100, 0.75); // Read a parameter var val = orange.effects.getParameter(1, 100); console.log('Param 100 = ' + val);
See the full effects scripting reference for details on all available methods.