Skip to content
belugamingPublic

About

System-wide parametric EQ, per-app mixer and headphone correction (AutoEQ + squig.link) for macOS. No driver, built on Core Audio process taps.

Topics

Resources

Stars

4 stars

Watchers

0 watching

Forks

Repository files navigation

Tapline icon

Tapline

CI Release macOS 15+ Apple Silicon and Intel Windows 10+ License: GPL-3.0

A system-wide parametric EQ, per-app mixer and headphone correction tool for macOS and Windows.
No audio driver, no virtual device on macOS: Tapline is built on Core Audio process taps.
The Windows version is built on Equalizer APO.
简体中文

tapline-github-en.mp4

Tapline equalizer

What is Tapline?

Tapline sits between your apps and your speakers or headphones and lets you shape everything you hear: a precise parametric EQ with a live spectrum analyzer, per-app volume, headphone correction curves computed from published measurements, and a handful of listening effects. It lives in the menu bar, follows whatever output macOS is using, and keeps a separate setup for every device.

Tapline is also available for Windows 10 and 11, with the same pages, built on Equalizer APO. See Windows.

What makes it different:

  • No driver to install. On macOS, Tapline uses the process tap API that macOS 14.2+ provides. Nothing is added to the system, and if Tapline quits, audio simply goes back to normal.
  • An EQ you can see. Drag bands on the frequency response, watch the spectrum before and after the EQ, compare A/B, undo anything.
  • Headphone correction that keeps up. Apply one of 5,000+ AutoEQ presets, or let Tapline fit an EQ from 40,000+ raw measurements on squig.link, including headphones released last week.
  • Room correction for speakers. Measure your speakers with a microphone where you sit: Tapline checks balance, distance, polarity and placement, tames the room's bass resonances, and can write the correction into an RME ADI-2 DAC.
  • Made for listening, safe for production. Bypass a DAW in the mixer and it plays untouched, or take your headphone correction into it: Tapline comes with an Audio Unit for Logic Pro, GarageBand and other hosts, like SoundID Reference's plugin.
  • Free and open source (GPL-3.0), written in Swift with a realtime core in C; the Windows version is written in C#.

Contents

Requirements

macOS

  • macOS 15 Sequoia or later
  • A Mac with Apple Silicon or an Intel processor

Windows

  • 64-bit Windows 10 or 11 on an x64 PC (Windows on ARM isn't supported, because Equalizer APO only exists for x64)
  • Equalizer APO (free) on the output devices you use

Install

These steps are for macOS. For Windows, see Install on Windows.

  1. Download Tapline-x.y.z.dmg from the latest release.
  2. Open it and drag Tapline.app onto the Applications shortcut next to it.
  3. Open Tapline. Release builds are not notarized yet, so macOS blocks the first launch. Go to System Settings → Privacy & Security, scroll down and click Open Anyway next to the message about Tapline. (Since macOS 15, right-clicking and choosing Open no longer works for this.)

To update, quit Tapline and replace the app with the new one. Releases are signed with Tapline's own certificate, so macOS keeps the audio permission across updates. Coming from an older, ad-hoc signed release, it asks once more.

Windows

Tapline also runs on 64-bit Windows 10 and 11. The Windows version has the same pages as on the Mac (Equalizer, Assistant with headphone correction, Room, Mixer, Effects, Devices) and keeps a separate EQ for every output device.

Windows has no equivalent of the macOS process taps, so Tapline uses Equalizer APO (free, open source) as its audio engine: Tapline is the editor, and Equalizer APO applies the EQ inside Windows' audio engine. Windows releases are titled "Tapline for Windows" and use the Mac's version numbers; what changed on Windows is in windows/CHANGELOG.md. Please report problems in Issues.

What works on Windows

Feature macOS Windows
Parametric EQ, up to 24 bands: drag on the graph, presets, A/B, undo, Auto preamp ✓ ✓
Bands for the left or right channel only ✓ ✓
Level-matched EQ bypass ✓, crossfaded ✓
Linear-phase EQ, high precision ✓, 704 ms latency at 48 kHz; edits crossfade ✓ (Equalizer APO's convolver), 683 ms at 48 kHz; the sound pauses after each change
Linear-phase EQ, low latency ✓, 176 ms latency at 48 kHz ✗ (macOS only for now)
A separate EQ for every output device ✓ ✓, and it keeps playing while Tapline is closed
Spectrum analyzer Before and after the EQ After the EQ only
Headphone correction: AutoEQ, squig.link, your own measurement ✓ ✓
Room correction: guided measurement, setup check, separate left/right correction, RME ADI-2 export ✓ ✓
Surround and Dolby Atmos speakers (5.1 … 9.1.6): wiring check, a correction, trim and delay for every speaker ✓ ✓ (per-channel Equalizer APO sections)
Quick Tone, Sound Assistant, import and export (Equalizer APO, AutoEQ, RME ADI-2) ✓ ✓
Per-app volume and mute 0–200 % 0–100 % (Windows' own app volumes)
Let one app bypass Tapline ✓ ✗ (apps that use exclusive mode or ASIO are never processed)
Limiter ✓ ✗ (keep the preamp on Auto)
Output gain, balance, stereo width, mono, swap left and right, crossfeed ✓ ✓ (on a mono output only output gain)
Virtual speakers (HRIR/BRIR convolution, HeSuVi import) ✓ ✓ (Equalizer APO's convolver)
Listen As: other headphones (squig.link) and everyday speakers through your headphones ✓, level-matched ✓, quieter than level-matched where a boost could clip (no limiter)
Audio Unit plugin for Logic Pro, GarageBand and other hosts ✓ (AUv3) ✗
Switch the output or input device ✓ ✓
Change a device's sample rate ✓ ✗ (shown only)
Quick panel Menu bar Notification area (tray)
Global shortcuts ⌃⌥⌘P / B / K / L Ctrl+Alt+Shift+P / B / K / L
Open at login ✓ ✓

Install on Windows

  1. Install Equalizer APO. At the end its Configurator opens: tick the output devices you use (speakers, headphones…), then restart Windows.
  2. Download Tapline-x.y.z-win-x64-setup.exe from the newest release whose title starts with "Tapline for Windows", and run it. It is not code-signed yet, so SmartScreen may warn: click More info → Run anyway.
  3. Open Tapline. If Equalizer APO already has a configuration, Tapline asks before it replaces it: click Use Tapline, or Import Its EQ as a Preset and Use Tapline to keep your old EQ as a preset. The old configuration is also kept as config-before-tapline.txt and can be restored under Devices → Audio Engine.
  4. Play something and pick a preset, or continue with the tutorials.

Using Tapline on Windows

The tutorials show the Mac version. The Windows pages work the same way, and a note under each tutorial says where Windows differs. In short:

  • Keys: read ⌘ as Ctrl and ⌥ as Alt. In the window: Ctrl+Z undo, Ctrl+Y redo, Ctrl+B bypass the EQ, Ctrl+K compare A/B. Global shortcuts (turn them off in Settings): Ctrl+Alt+Shift+P turns processing on or off, Ctrl+Alt+Shift+B bypasses the EQ, Ctrl+Alt+Shift+K switches between A and B, Ctrl+Alt+Shift+L switches Listen As on or off.
  • The EQ keeps playing when Tapline is closed, because Equalizer APO applies it, even after a restart. To hear the original sound, switch processing off: the power button, the tray panel, Ctrl+Alt+Shift+P or Settings → Process audio.
  • Notification area: click Tapline's icon for a quick panel (processing, output device, volume, EQ and preset, Listen As, the apps playing); right-click it to quit. Closing the window keeps Tapline running there; turn this off in Settings to quit when the window closes.
  • Only devices with Equalizer APO are processed. The Devices page marks the others with No Equalizer APO: tick them in Equalizer APO's Configurator (Open Configurator on the banner) and restart. If Windows' Audio enhancements are off for a device, Equalizer APO is skipped too, and Tapline shows a banner that opens the Sound settings. An output whose EQ you have never changed plays unprocessed.
  • Room measurements take the measured output out of Equalizer APO's configuration for the length of the measurement, so everything playing on it is briefly unprocessed. If the microphone records only silence, allow microphone access in Windows' privacy settings (Open Microphone Settings).
  • The interface is in English or Simplified Chinese, following the Windows display language.

Update and uninstall

To update, run the installer of the new version; your EQ and presets are kept. To uninstall, remove Tapline in Settings → Apps: the uninstaller gives Equalizer APO its previous configuration back. Tapline's settings stay in %APPDATA%\Tapline; delete that folder to remove them too.

Quick start

The quick start and the tutorials describe the macOS version. On Windows, follow Install on Windows instead of this quick start; the tutorials apply, with a note where Windows differs.

  1. Quit other audio tools such as SoundSource or eqMac. Two tools processing the same audio interfere with each other; Tapline shows a warning while one is running.
  2. Turn Tapline on with the power button at the bottom left of the window (or press ⌃⌥⌘P).
  3. Allow System Audio Recording when macOS asks. This is what lets Tapline process other apps' sound. Audio never leaves your Mac.
  4. Play something. The spectrum starts moving and the meters on the right show the output level.
  5. Pick a preset from the menu at the top of the Equalizer page, or continue with the tutorials below.

Tapline keeps running in the menu bar when you close the window or press ⌘Q; the Dock icon goes away until you open the window again. To quit completely, use the power button in the menu bar panel or ⌥⌘Q. Turn on Settings → Open Tapline at login to have it start with your Mac.

Tutorials

1. Shape the sound with the EQ

The Equalizer page is the heart of Tapline. The large graph shows the EQ curve (white) on top of the live spectrum of what is playing (blue). The faint grey line is the spectrum before the EQ.

To Do this
Move a band Drag its numbered point: left/right for frequency, up/down for gain
Change the width (Q) Scroll or pinch over a point
Add a band Double-click an empty spot of the graph, or click Add Band
Delete a band ⌥-click it, press Delete, or use the trash button
Fine adjustments Hold ⌥ while dragging, or use the arrow keys on the selected band
Change the filter type Right-click a point, or use the shape buttons below the graph

Below the graph:

  • Band chips list every band. Click one to select it.
  • Inspector: filter type (bell, low/high shelf, low/high pass, notch, band pass), on/off switch and three knobs for Frequency, Gain and Q. Drag a knob up or down, double-click it to reset, or click its value to type a number (1.2k works).
  • Preamp with Auto: lowers the level by exactly the largest boost of your curve, so the EQ cannot clip. This is why boosting the bass makes everything a little quieter; turn the volume up to compensate.

At the top of the page:

  • EQ switch: turn the EQ off for this device. Press ⌃⌥⌘B anywhere to compare with the original sound. The comparison is fair: a correction's preamp makes it a few dB quieter than the original, and louder almost always sounds better, so while the EQ is off Tapline plays the original at the loudness of the EQ. The gain shows next to the switch (Level-matched −4.6 dB, for example). It is the EQ's loudness change on pink noise, weighted like a LUFS meter (ITU-R BS.1770), and never a boost. To hear the original at its own level, turn off Settings → EQ Bypass → Match loudness when bypassing. Switching crossfades over a few milliseconds, so it doesn't click.
  • Preset menu: built-in presets (Bass Boost, Vocal Clarity, Loudness and more) and your own. Delete Preset is at the bottom of the menu.
  • Save (download icon): save the current curve as a preset. Tick Include effects to store crossfeed, limiter and the other effects with it.
  • A / B: two independent settings to switch between. Make a change on B, then toggle to hear the difference.
  • Range (±6 to ±24 dB) and the input spectrum toggle.
  • ⋯: reset to flat, copy A to B, copy the curve as Equalizer APO text, or choose the Filter Phase.

Undo and redo (⌘Z / ⇧⌘Z) cover every change.

On Windows: use Ctrl for ⌘ and Alt for ⌥ (Alt-click deletes a band; Alt or Shift for fine adjustments). Scroll changes Q; there is no pinch. The graph shows the spectrum after the EQ only, so there is no input spectrum toggle. Undo and redo are Ctrl+Z and Ctrl+Y. The level-matched bypass is a Preamp line in Equalizer APO's configuration; switching doesn't crossfade.

Linear phase

Like an analog EQ, every band shifts the phase a little around its frequency. That is minimum phase, and it plays without latency. ⋯ → Filter Phase (or Settings → Filter Phase) plays the same curve as a linear-phase filter instead, like the linear-phase modes of SoundID Reference or FabFilter Pro-Q: no phase shift at all, so transients keep their shape, but the sound comes later. Each output device has its own setting, with two lengths:

  • Low latency (the default when you switch to linear phase): 176 ms at 48 kHz, 192 ms at 44.1 kHz. It keeps headphone and speaker corrections exact: shelves, high-passes and AutoEQ-style curves within 0.01 dB, bass bells up to Q 2 from 20 Hz and Q 4 from 45 Hz within 0.2 dB. Narrower bass bells come out a little short (Q 4 at 30 Hz by 0.4 dB).

  • High precision: 704 ms at 48 kHz, 766 ms at 44.1 kHz. A filter of 1.37 s (65,536 taps, and as long at higher rates) that also resolves narrow bells at the very bottom: up to Q 10 and ±12 dB from 40 Hz within 0.15 dB. Only the narrowest bells the app allows lose some depth: Q 18 at 20 Hz comes out about 1 dB short at ±6 dB.

  • The latency shows next to the EQ switch. Video may lose lip sync, and play and pause take that long to be heard, so linear phase is best for music.

  • The graph shows what plays.

  • Dragging a band recomputes the filter in the background and crossfades to it, so editing stays smooth. The bypass (⌃⌥⌘B) plays the original just as late, so switching compares the sound without a jump in time.

  • Switching between minimum phase and the two lengths changes the delay, so the music pauses for a moment (or skips ahead) without a click.

  • Room correction keeps its timing: linear phase removes only the EQ's own phase shift, not the room's, and room measurements bypass the EQ.

  • Linear phase applies to stereo outputs. A surround speaker layout (5.1 … 9.1.6) keeps minimum phase, so all speakers stay in time; the setting is greyed out there. On an audio interface with more outputs than the stereo pair, the other outputs are delayed along with it.

On Windows: linear phase has only the high-precision length for now; low latency is macOS only. Equalizer APO plays the filter with its convolver, 683 ms late at 48 kHz. It restarts the convolver whenever its configuration changes, so after each change the sound pauses for that long. Tapline therefore writes a new filter only when you stop adjusting, half a second after the last change.

2. Correct your headphones

Every headphone colours the sound. Correction curves bring it closer to a neutral target. Open Assistant → Headphone Correction and pick a source:

Headphone correction

AutoEQ presets: ready-made curves for 5,000+ headphones. Search your model, pick a result and click Apply Correction. Results from oratory1990 and crinacle are listed first. The AutoEQ database was last updated in July 2025, so newer headphones may be missing. Strength applies part of the curve: at 50 % every band has half its gain.

squig.link measurements: raw measurements from 130+ reviewer databases, updated continuously. Tapline computes the EQ itself:

  1. Search your model. Each result shows who measured it and with which rig. The name usually says in which mode it was measured (ANC on/off, wired, passive, a volume step…). Pick the mode you actually use.
  2. Choose a Target. Each database offers targets that match its rig; a Harman target is a good start.
  3. Read the chart: grey is the headphone as measured, dashed is the target, green is the result with Tapline's EQ. The closer green follows dashed, the better. Deviation shows the average difference before → after.
  4. Adjust to taste: Strength sets how much of the correction to apply, like a Dry/Wet control: at 50 % the EQ is fitted to a curve halfway between your headphones and the target, so the green line lands halfway and Deviation shows how much is left. Bass adds a low shelf on top of the target, Tilt makes the balance brighter (right) or warmer (left), Filters sets how many bands are used (10 is plenty).
  5. Click Apply Correction. The curve is applied to the current output and saved as a preset you can keep editing.

My measurement: import a frequency response you measured yourself (REW, miniDSP EARS, CSV) and fit it to a target from any database. Strength, Bass, Tilt and Filters work as for squig.link.

Tips:

  • Keep my bass leaves everything below 250 Hz alone. Use it when you listen differently from how the headphones were measured, for example noise-cancelling headphones used passively (powered off) on a cable: their bass changes a lot when the electronics are off, so the measured bass correction would be wrong.
  • Treble above 8 kHz is only corrected broadly, because measurement rigs disagree a lot up there.
  • AirPods and other adaptive headphones change their own EQ with volume and fit. Corrections for them are approximate; compare with ⌃⌥⌘B and keep what sounds better.
  • A full correction can sound odd at first, because your ears are used to your headphones. Try a lower Strength, such as 70 %, and raise it later if you like. Compare with ⌃⌥⌘B: the bypass is level-matched, so you hear the difference in sound, not in level.

3. Correct your speakers and room

In a room, the bass of any speaker is shaped by the walls: some notes boom, others nearly vanish. The Room page measures your speakers with a microphone at your listening position, tells you what to fix at the speakers first, and computes an EQ, either for Tapline or for the EQ built into an RME ADI-2 DAC.

Room correction

What you need: a microphone on an input your Mac can see. A measurement microphone (miniDSP UMIK-1/UMIK-2, or an XLR measurement mic on an audio interface) is best; a good studio condenser microphone works well for the bass. Condenser microphones need phantom power (48 V) on the interface. The Mac's built-in microphone only gives a rough idea. The microphone and the speakers can be on different interfaces.

  1. Prepare: pause all music, keep the room quiet and turn the volume down to a comfortable level. Measurements play at the current output volume. Switch off any EQ, Bass/Treble or Loudness in your DAC (an RME ADI-2 included) so Tapline measures the speakers as they are. The same goes for software behind a virtual output device, such as SoundID Reference: Tapline warns when the output or the input is a virtual device.
  2. Microphone: choose the Input and Channel your microphone is on. Load its Calibration file if it came with one. Place it at ear height where you sit, pointing between the speakers.
  3. Check Level: Tapline plays three seconds of pink noise. Adjust the volume or the preamp gain until the microphone peaks between −30 and −10 dB.
  4. Measure: choose Left & right. One run plays an 8-second sweep on each speaker, then three short clicks for timing (about 22 seconds in all). Measure three to five positions around your head; Tapline averages them. A map below the button shows where to put the microphone next (your listening spot, then about 20 cm to the left, right, front and back) and how many positions are done. While a measurement runs you see which speaker is playing, the seconds left and the microphone level. Each measurement is marked Good, Fair or Measure again (clipped, noisy, or clearly unlike the other positions); delete it with the bin and measure that spot again. Together measures both speakers at once, Left and Right one side.
  5. Check the setup: Tapline lists what is better fixed at the speakers than with EQ:
    • Polarity: one speaker wired the other way round.
    • Balance: one side louder. Fix it on the speaker or in the DAC, or let Tapline set its balance.
    • Distance: one speaker farther away, in centimetres. The timing clicks cancel the clock drift between two interfaces, so this works with the microphone on one interface and the speakers on another.
    • Subwoofer level, boomy lower bass and desk bounce, with the speaker switch that fixes it (on Genelec monitors: Bass Tilt, Desktop Control, Treble Tilt).
    • Room resonances, with the room dimension each one fits, and deep dips that EQ cannot fill, with what to try instead (the subwoofer's phase switch, moving the seat or the speakers).
  6. Correct: choose where the correction runs.
    • Tapline corrects what this Mac plays. Click Apply to …; the correction is saved as a preset.
    • RME ADI-2 DAC fits the DAC's own parametric EQ: five bands per channel, bands 4 and 5 from 200 Hz, 0.5 dB steps. Click Export for ADI-2 Remote…, then in RME's ADI-2 Remote app open EQ Presets, click File – Load, pick the file and Store it to the unit. The DAC then corrects every source connected to it. Preview in Tapline lets you listen first. Use one or the other, not both, or the room is corrected twice.
    • Correct left and right separately (on after a Left & right measurement) fits each speaker on its own; on the ADI-2 this uses Dual EQ.
    • The chart shows the measured response (grey), the target (dashed) and the result (green), and the filters are listed below it. With several positions, a grey band shows how much they disagree (one standard deviation): where it is wide the average is less certain. Positions draws each one. Correct below (default 500 Hz) leaves your speakers' own tuning above it alone. It goes up to 20 kHz: above about 2 kHz the EQ also corrects the speakers themselves (a crossover dip, a bright tweeter), which needs several positions and preferably a calibrated microphone. Max boost (default 3 dB) keeps dips from being boosted much: they come from sound cancelling itself at your seat, and boosting them mostly costs amplifier headroom. Tapline also never boosts below your speakers' low-frequency limit. Choose Flat or Room curve (a gentle bass lift and treble roll-off) and fine-tune with Bass and Tilt.

Copy Filters as Text gives the filters in Equalizer APO format (with Channel: L / Channel: R sections for separate corrections) for any other hardware EQ.

Tips: measurements bypass Tapline's own EQ and balance, so measuring again always shows the room as it is. To check a correction loaded into the ADI-2, measure again with its EQ on. Subwoofer crossover settings and time alignment are left to the subwoofer's own controls; if your speakers have a calibration system of their own (such as Genelec GLM for SAM models), use that first.

On Windows: room correction works the same. While a level check or measurement runs, the measured output plays without Tapline's EQ and effects for every app, not only the test signal.

Surround and Dolby Atmos speakers

When the output is a multichannel speaker layout (5.1, 7.1, 5.1.4, 7.1.4, up to 9.1.6), the Room page measures and corrects every speaker on its own, and lines them up in level and time at your seat. Tapline reads the layout from macOS: set it in Audio MIDI Setup › Configure Speakers (an AV receiver on HDMI usually reports its own).

Room correction for a 7.1.4 layout

  1. Speakers: a map of the layout. Check Wiring plays pink noise on each speaker in turn and asks whether it comes from that speaker; click a speaker on the map to hear it alone.
  2. Measure All Speakers: one run plays a 6-second sweep on every speaker in turn, then a short click on each for timing (a low rumble on the subwoofer), about a minute and a half per position for 7.1.4. Measure three to five positions, as for stereo.
  3. Levels, Distances and Polarity: every speaker against the front left: its level in its own band, how much nearer or farther it is, its polarity, and the trim and delay that align it. Tapline turns the louder speakers down to the quietest and holds back the nearer ones until the farthest arrives (up to 50 ms). The subwoofer's level (30–80 Hz) and distance (which includes the delay of its low-pass filter) come with advice; its level is left to the subwoofer's own gain or the receiver.
  4. Correct: a correction for each speaker, with the same targets and limits as for stereo. Correct below has two values: the front speakers (500 Hz) and the surrounds and heights (300 Hz, as they are usually small speakers near a wall or the ceiling, which the microphone hears off-axis). The LFE channel is corrected below 120 Hz and never boosted above it. Apply to … stores each speaker's filters, trim and delay with the output's settings; Effects › Speakers switches them off and on. Copy Filters as Text gives an Equalizer APO section per speaker (Channel: 3, Preamp:, Delay: and its filters).

How Tapline plays a multichannel output:

  • Your EQ (bands, Quick Tone and preamp) plays on every speaker, or only on the front left and right with Effects › Speakers › Play the EQ on every speaker off. On the LFE channel it leaves out boosts above 120 Hz.
  • Balance, stereo width, mono and swap act on the front left and right speakers. Crossfeed, Virtual Speakers and Listen As are for headphones and stay off.
  • Filter Phase applies to stereo outputs: a speaker layout keeps minimum phase, as a linear-phase front pair would play late against the other speakers.
  • Each speaker's correction, trim and delay come last, then one limiter for all speakers, so their balance holds.

Good to know:

  • Tapline processes PCM only. Apple Music's Dolby Atmos on macOS is rendered to multichannel PCM for the speaker layout you set up, so Tapline processes it like any other sound. A Dolby bitstream passed through to an AV receiver (Dolby Digital or TrueHD over HDMI passthrough, for example on Windows) cannot be processed: let the computer decode it to multichannel PCM instead.
  • Bass management and crossovers stay the receiver's job: set the speakers to Small or Large and the crossover there.
  • Switch off the receiver's own room correction (Audyssey, Dirac Live, YPAO) while measuring, and then use either it or Tapline, not both: two corrections work against each other.

On Windows: the same steps, with the layout from Windows' speaker setup (Sound settings › your output › Speaker setup). The corrections are written into Equalizer APO's configuration, one Channel: section per speaker.

4. Quick adjustments without EQ knowledge

Further down the Assistant page:

  • Quick Tone: four knobs, Bass (105 Hz shelf), Warmth (250 Hz), Clarity (3 kHz) and Air (10 kHz shelf), layered on top of the EQ.
  • Sound Assistant: describe what you hear ("More bass", "Less boomy", "Less muddy", "Clearer vocals", "Less harsh", "Less sibilance", "More air"…). Each click makes a small change you can undo.
  • Presets: every preset with a preview of its curve. Your own presets have rename and delete buttons.
  • Import & Export: paste or import Equalizer APO / AutoEQ ParametricEQ.txt files or RME ADI-2 presets (.adieqpr), or export yours. Export for RME ADI-2… turns the current EQ into an ADI-2 preset: bells go to its five bands, one low shelf to Bass and one high shelf to Treble.

5. Set the volume of each app

Mixer

The Mixer page lists the apps that use audio, with the ones playing right now at the top.

  • Drag an app's slider to change its volume from 0 to 200%, on top of the app's own volume. It snaps to 100%.
  • Click the speaker icon to mute an app.
  • ⋯ → Bypass Tapline lets an app play directly to the output, without EQ or effects. Use this for music production software such as Logic Pro, for calls, or for anything you want to hear untouched.
  • ⋯ → Reset returns an app to the system mix.

The first time you change an app's volume, Tapline rebuilds its audio path, which causes a short gap. Helper processes (browser tabs, Electron apps) are grouped under their app.

On Windows: the sliders are Windows' own per-app volumes, the same as in the Volume Mixer: 0–100 %, and they stay when Tapline is closed. There is no Bypass Tapline or Reset. Apps that use exclusive mode or ASIO, like most music production software, play without EQ anyway.

6. Effects

Effects

The Effects page works on everything that plays through the current device:

  • Limiter: catches peaks so boosts never clip. Leave it on; the GR meter shows when it acts.
  • Output Gain: overall level after the EQ.
  • Balance, Stereo Width (0% is mono), Mono and Swap left and right.
  • Headphone Crossfeed: blends a little of each channel into the other, like listening to speakers. It makes hard-panned recordings less tiring on headphones.
  • Virtual Speakers: puts the music in front of you, as if it played from a pair of speakers, instead of inside your head. See below. It replaces crossfeed: switching one on switches the other off.

On Windows: there is no limiter, because Equalizer APO has none. Keep the preamp on Auto so boosts can't clip, and lower Output Gain if the meters reach the top. Virtual Speakers use Equalizer APO's own convolver, as HeSuVi does: Tapline writes the impulse responses at the device's sample rate into Equalizer APO's config\Tapline\VirtualSpeakers folder.

Virtual speakers

On headphones, the left channel only reaches your left ear. From speakers, each ear hears both speakers, a little later and duller from the far one, shaped by your head, your ears and the room. Virtual Speakers recreate that with binaural impulse responses (HRIRs, or BRIRs with a room): measurements of a pair of speakers at ±30° made with microphones in the ears of a dummy head, or in your own. It is the same idea as Sonarworks SoundID Virtual Monitoring, for free.

  • Studio room (KU100) (the default): the Neumann KU100 dummy head from the SADIE II database, with the early reflections of a treated studio room. The reflections help the sound leave your head; they are kept out of the bass and lower mids, which stay clean.
  • Anechoic (KU100): the same head without any room. The cleanest sound, but it tends to sit closer to your head.
  • Import… your own: a HeSuVi file (7 or 14 channels), Impulcifer's hesuvi.wav or hrir.wav, a 4-channel file (front left → left ear, front left → right ear, front right → left ear, front right → right ear), or two stereo files, one per speaker (Tapline works out which is left). Tapline uses only the front left and right speakers and resamples them to the device's rate. Imported sets are listed under Imported; Remove deletes one.

Tips:

  • Use it with headphone correction (see 2. Correct your headphones). The built-in sets are diffuse-field equalised, so they expect headphones corrected to a neutral (Harman or diffuse-field) target.
  • The level is matched when you switch it on, so compare by ear with the switch. The limiter still protects the output.
  • It adds 256 samples of latency (5.3 ms at 48 kHz) while it is on. Switch it off for speakers.
  • Generic heads fit some people better than others: if voices seem to come from behind or above, try another set.

Where to find more sets:

  • HeSuVi: its download has an hrir folder with many dummy-head and room sets in its 14-channel format. Where a set comes in several sample rates, pick your device's to avoid resampling.
  • ASH Listening Set: BRIRs of many rooms, as HeSuVi files or as one stereo file per direction (import the 30° and 330° files together). Licensed for non-commercial use.
  • Your own head: Impulcifer measures your ears in your room with a pair of binaural in-ear microphones, your speakers and your headphones, and writes hesuvi.wav. Import that: it is the closest thing to a personal calibration, like the one SoundID Virtual Monitoring PRO makes with its microphones.

7. Several outputs and setups

Devices

Tapline follows the output selected in macOS and keeps a separate EQ and effects setup for every device. Plug in your headphones and their curve is applied; switch back to your speakers and theirs returns.

  • The Devices page lists outputs and inputs. Click Use to switch, or change a device's sample rate.
  • The output menu in the toolbar switches devices from any page.

On Windows: Use makes the device the Windows default. The sample rate is shown but can't be changed in Tapline. The Audio Engine card shows Equalizer APO's status and opens its Configurator and configuration file.

  • If one device feeds both headphones and speakers (an audio interface, for example), save two presets with Include effects ("Headphones" with crossfeed, "Speakers" without) and switch between them from the preset menu or the menu bar.

8. Menu bar and keyboard shortcuts

Menu bar panel

Click the Tapline icon in the menu bar for a compact panel: power switch, output device, system volume, EQ on/off with the current curve, preset menu, the Listen as switch and the apps playing right now. Click the curve to open the main window.

Global shortcuts work in every app (turn them off in Settings):

Shortcut Action
⌃⌥⌘P Turn processing on or off
⌃⌥⌘B Bypass the EQ (compare with the original, at the same loudness)
⌃⌥⌘K Switch between A and B
⌃⌥⌘L Switch Listen As on or off (see 10. Listen as another device)

Inside the app: ⌘Z / ⇧⌘Z undo and redo, ⌘B bypasses the EQ, ⌘K compares A/B, ⌘Q hides Tapline to the menu bar, ⌥⌘Q quits.

On Windows: the panel opens from Tapline's icon in the notification area; right-click the icon to quit. The global shortcuts are Ctrl+Alt+Shift+P / B / K / L; inside the app Ctrl+Z / Ctrl+Y undo and redo, Ctrl+B bypasses the EQ and Ctrl+K compares A/B. Closing the window keeps Tapline in the notification area.


9. Reading the meters

The column next to the graph shows the output level of the left and right channel:

  • Solid green is the average level, the lighter part above it the short peaks, and the white tick the highest peak of the last moment, also shown as a number in dB. 0 dB is the digital maximum.
  • The dot at the top turns red when the signal clips.
  • GR (gain reduction) shows how much the limiter is turning peaks down. Empty is ideal. If it is often busy, lower the preamp or turn on Auto.

On Windows: there is no limiter, so there is no GR meter. If the clip light turns red, lower the preamp or turn on Auto.

10. Listen as another device

Practising or mixing on good headphones, you may wonder how it sounds where most people listen: earbuds, a phone, a laptop, a car. Assistant → Listen As plays the music as such a device would, through your own headphones, like Sonarworks SoundID's Translation Check. It sits on top of your EQ and headphone correction without changing them, and it is never saved in presets.

Headphones & earbuds (accurate): search the squig.link measurements for a device, for example AirPods Pro 2, Apple EarPods or Galaxy Buds, and pick one. Tapline fits an EQ that turns the sound your headphone correction aims at into the sound of that device: the chart shows your sound (grey), the device (dashed) and the result (green). Click Listen as This Device.

  • If the device was measured in the same database as your headphones (the one you picked under squig.link measurements), Tapline uses the raw difference between the device and your target.
  • Otherwise it compares the device with its own database's target (the one named like yours, or a Harman target; change it under Compared with), so the two measurement rigs' differences cancel. A note says which case applies.
  • Above 10 kHz only the broad trend is simulated, as in headphone correction.
  • Correct your own headphones first (see 2. Correct your headphones): the simulation starts from the target your correction aims at.

Speakers in devices (approximate): click Phone speaker, Laptop speakers, TV speakers, Bluetooth speaker or Car. Each is a response curve (where the bass ends, typical resonances, the treble) and a channel handling: a phone and a Bluetooth speaker are mono, a laptop is narrow stereo. They are approximations written from general knowledge of how such speakers behave, not measurements of any product. Click the tile again to stop.

Switching is level-matched: a make-up gain cancels the device curve's loudness change on pink noise (weighted like a LUFS meter), so you compare sound, not level. With the limiter off, Tapline keeps the headroom instead and the card says how much quieter the simulation plays.

Switch it on and off on the card, in the menu bar panel or with ⌃⌥⌘L. Tapline remembers the last device; the simulation itself starts off every time Tapline starts.

On Windows: the switch is in the tray panel too, and the shortcut is Ctrl+Alt+Shift+L. The simulation's filters follow your EQ in Equalizer APO's configuration, on the current output only. Equalizer APO has no limiter, so where the device would raise a frequency above what your EQ reaches, the simulation plays that much quieter than level-matched; the card says by how much.

11. Use Tapline in Logic Pro

Tapline includes an Audio Unit, so your headphone correction and listening effects can sit inside a project instead of on the whole system, the way Sonarworks SoundID Reference's plugin does. It plays exactly what the app plays: the same filters, Listen As, Virtual Speakers and linear phase.

Set it up once

  1. Install Tapline in Applications and open it once (the first time with Open Anyway, see Install). Opening it is what registers the plugin with macOS; Tapline does not have to keep running for the plugin to work.
  2. In Logic Pro, the plugin is under Audio Units → Tapline → Tapline. If it isn't there, open Logic Pro → Settings → Plug-in Manager, select Tapline and click Reset & Rescan Selection (or rescan all). GarageBand and other hosts find it after a restart.
  3. Insert it in the last slot of the Stereo Out, after everything else, as monitoring correction.
  4. Don't correct twice: while the plugin corrects Logic, set Logic Pro to ⋯ → Bypass Tapline in the mixer (see 5. Set the volume of each app), or switch Tapline's processing off.

In the plugin

  • Preset: Tapline's built-in presets and your own, the headphone corrections from the Assistant included, as they are in the app now. Import ParametricEQ.txt… and Paste ParametricEQ.txt take an Equalizer APO / AutoEQ file or an RME ADI-2 preset directly. The project keeps a copy of the curve, so it sounds the same on another Mac or after you change the preset in Tapline (Saved in project shows when they differ; choose the preset again to load its current version). Logic's own preset menu lists the same presets.
  • Strength: 0–100 %, like a dry/wet control. It scales each band's gain, so part of a correction never comb-filters.
  • EQ: the level-matched bypass, as in the app (Match loudness when bypassing at the bottom).
  • Filter Phase: minimum phase (no latency), or linear phase with low latency (176 ms at 48 kHz) or high precision (704 ms).
  • Virtual Speakers: the two built-in SADIE II sets, a studio room and anechoic.
  • Listen as: the five built-in speakers, and the headphones or earbuds you last chose in Tapline's Listen As.
  • Latency, bottom right: what the plugin reports to Logic, which delays the other tracks by as much (plug-in delay compensation). 1.5 ms for the limiter's look-ahead, 5 ms more with Virtual Speakers, plus linear phase. To record through the plugin, use minimum phase or Logic's Low Latency Mode.
  • Strength, EQ, Virtual Speakers, Listen as and Filter Phase are parameters: you can automate them, and they show in Logic's Controls view.

Like any monitoring correction, switch it off before you bounce or export a mix.

Tapline (Audio Unit) SoundID Reference plugin
Correction Your Tapline presets: AutoEQ, squig.link fits, your own measurements, room correction, any ParametricEQ.txt Sonarworks' headphone profiles and its speaker calibration
Dry/wet Strength, 0–100 % Dry/Wet
Hear other devices Listen As: five speakers, headphones from squig.link Translation Check
Virtual speakers Built in (SADIE II) A separate product (Virtual Monitoring)
Linear phase Low latency and high precision Linear-phase mode
Formats, price AUv3 on macOS; free and open source VST3, AU, AAX; paid

FAQ and troubleshooting

I hear nothing after turning Tapline on. Check Settings → Permission. If System Audio Recording is denied, click Open Privacy Settings and allow Tapline, then turn it on again. Without the permission macOS delivers silence while the apps are muted.

Everything got quieter after I applied an EQ. That is the automatic preamp making room for your boosts so nothing clips. Turn up the volume. You can switch Auto off under the preamp knob and rely on the limiter instead.

Does Tapline change the sound when the EQ is flat? Practically no. Audio is processed in 32-bit float at the device's sample rate, and inactive filters are skipped. Three things can touch it: the limiter on peaks above −0.3 dBFS (turn it off in Effects if you want), the HAL's sample-rate drift compensation on USB and built-in outputs (high-quality, very small ratio), and about 12 ms of added latency.

What about Dolby Atmos and Spatial Audio? This has not been tested thoroughly. If an Atmos track or head-tracked Spatial Audio sounds different with Tapline on, set the app (for example Music) to Bypass Tapline in the mixer. It then plays directly with full spatial rendering, without Tapline's EQ.

Bluetooth headphones crackle or wobble. Update to 0.1.1 or later, which taps the device's own stream and handles Bluetooth clocks correctly.

Can I use a studio microphone for room correction? Yes. A good condenser microphone is accurate enough in the bass, which is what room correction is about. Point a cardioid microphone between the speakers at ear height, switch on phantom power, and measure a few positions. Tapline uses the microphone only while measuring; macOS asks for microphone access the first time.

SoundSource or another tool is running. Quit it. Its audio daemon may stay in the background; Tapline only warns while it is actually processing audio.

macOS asks for the permission again after an update. Releases before the switch to Tapline's own certificate were ad-hoc signed, so each one was a new app to macOS, and so is the first signed one. Allow it again. Old entries can be removed in System Settings → Privacy & Security → Screen & System Audio Recording.

Windows: the EQ makes no difference. Look at the banner at the top of the window. Tapline says there when Equalizer APO is missing, isn't installed on the current output, or is skipped because Windows' Audio enhancements are off for the device. Also check that processing is on, and that the app isn't using exclusive mode or ASIO: those bypass Equalizer APO.

Logic Pro doesn't list Tapline. Open Tapline from Applications once: that is what registers its plugin with macOS. Then, in Logic Pro → Settings → Plug-in Manager, select Tapline and click Reset & Rescan Selection. The same button validates it again if Logic marked it as failed.

How do I uninstall Tapline? On Windows, see Update and uninstall. On macOS, quit it from the menu bar panel, delete Tapline.app, and optionally remove its settings and caches:

defaults delete io.github.belugaming.Tapline
rm -rf ~/Library/Caches/io.github.belugaming.Tapline

How it works

apps ──► process taps of the output device's stream (apps are muted at the source while Tapline reads them)
     ──► private aggregate device = [taps + the output device as clock]
     ──► C IOProc: mix apps → preamp → EQ → tone → Listen As → effects (incl. virtual speakers) → limiter
     ──► output device
  • One tap captures everything headed for the current output except Tapline itself, bypassed apps and apps with their own mixer settings; each of those gets its own tap. Taps of the device's own stream follow its clock.
  • Drift compensation is on for devices with their own crystal (USB, built-in) and off for Bluetooth and virtual devices, where it would make the HAL add and drop samples.
  • The realtime path is plain C (Packages/TaplineCore/Sources/TaplineDSP): no allocation, locks or Swift runtime on the audio thread. Parameters reach it through a lock-free triple buffer. Filters are RBJ biquads computed in double precision.
  • Virtual Speakers are a uniformly partitioned FFT convolution (overlap-save, 256-sample partitions, Accelerate's real FFT) of up to 65,536 taps per path. The main thread transforms a new set and hands it over through an atomic pointer; the audio thread crossfades to it and hands the old one back to be freed.
  • Linear phase plays preamp, EQ and tone through the same convolution engine: one symmetric FIR per channel, designed on a background queue from the curve's magnitude (its zero-phase impulse response under a Tukey window, at least 1.25 s long for high precision and a quarter of that for low latency) and cut into 64 partitions. Each length has its own engine and delay lines, so switching between them fades like switching to minimum phase. The bypassed signal and the other channels of a multichannel stream go through delay lines of the same latency, so switching neither comb-filters nor jumps in time.
  • Listen As runs in a block of its own after the EQ: up to 16 biquads, a make-up gain and a mid/side width, crossfaded like the EQ when it is switched. A headphone simulation is fitted by the same EQ fitter, with the reference target as the "measurement" and the device as the "target".
  • While the EQ is bypassed, one gain takes the place of preamp, EQ and tone: the loudness change of the whole EQ on pink noise, K-weighted as in ITU-R BS.1770, limited to 0 dB at most. Switching the EQ on or off crossfades the two paths over one audio buffer.
  • The EQ fitter (EQFitter.swift) follows AutoEQ's approach: level-match, smooth the required correction (two-octave smoothing above 8 kHz), add shelves and bells where the error is largest and refine all parameters with a pattern search. Below 100 % strength it fits the measurement moved that far towards the target, which keeps the result as accurate as a full correction.
  • The Audio Unit is an AUv3 app extension inside Tapline.app (TaplineAU), sandboxed and loaded by the host out of process. Its render block calls tl_kernel_process, which runs the IOProc's own chain on the host's buffers, so the plugin and the app sound the same; parameters and automation reach it without locks, and it reports the latency the kernel adds. The extension reads the app's presets read-only, through a temporary-exception entitlement for Tapline's preferences domain: an app group would need an Apple team ID, which Tapline's self-signed releases don't have.
  • Only one copy of Tapline runs at a time, a watchdog restarts the engine if the device stops calling it, and a guard switches processing off if it detects a feedback loop. If Tapline quits or crashes, its private taps and aggregate device disappear with it.

On Windows, Tapline writes Equalizer APO's config.txt: one Device: section per output with its preamp, filters (the same RBJ biquads as on the Mac), left/right sections and effects. In linear phase, the filters give way to a Convolution: per channel with an FIR that Tapline writes as a WAV file next to config.txt. Equalizer APO reloads the file and processes the audio inside Windows' audio engine. The spectrum and meters read the output with a WASAPI loopback capture, and room measurements play and record in WASAPI shared mode.

Privacy and network use

Audio is processed on your computer and is never recorded or sent anywhere. Tapline only goes online when you use headphone correction:

  • AutoEQ: the index and profiles are downloaded from GitHub and cached for a week.
  • squig.link: the site directory, each database's list of headphones, target curves and the measurements you open are downloaded from the reviewers' squig.link sites and cached. Sites on squig.link's own opt-out list are never contacted.

Build from source

Requires Xcode 27 or later and XcodeGen.

brew install xcodegen
git clone https://github.com/belugaming/tapline.git
cd tapline
xcodegen generate
xcodebuild -project Tapline.xcodeproj -scheme Tapline -configuration Release -derivedDataPath build build
open build/Build/Products/Release/Tapline.app

Run the tests of the DSP core:

cd Packages/TaplineCore && swift test

Local builds are ad-hoc signed too. Set your own team in Xcode to keep the audio permission across rebuilds.

The Audio Unit (TaplineAU) is built and embedded with the app. scripts/validate-audio-unit.sh build/Build/Products/Release/Tapline.app registers it, validates it with auval, checks it through the Audio Unit API and unregisters it again, as CI does.

Windows

Requires the .NET 10 SDK. The Windows app is in windows/: Tapline.Core (the EQ, fitting and room-correction code, ported from Swift) and Tapline (the WPF app).

cd windows
dotnet test tests/Tapline.Core.Tests
dotnet publish src/Tapline/Tapline.csproj -c Release -r win-x64 --self-contained -p:PublishSingleFile=true -o artifacts/publish

The core tests also run on macOS and Linux, and the app builds there too (EnableWindowsTargeting), but it only runs on Windows. TAPLINE_SNAPSHOT_DIR=<folder> makes the app render every page into PNG files and quit, which CI uses to check the UI on a real Windows machine.

Versioning and releases

Tapline follows Semantic Versioning. The version is defined once, as MARKETING_VERSION in project.yml; the build number is the commit count and is filled in by CI. Changes are collected under Unreleased in CHANGELOG.md.

scripts/release.sh 0.2.0 --push

The script checks that main is clean, bumps the version, turns the Unreleased section into 0.2.0, commits, tags v0.2.0 and pushes. The Release workflow then tests and builds Tapline on GitHub's macOS runners and publishes the disk image with that changelog section as release notes. Versions with a suffix such as 0.3.0-beta.1 become pre-releases. Every push to main is built with Xcode 27 by the CI workflow.

The Windows version is released together with the Mac version, under the same number. Collect its changes under Unreleased in windows/CHANGELOG.md: when that section has entries, scripts/release.sh also turns it into ## 0.2.0, sets the version in Tapline.csproj and tags windows-v0.2.0 on the same commit. Add --no-windows to release the Mac only and keep the Windows entries for later. The Windows release workflow then tests and builds Tapline on a Windows runner and publishes the installer as "Tapline for Windows 0.2.0", with that changelog section as release notes. Versions with a suffix become pre-releases, and Windows releases are never marked as the latest release, so the download link in Install keeps pointing to the Mac version. Changes to windows/ are built on Windows by the Windows workflow.

Known limitations

  • Apps that take exclusive (hog) mode on a device cannot be tapped.
  • Room correction does not set subwoofer crossovers; on surround speakers, bass management stays the receiver's job.
  • Dolby bitstreams passed through to an AV receiver cannot be processed; Tapline processes PCM only.
  • The ADI-2 export writes files for the ADI-2 DAC (FS); the ADI-2 Pro and 2/4 Pro use other file types.
  • The first volume change for an app causes a short gap while its audio path is rebuilt.
  • Release builds are not notarized yet (see Install).
  • The Windows version is not code-signed yet. Its differences from macOS are listed under What works on Windows.
  • Virtual Speakers have no head tracking: the speakers turn with your head.
  • Linear phase cannot resolve the narrowest bells at the very bottom completely (Q 18 at 20 Hz is about 1 dB short at ±6 dB in high precision, 4 dB in low latency). On Windows it has only the high-precision length, and the sound pauses after every change.
  • Listen As's speaker profiles are approximations of typical devices, not measurements of any product, and its headphone simulations assume your own headphones are corrected to their target.
  • The Audio Unit is for macOS only and AUv3 only (no VST3, AAX or CLAP), and stereo, or mono in and stereo out: no surround. It plays presets, not a device's whole setup: the speaker corrections of a surround layout, the other effects and the Virtual Speakers sets you imported into the app are not in it, and its Listen as offers only the headphones last chosen in the app.
  • The plugin applies automation within a few hundredths of a second, not to the sample, so play automation in real time rather than bouncing offline. It is validated with auval and through the Audio Unit API on every build; please report what you find in Logic Pro and other hosts.

Credits

License

Tapline is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License v3.0 as published by the Free Software Foundation. It comes with no warranty. If you distribute a modified version, it must also be released under GPL-3.0 with its source code.

About

System-wide parametric EQ, per-app mixer and headphone correction (AutoEQ + squig.link) for macOS. No driver, built on Core Audio process taps.

Topics

Resources

Stars

4 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages