WaxOn/WaxOff
Podcast audio prep for macOS. From raw recording to finished delivery in two modes, one app.
WaxOn prepares raw recordings for editing. WaxOff finalizes your edited mix for distribution. Both share the same drag-and-drop workflow, waveform viewer, and file stats panel.
Getting Started
System Requirements
- macOS 14.0 (Sonoma) or later
- Apple Silicon or Intel Mac
- FFmpeg is bundled with the app; no separate install needed
Installation
- Download the DMG from the link above
- Open the DMG and drag WaxOn/WaxOff to your Applications folder
- Before launching, open Terminal and run:
xattr -cr /Applications/WaxOnWaxOff.app
xattr -cr command removes the quarantine flag. It does not disable any macOS security features.
First Launch: Mode Picker
On first launch (and any time you click the active mode button in the toolbar), a compact mode picker appears. Choose WaxOn to prepare raw recordings, or WaxOff to finalize a mix. Each mode maintains its own independent file list; switching modes doesn't disturb your work in the other mode.
The Interface
Both modes share the same window layout, divided into four areas.
Toolbar
The top bar contains the mode switcher (WaxOn | WaxOff) on the left, followed by a Preset picker, and then the action buttons. Clicking the active mode button returns to the mode picker.
File List
The left panel shows all loaded files. Each row displays the filename and a status label. Drag rows to reorder; drag the vertical divider to resize the panel.
- Waiting — file queued, analysis pending
- Calculating stats — audio stats are being computed
- Processing — pipeline is running; a progress bar appears under the row
- Output: … — processed; click the folder icon to reveal in Finder
- Error — something went wrong; the message is shown inline
Files with a high estimated noise floor show a ⚠️ warning badge next to the filename. Hover over the badge for detail.
WaxOn processes up to 3 files concurrently. Files waiting their turn show a muted static progress bar so it's clear they are queued and not stalled.
Select files and press Delete to remove them, or use ⌘⌥Delete to clear the entire list.
Waveform Panel
The right panel shows different content depending on context:
- File selected — waveform with a stats strip below it
- Mix in progress — a spinner with a live phase label showing the current stage
- Nothing selected — a prompt to select a file
A toggle button in the top-right corner switches between the waveform view and the Console, a scrollable log showing what WaxOn is doing during processing. A Verbose checkbox reveals additional detail such as filter parameters and per-file loudnorm measurements.
Settings Sidebar
A collapsible panel on the right edge of the window contains all processing settings for the current mode. Toggle it open or closed with the ⊟ button at the far right of the toolbar. Settings persist between sessions.
WaxOn Mode WaxOn
WaxOn prepares raw podcast recordings for editing in a DAW. It handles high-pass filtering, optional noise reduction, loudness normalization, phase rotation, and brick-wall limiting, outputting 24-bit WAV files ready to drop into Logic Pro, Reaper, or any other editor.
WaxOn is a first-step ingest processor: get your raw recordings into a consistent, workable format before editing. It does not do de-essing, spectral repair, or multiband restoration. For recordings with serious noise problems, dedicated tools like iZotope RX are the right choice; WaxOn's built-in noise reduction handles light to moderate steady-state background noise.
Quick Start
- Click WaxOn in the toolbar (or choose it from the mode picker)
- Select a preset from the Preset menu in the toolbar, or configure settings manually in the Settings sidebar
- Drag your audio files onto the window
- Click Process, or select 2+ files and click Mix to combine them
WaxOn Presets WaxOn
Presets save and restore a complete group of WaxOn settings in one click. The Preset menu is in the toolbar, to the right of the mode switcher.
Built-In Presets
| Preset | HPF | Loudness Norm | Target | Output | Sample Rate |
|---|---|---|---|---|---|
| Defaults | 80 Hz | Off | — | Mono L | 44.1 kHz |
| Edit Prep | 80 Hz | On | −30 LUFS | Mono L | 44.1 kHz |
| Edit Prep EBU | 80 Hz | On | −23 LUFS | Mono L | 44.1 kHz |
| Mix 2 Channel | 20 Hz (DC Block) | On | −24 LUFS | Stereo | 44.1 kHz |
| Mix Mono | 20 Hz (DC Block) | On | −24 LUFS | Mono L | 44.1 kHz |
Defaults resets all WaxOn settings to factory values. A quick way to start fresh.
Edit Prep is optimized for single-mic podcast recordings destined for DAW editing. −30 LUFS leaves generous headroom for editing and processing.
Edit Prep EBU targets the EBU R128 dialogue reference level of −23 LUFS. Tracks feel natural at calibrated monitor levels and still leave headroom before typical delivery targets.
Mix 2 Channel and Mix Mono are both configured for multi-track blending: DC Block removes only infrasonic content and DC offset (not voice frequencies), and loudness normalization ensures all files arrive at the mix at equal perceived loudness. Use 2 Channel when you want a stereo blend; use Mono when the output is a single podcast track destined for per-track DAW editing.
Custom Presets
Configure your settings, then open the Preset menu and choose Save Current Settings…. Give the preset a name and it will persist across relaunches. Delete custom presets from the same menu.
WaxOn Settings WaxOn
| Setting | Range / Options | Description |
|---|---|---|
| Sample Rate | 44.1 kHz · 48 kHz | Output sample rate. 48 kHz for video projects; 44.1 kHz for audio-only. Uses FFmpeg's high-quality resampler. |
| Output | Mono · Stereo | Stereo passes both channels through unchanged. Mono extracts a single channel from a stereo source. |
| Channel | Left · Right | Mono mode only. Which channel to extract. Use Left for a standard single-mic recording on channel 1. Grayed out when Output is Stereo. |
| Ceiling | −1.0 to −3.0 dB | True peak ceiling for the brick-wall limiter. −1.0 dB is a safe default for most delivery formats. |
| High Pass | 20–90 Hz · default 80 Hz | High-pass filter cutoff. 80 Hz removes most rumble and handling noise without thinning the voice. Lower for sources with significant bass content. |
| Noise Reduction | On · Off · default Off | Applies RNNoise, a recurrent neural network trained on mono speech, before the high-pass filter. Suppresses consistent background noise (HVAC, room tone, hum) with minimal voice coloration. For stereo output, channels are split and denoised independently to ensure balanced processing. Check output before editing; artifacts are possible on heavy noise. See Theory of Operation for technical detail. |
| Loudness Norm | On · Off | Enables two-pass EBU R128 loudness normalization. When NR is off, the analysis pass applies noise reduction internally to prevent broadband noise from skewing the measurement; the output itself is not affected. Off = filtering and limiting only. |
| Target | −16 to −35 LUFS · default −30 | Integrated loudness target when Loudness Norm is on. −30 LUFS is conservative for ingest and leaves plenty of headroom for editing. Grayed out when Loudness Norm is off. |
| Output Dir | Path or empty | Where output files are written. Empty = same folder as the source. Set a path to collect all outputs in one place. |
WaxOn Processing Pipeline WaxOn
Every file passes through an FFmpeg processing chain. Three stages by default, four when Noise Reduction is enabled.
-
Noise Reduction Optional When enabled, RNNoise (
arnndn) runs first on the raw signal before any other processing. A recurrent neural network trained on speech suppresses consistent background noise (HVAC hum, room tone, light broadband noise) with minimal effect on voice. For stereo output, each channel is split and denoised independently before rejoining — RNNoise is a mono model and requires per-channel processing for balanced stereo results. Runs before the high-pass filter so the network sees the unaltered signal. See Theory of Operation for technical detail. -
Filter, Channel & Resample High-pass filter at the configured cutoff, a 200 Hz allpass for phase rotation (reduces peak asymmetry and improves limiter headroom), channel selection if Mono output is selected, and resampling to the target rate. Output at this stage: 32-bit float WAV at the target sample rate.
-
Loudness Normalization Optional Two-pass EBU R128. First pass measures integrated loudness, true peak, LRA, and threshold. Second pass applies linear gain to hit the configured target. Linear mode preserves the natural dynamic shape of the recording: no compression, no transient changes. When Noise Reduction is off, the analysis pass runs RNNoise on a temporary copy for measurement accuracy; the output pipeline is unaffected. See NR-for-Measurement in the Theory of Operation.
-
Brick-Wall Limiting The signal is upsampled to 2× the target rate, passed through FFmpeg's
alimiterwith a 5 ms attack and 50 ms release, then resampled back and written as 24-bit WAV. Running at 2× makes inter-sample peaks visible to the limiter, preventing true peak violations in the final file.
Mix Pipeline
When Loudness Norm is on, Mix adds two stages before the chain above. When off, only the amix stage is added.
- Per-file leveling Loudnorm only — each input is individually normalized to the target LUFS using a two-pass EBU R128 analysis and linear gain. All files arrive at the mix at equal perceived loudness, regardless of how they were recorded.
- amix — FFmpeg's
amixblends the files. When Loudness Norm is on,normalize=0is used (files are already level-matched and the final loudnorm pass corrects the summing gain increase). When off,normalize=1scales by 1/N to prevent level buildup. The combined signal then runs through all stages identically to a single-file job.
The waveform panel shows a live phase indicator during a mix: Leveling file 1 of N… → … → Mixing N files… → Filtering… → Analyzing loudness… → Normalizing… → Limiting…
Output Format
All WaxOn outputs are 24-bit WAV, regardless of input format. Lossless, uncompressed, and compatible with every DAW.
Mix Mode WaxOn
Mix combines two or more audio files into a single processed output. When Loudness Norm is on, each file is individually leveled to the target LUFS before mixing, ensuring a balanced blend regardless of source levels. The full WaxOn pipeline then runs on the combined signal.
Two Common Workflows
Mix raw recordings in one step. Drag two unprocessed tracks (e.g. host and guest recorded separately) into WaxOn, select both, and click Mix. The high-pass filter cleans up low-frequency buildup from the individual recordings before they are blended. Use the default High Pass setting (80 Hz) or adjust to taste.
Mix pre-cleaned files. If you have already processed your individual tracks through WaxOn (or cleaned them in a DAW), you can mix the outputs directly. In this case the high-pass filter has already done its work. Set High Pass to DC Block (20 Hz) in Settings; it will remove only DC offset and infrasonic content without touching the voice range.
How to Mix
- Load your files and select two or more in the file list (⌘-click to multi-select)
- Click Mix
- Watch the waveform panel for live progress
- When complete, the mixed file appears in the list as a processed item
WaxOn Output Files WaxOn
Individual Files
{original-name}-{rate}waxon-{limit}.wav
Examples: episode-01-44kwaxon-1dB.wav guest-48kwaxon-1dB.wav
Mix Output
mix-{rate}waxon-{limit}.wav
Example: mix-44kwaxon-1dB.wav
Location
By default, output files are written alongside the source file. If a custom output directory is configured, all files go there. If neither location is writable, WaxOn falls back to ~/Music/WaxOnWaxOff/. Existing files with the same name are overwritten.
WaxOff Mode WaxOff
WaxOff finalizes your edited podcast mix for distribution. It applies EBU R128 loudness normalization, optional phase rotation, and delivers 24-bit WAV, MP3, or both, ready to upload to your podcast host.
WaxOff assumes your mix is already balanced and edited. It applies a single linear gain adjustment to hit the target loudness: no dynamic processing, no changes to stereo image or transients. If your mix sounds right, WaxOff just makes it loud enough and packages it for delivery.
Quick Start
- Click WaxOff in the toolbar
- Select a preset from the Preset menu in the toolbar, or dial in your settings manually
- Drag your finished mix file onto the window
- Click Process
WaxOff Presets WaxOff
Presets save and restore a complete group of WaxOff settings in one click. The Preset menu is in the toolbar, to the right of the mode switcher.
Built-In Presets
| Preset | Target | True Peak | Output | MP3 | Sample Rate |
|---|---|---|---|---|---|
| Podcast Standard | −18 LUFS | −1.0 dBTP | WAV + MP3 | 160 kbps | 44.1 kHz |
| Podcast Loud | −16 LUFS | −1.0 dBTP | WAV + MP3 | 160 kbps | 44.1 kHz |
| WAV Only (Mastering) | −18 LUFS | −1.0 dBTP | WAV only | — | 48 kHz |
Podcast Standard is correct for most podcast hosting platforms (Spotify, Apple Podcasts, Buzzsprout, etc.).
Podcast Loud targets −16 LUFS for a louder perceived result, still within typical platform limits. Use this if your finished episodes consistently feel quiet on shuffle.
WAV Only (Mastering) outputs a 48 kHz WAV with no MP3. Use when handing off to a mastering engineer or delivering to a video platform.
Custom Presets
Configure your settings, then open the Preset menu and choose Save Current Settings…. Give the preset a name and it will persist across relaunches. Delete custom presets from the same menu.
WaxOff Settings WaxOff
| Setting | Range / Options | Description |
|---|---|---|
| Sample Rate | 44.1 kHz · 48 kHz | Output sample rate for the WAV. 44.1 kHz for podcast delivery; 48 kHz for video or mastering handoff. MP3 output is always encoded at 44.1 kHz regardless of this setting. |
| Output | WAV · MP3 · Both | WAV is always 24-bit PCM. MP3 is CBR at the chosen bitrate. Both produces two output files. |
| MP3 Bitrate | 128 · 160 · 192 kbps | CBR bitrate for MP3 output. 160 kbps is a good default for podcast delivery. Grayed out when Output is WAV only. |
| True Peak | −3.0 to −0.1 dBTP · default −1.0 | Maximum true peak ceiling. −1.0 dBTP is the standard for podcast streaming platforms and prevents inter-sample clipping on compressed streams. |
| Target LUFS | −24 to −14 LUFS · default −18 | Integrated loudness target. −18 LUFS is the podcast standard used by most hosting platforms. −16 LUFS gives a louder result. |
| Phase Rotation | On · Off · default On | Applies a 150 Hz all-pass filter before normalization. Reduces crest factor on bass-heavy material, improving headroom and limiter performance. On by default. |
| Output Dir | Path or empty | Where output files are saved. Empty = same folder as the source. |
WaxOff Processing Pipeline WaxOff
WaxOff uses FFmpeg's loudnorm filter in a two-pass pipeline, the only correct way to apply EBU R128 linear normalization.
-
Analysis Pass FFmpeg's
loudnormfilter measures integrated loudness (I), true peak (TP), and loudness range (LRA) for the entire file. If Phase Rotation is enabled, a 150 Hz allpass is applied before measurement so the rotation is accounted for in the measured values. The measured values feed the next pass. -
Normalization Pass The same filter chain runs again with
linear=trueand the measured values from pass 1 injected. This applies a single precise linear gain: no limiting, no dynamic processing, no change to stereo image or transients. Output: 24-bit WAV at the target sample rate. -
MP3 Encoding Optional If Output is MP3 or Both, the normalized WAV is encoded using
libmp3lameat the chosen CBR bitrate. A pre-encode brick-wall limiter at −2 dBTP prevents inter-sample peak violations after MP3 decode. MP3 is always encoded at 44.1 kHz regardless of the sample rate setting. The WAV is always written first; MP3 is derived from it.
The waveform panel shows live phase labels while processing: Analyzing loudness… → Normalizing… → Encoding MP3…
Why Two Passes?
EBU R128 loudness measurement requires the entire file to compute integrated loudness (gated measurement over the full duration). You can't know the correct gain until you've read every sample, so two passes are unavoidable for accurate normalization. WaxOff makes this transparent: drop the file, click Process, and both passes happen automatically.
WaxOff Output Files WaxOff
Naming
{original-name}-lev-{target}LUFS.wav
{original-name}-lev-{target}LUFS.mp3
Examples: episode-42-final-lev--18LUFS.wav episode-42-final-lev--18LUFS.mp3
Location
Output files are written alongside the source by default, or to your configured output directory. Existing files with the same name are overwritten.
File Stats
Selecting a file in either mode displays a stats strip below the waveform. Stats are computed asynchronously as files load and typically appear within a second or two of dropping a file in.
The strip has two rows separated by a divider: file info on top, audio analysis below.
File Info Row
Audio Stats Row
Supported Formats
WAV, AIFF, AIF, MP3, FLAC, M4A, OGG, Opus, CAF, WMA, AAC, MP4, MOV.
MP4 and MOV are video containers; WaxOn/WaxOff extracts the audio track and processes it normally. All processing uses FFmpeg, bundled inside the app. No separate installation required. Unsupported file types are silently rejected; a notice appears if any files in a drop were skipped.
Tips & Workflow
The Full Podcast Workflow
- Record host and guest on separate tracks
- Drop both files into WaxOn
- Select both and click Mix to produce a single blended track, or process them separately and combine in your DAW
- Edit in your DAW: remove noise, add music, cut and arrange
- Export your finished mix from the DAW
- Drop the export into WaxOff and click Process
- Upload the WaxOff output to your podcast host
Checking Levels Before Processing
Select a file and read the stats strip before hitting Process. The LUFS value tells you how loud the file is. In WaxOn, if LUFS is much lower than your target, normalization will apply significant gain, which is fine for ingest but worth knowing. In WaxOff, comparing input LUFS to your target tells you how much gain WaxOff will apply.
Reading the Noise Floor
The FLOOR stat estimates the background noise level. Below −60 dBFS is typically a clean recording. Between −60 and −50 dBFS the noise may be audible but is unlikely to affect processing. Above −50 dBFS (orange) the noise floor is high enough to skew loudness measurements, and above −40 dBFS (red) it will almost certainly affect results. At those levels, enabling Noise Reduction is recommended.
WaxOn: Loudnorm On or Off?
For consistent batch ingest where files were recorded at different gain levels, turn Loudness Norm on. It ensures every file lands at the same integrated loudness before the limiter. For a single file or when you want to preserve the original level relationship between takes, leave it off and let the limiter handle ceiling compliance only.
WaxOff: Choosing a LUFS Target
−18 LUFS is the standard for most podcast platforms. −16 LUFS gives a louder result but is still within typical platform limits. Going higher than −14 LUFS risks clipping or rejection by some platforms. When in doubt, use the Podcast Standard preset.
WaxOn: Mono vs. Stereo for Podcasts
Most podcast editing workflows prefer mono tracks per speaker, which are easier to pan, balance, and process individually. Use Mono / Left for a standard single-mic recording on channel 1. If your interface captures both mics on a single stereo file, use Mix to blend them before editing.
WaxOff: Phase Rotation
Leave Phase Rotation on unless you have a specific reason to turn it off. The 150 Hz allpass filter reduces the crest factor of bass-heavy material, giving the loudness normalizer and limiter more headroom. The effect on audio character is inaudible.
WaxOn/WaxOff is free software licensed under the GPL-3.0. Built by Seven Morris with AI collaboration.