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

Installation

  1. Download the DMG from the link above
  2. 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.

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:

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

  1. Click WaxOn in the toolbar (or choose it from the mode picker)
  2. Select a preset from the Preset menu in the toolbar, or adjust controls in the processor strip and Settings sidebar
  3. Drag your audio files onto the window
  4. 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.

  1. 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.
  2. Dynamic Leveling Optional Bidirectional dynamic normalization using FFmpeg's dynaudnorm. Lifts quiet voices and tames loud ones. The Strength knob maps to three dynaudnorm parameters simultaneously: frame size (f 500→150 ms), Gaussian smoothing window (g 31→15 frames), and maximum gain factor (m 2.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.
  3. 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.
  4. Brick-Wall Limiting The signal is upsampled to 2× the target rate, passed through FFmpeg's alimiter with 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

  1. Click WaxOff in the toolbar
  2. Select a preset from the Preset menu in the toolbar, or dial in true peak and target loudness in the processor strip
  3. Drag your finished mix file onto the window
  4. 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.

  1. Analysis Pass A 200 Hz allpass for phase rotation is prepended to FFmpeg's loudnorm filter, 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.
  2. Normalization Pass The same filter chain runs again with linear=true and 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.
  3. 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.
  4. MP3 Encoding Optional If Output is MP3 or Both, the normalized WAV is encoded using libmp3lame at 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

FORMAT
Container format: WAV, MP3, FLAC, etc.
SR
Sample rate: 44.1 kHz, 48 kHz, etc.
CH
Channel layout: Stereo or Mono
BIT
Bit depth: 16-bit, 24-bit, 32-bit. Not shown for lossy formats.
DUR
Duration in M:SS or H:MM:SS
BR
Bit rate derived from file size and duration (Mbps or kbps)

Audio Stats Row

RMS
Root Mean Square level in dBFS. Represents average loudness over the entire file.
PEAK
Sample peak level in dBFS. The highest sample value across all channels. Color-coded: orange at −3 dBFS and above, red at 0 dBFS.
CREST
Crest factor (PEAK − RMS) in dB. Indicates dynamic range. Higher values mean more headroom between peaks and average level.
LUFS
Integrated loudness per ITU-R BS.1770-4. The broadcast and streaming standard. Computed with K-weighting and two-stage gating (absolute −70 LUFS, relative −10 LU).
FLOOR
Estimated noise floor in dBFS. The 10th percentile of per-block RMS values, representing the quietest sections of the file (room tone, background noise). Color-coded: orange above −50 dBFS (may affect loudness accuracy), red above −40 dBFS (likely affecting measurements). Only shown when enough audio blocks are available to estimate.
LUFS vs. RMS Both measure loudness, but LUFS is perceptually weighted and gated. Silence doesn't drag the number down, and high-frequency content is weighted more like human hearing. For comparing files intended for broadcast or streaming, LUFS is the more meaningful number.
Noise Floor Warning Files with a high estimated noise floor show a ⚠️ badge next to the filename in the file list. A high noise floor can inflate integrated loudness measurements, causing loudness normalization to underestimate the gain needed for the speech content. When Loudness Norm is enabled, WaxOn automatically applies RNNoise to the measurement pass (only — the output signal is never touched) to mitigate this. If the badge appears, the most reliable mitigation is to enable Loudness Norm so the auto-NR analysis runs.

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

  1. Record host and guest on separate tracks
  2. Drop both files into WaxOn and click Process
  3. Edit in your DAW: remove noise, add music, cut and arrange
  4. Export your finished mix from the DAW
  5. Drop the export into WaxOff and click Process
  6. 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.