WaxOn/WaxOff
Podcast audio utility for macOS. Signal conditioning for ingest and broadcast normalization for delivery.
WaxOn prepares raw recordings for ingest. WaxOff finalizes your mixed audio 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
First Launch: Mode Picker
On first launch, a compact mode picker appears. Choose WaxOn to prepare raw recordings, or WaxOff to finalize a mix. After your first selection, the app remembers your last-used mode and opens directly into it. Switch modes any time using the WaxOn | WaxOff segmented control in the toolbar; each mode maintains its own independent file list, so switching doesn't disturb your work in the other mode.
Updates
WaxOn/WaxOff checks for updates silently on launch and notifies you when a new version is available. You can also check manually at any time: Help → Check for Updates…
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 (Process, Remove, Clear). The far right end of the toolbar holds the settings-sidebar toggle.
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
- RMS … dBFS · Peak … dBFS — analysis complete; the file is ready to process
- Processing — pipeline is running; a progress bar appears under the row
- Output: … — processed; a green ✓ Complete indicator appears next to the filename and a folder icon reveals the output in Finder
- Error — something went wrong; the message is shown inline
Files with a high estimated noise floor show an orange warning triangle next to the filename. Hover over the badge for detail. In WaxOff, mono sources also show a small MONO→STEREO badge as a reminder that the output will be upmixed to dual-mono.
WaxOn processes multiple files concurrently, scaling with available CPU cores. 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
- 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 holds output format settings for the current mode (sample rate, channels, output directory). Toggle it open or closed with the sliders icon at the far right of the toolbar.
Processor Strip
The bar across the bottom of the window holds all processing controls for the current mode — high-pass, phase rotation, dynamic leveling, loudness normalization in WaxOn; true peak and target loudness in WaxOff. Toggles glow orange when enabled. Knobs respond to vertical drag or the scroll wheel and snap to discrete steps; a short helper line under each control describes what it does. All values persist between sessions and are captured by presets.
WaxOn Mode WaxOn
WaxOn prepares raw podcast recordings for editing in a DAW. It handles high-pass filtering, optional dynamic leveling, 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 spectral repair, noise reduction, or multiband restoration. For recordings with noise problems, de-essing needs, or other surgical work, dedicated tools like iZotope RX are the right choice.
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 adjust controls in the processor strip and Settings sidebar
- Drag your audio files onto the window
- Click Process
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 |
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.
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. |
| High Pass | On · Off · default On | 80 Hz high-pass filter — removes rumble, handling noise, and proximity-effect bass buildup without thinning the voice. Off drops the cutoff to 20 Hz (DC floor only). DC offset is always removed regardless of this setting. |
| Phase Rotation | On · Off · default On | 200 Hz allpass filter that reduces peak asymmetry on voice recordings, recovering 1–4 dB of headroom before the limiter. The effect on speech is inaudible. Leave on unless you have a specific reason to disable. |
| Dynamic Leveling | On · Off · default Off | Bidirectional dynamic normalization. Best for panel recordings, live Q&As, and multi-guest sources where voices are at inconsistent levels. Not recommended for regular solo voice use — can cause pumping artifacts on recordings with natural pauses. See Theory of Operation. |
| Strength | Gentle → Aggressive · 8 steps · default Medium | Controls how quickly and strongly Dynamic Leveling responds. Lower settings use longer analysis frames and a smaller maximum gain (≈ +6 dB) for smoother, more conservative leveling; higher settings use shorter frames and a larger maximum gain (≈ +15 dB) for faster, more aggressive response. Audition output before editing. Dimmed when Dynamic Leveling is off. |
| Loudness Norm | On · Off | Enables two-pass EBU R128 loudness normalization. The analysis pass applies RNNoise internally on a temp copy to prevent broadband noise from skewing the loudness measurement; the output signal is not affected. Off = filtering and limiting only. |
| Target LUFS | −16 to −35 LUFS · 1 LUFS steps · default −30 | Integrated loudness target when Loudness Norm is on. −30 LUFS is conservative for ingest and leaves plenty of headroom for editing. Dimmed 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 required stages plus up to four optional ones.
-
Filter, Channel & Resample A single high-pass filter at
max(cutoff, 20 Hz)— so even with HPF set to Off, a 20 Hz floor remains and DC offset is always removed. Followed by channel selection if Mono output is selected, an optional 200 Hz allpass for phase rotation (reduces peak asymmetry and improves limiter headroom — on by default), and resampling to the target rate. Output at this stage: 24-bit PCM WAV at the target sample rate. -
Dynamic Leveling Optional Bidirectional dynamic normalization using FFmpeg's
dynaudnorm. Lifts quiet voices and tames loud ones. The Strength knob maps to threedynaudnormparameters simultaneously: frame size (f500→150 ms), Gaussian smoothing window (g31→15 frames), and maximum gain factor (m2.0→6.0, ≈ +6 to +15 dB). Best for panel recordings, live Q&As, and multi-voice sources with inconsistent levels. Not recommended for solo voice — can cause pumping on recordings with natural pauses. See Dynamic Leveling in the Theory of Operation. -
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. The analysis pass runs RNNoise on a temporary copy for measurement accuracy — preventing broadband noise from inflating the LUFS reading; the output pipeline is unaffected. See 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.
Output Format
All WaxOn outputs are 24-bit WAV, regardless of input format. Lossless, uncompressed, and compatible with every DAW.
WaxOn Output Files WaxOn
Individual Files
{original-name}-{rate}waxon.wav
Examples: episode-01-44kwaxon.wav guest-48kwaxon.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 phase rotation (200 Hz allpass) for headroom recovery, EBU R128 loudness normalization, and a 2× oversampled brick-wall limiter as a true-peak safety backstop. It 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 from loudnorm to hit the target loudness — no compression, no changes to stereo image. Phase rotation is applied unconditionally as a transparent crest-factor reduction. The brick-wall limiter only engages when inter-sample peaks slip past loudnorm's TP analysis; on a well-mixed source it leaves the audio untouched. See the Theory of Operation for detail. 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 true peak and target loudness in the processor strip
- 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.5 dBTP · 0.5 dBTP steps · 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 · 1 LUFS steps · default −18 | Integrated loudness target. −18 LUFS is the podcast standard used by most hosting platforms. −16 LUFS gives a louder result. |
| 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 A 200 Hz allpass for phase rotation is prepended to FFmpeg's
loudnormfilter, which measures integrated loudness (I), true peak (TP), and loudness range (LRA) for the entire file. The allpass runs first so the TP measurement reflects the post-rotation peak budget; 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. The 200 Hz allpass is applied here too so the rendered output matches what was measured. This applies a single precise linear gain: no compression, no change to stereo image. Output is always stereo (2-channel) — mono sources are upmixed to dual-mono. -
Brick-Wall Limiter A 2× oversampled true-peak limiter runs after loudnorm with its ceiling set to the user's true-peak target. It exists as a safety backstop for inter-sample peaks that loudnorm's linear-mode TP analysis missed; on a well-mixed source it doesn't engage. 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 sits 1 dB below the user's true-peak target as a margin for the inter-sample peak overshoot lossy decoders introduce, so the decoded MP3 stays under the same effective ceiling as the WAV output. 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
The {target} placeholder includes its sign — e.g. -18 — so a target of −18 LUFS produces …-lev-18LUFS.wav.
Examples: episode-42-final-lev-18LUFS.wav episode-42-final-lev-18LUFS.mp3
Channels
WaxOff always outputs stereo (2-channel). If the source is mono, FFmpeg upmixes it to dual-mono — identical left and right channels, centered as expected. There is no channel setting in WaxOff.
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, AIFC, 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 and click Process
- 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, make sure Loudness Norm is enabled — WaxOn auto-applies RNNoise to the measurement pass — and consider running a dedicated noise-reduction tool (e.g. iZotope RX) on the source before WaxOn for the best result.
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, set Output to Stereo and process before bringing into your DAW.
Phase Rotation (WaxOn)
Leave Phase Rotation on unless you have a specific reason to turn it off. The 200 Hz allpass reduces the crest factor of voice recordings, recovering headroom for the limiter. The effect on speech is inaudible.
WaxOn/WaxOff is free software licensed under the GPL-3.0. Built by Seven Morris with AI collaboration.