EQ Sweep

Tune your headphones by ear.

EQ Sweep for Android. Sweep a pure tone, mark what you hear, export a parametric EQ.

Scroll

RESPONSE

Your ears are the measuring tool.

Headphones are not flat, and no two ears hear them the same way. EQ Sweep finds the difference by listening, then writes it down as a filter your EQ app can load.

  1. SWEEP

    Drag the tape. Listen.

    A pure sine tone follows your finger along the frequency tape. Move slowly from bass to treble and listen for the spots that jump out or fall away.

    20 Hz - 20 kHz, log scale

  2. MARK

    Three marks make a band.

    Set START, TOP and END around what you hear. The third mark creates the band: its centre at TOP, its width from START to END, 3 dB up or down.

    Up to 10 bands. Q 0.3 - 10.

  3. REFINE

    Adjust every band.

    On the Bands screen, set frequency, gain and Q, and switch bands on or off. Drag across the response chart to hear any frequency. The preamp sets itself, or you set it.

    Auto preamp = minus the curve's highest point

  4. EXPORT

    A file your EQ app reads.

    Copy a parametric EQ in the ParametricEQ.txt format or save it as a file, or save a GraphicEQ file for Wavelet. Keep every profile in a library, back one up as a file and import it on any phone.

    Equalizer APO / AutoEq text. GraphicEQ, 127 points.

Preamp: -4.6 dB
Filter 1: ON LSC Fc 105 Hz Gain 4.5 dB Q 0.70
Filter 2: ON PK Fc 420 Hz Gain -2.0 dB Q 1.10
Filter 3: ON PK Fc 2868 Hz Gain -4.8 dB Q 1.95
Filter 4: ON PK Fc 6400 Hz Gain -4.0 dB Q 4.00
Filter 5: ON HSC Fc 10000 Hz Gain 2.5 dB Q 0.70
The file for one session, exactly as the app writes it.

TRY IT

The tape, in your browser.

Headphones on. Tap Sound on, then press and hold the tape and drag. The tone plays through the five bands of the export sample above. Switch EQ IN and OUT to hear what they change.

RESPONSE
EQ
SOUND

Start at a low volume. Test tones can sound loud, so protect your hearing.

Arrow keys move the tone. Hold Space to play it.

  • Private by design. No internet permission. No account, no ads, no analytics. Your profiles stay on your phone until you copy or save a file.
  • Android 9 and later. minSdk 28.
  • Formats. ParametricEQ.txt (Equalizer APO / AutoEq), GraphicEQ for Wavelet, profile backups.

ORIGIN

Built on EQ by ear.

The sound engine of EQ Sweep comes from EQ by ear by DMS, an open-source browser tool for EQing headphones by ear, released under the Apache License 2.0. Four of its files were ported to Kotlin, function for function: dsp.js, store.js, export.js and audio.js. Parity tests check the port against the original JavaScript. The design, the name and the logo are not taken from it.

EQ Sweep is an independent app built on the open-source EQ by ear by DMS (Apache-2.0). It is not affiliated with or endorsed by DMS or EQ by ear.

LICENCES

Licences, in detail.

EQ Sweep is closed-source. The parts that come from open-source work keep their licences and credit. Everything is listed here.

Apache-2.0: the ported core4 files from EQ by ear, ported to Kotlin under Apache-2.0.

What was ported: js/dsp.js became Dsp.kt, js/store.js became Store.kt and Model.kt, js/export.js became Export.kt, and js/audio.js became ToneSynth.kt, the test tone. The GraphicEQ export is new and not part of the original.

What the licence asks of a closed derivative, and how EQ Sweep meets it:

  • Give recipients a copy of the licence (section 4a). The app includes the full Apache License 2.0 text, under Licenses at the foot of the Save screen, with the credit to EQ by ear.
  • Mark modified files prominently (section 4b). Each ported source file states in its header that it was ported from the original JavaScript and modified.
  • Keep the original attribution notices (section 4c). Each ported source file names its origin and repeats the original licence statement in its header.
  • NOTICE file (section 4d). The original has none, so there is nothing to carry.
  • Own terms for own changes (end of section 4). EQ Sweep's own code, design and name remain closed and all rights are reserved.
  • Trademarks (section 6). The names DMS and EQ by ear are used only to describe the origin of the code.

This page: the tone in the try-it strip is adapted from js/dsp.js and js/audio.js of EQ by ear, under the same licence, and modified for this website.

Licence: Apache License 2.0

Fonts2 typefaces, both under the SIL Open Font License 1.1.

Licence: SIL Open Font License 1.1. The licence texts ship inside the app and open under Licenses.

Android libraries in the app61 artifacts shipped in the app, all Apache-2.0.

Every artifact inside the app, read from the app package and checked against its published licence. All are under the Apache License 2.0.

ComponentVersionLicenceHolder
activity-composeandroidx.activity1.13.0Apache-2.0The Android Open Source Project
activity-ktxandroidx.activity1.13.0Apache-2.0The Android Open Source Project
activityandroidx.activity1.13.0Apache-2.0The Android Open Source Project
annotation-experimentalandroidx.annotation1.4.1Apache-2.0The Android Open Source Project
core-runtimeandroidx.arch.core2.2.0*Apache-2.0The Android Open Source Project
autofillandroidx.autofill1.0.0Apache-2.0The Android Open Source Project
animation-coreandroidx.compose.animation1.12.1Apache-2.0The Android Open Source Project
animationandroidx.compose.animation1.12.1Apache-2.0The Android Open Source Project
foundation-layoutandroidx.compose.foundation1.12.1Apache-2.0The Android Open Source Project
foundationandroidx.compose.foundation1.12.1Apache-2.0The Android Open Source Project
material3androidx.compose.material31.4.0Apache-2.0The Android Open Source Project
material-rippleandroidx.compose.material1.12.1Apache-2.0The Android Open Source Project
runtime-annotationandroidx.compose.runtime1.12.1Apache-2.0The Android Open Source Project
runtime-retainandroidx.compose.runtime1.12.1Apache-2.0The Android Open Source Project
runtime-saveableandroidx.compose.runtime1.12.1Apache-2.0The Android Open Source Project
runtimeandroidx.compose.runtime1.12.1Apache-2.0The Android Open Source Project
ui-geometryandroidx.compose.ui1.12.1Apache-2.0The Android Open Source Project
ui-graphicsandroidx.compose.ui1.12.1Apache-2.0The Android Open Source Project
ui-textandroidx.compose.ui1.12.1Apache-2.0The Android Open Source Project
ui-tooling-previewandroidx.compose.ui1.12.1Apache-2.0The Android Open Source Project
ui-unitandroidx.compose.ui1.12.1Apache-2.0The Android Open Source Project
ui-utilandroidx.compose.ui1.12.1Apache-2.0The Android Open Source Project
uiandroidx.compose.ui1.12.1Apache-2.0The Android Open Source Project
core-ktxandroidx.core1.19.0Apache-2.0The Android Open Source Project
core-viewtreeandroidx.core1.0.0Apache-2.0The Android Open Source Project
coreandroidx.core1.19.0Apache-2.0The Android Open Source Project
customview-poolingcontainerandroidx.customview1.0.0Apache-2.0The Android Open Source Project
emoji2androidx.emoji21.4.0Apache-2.0The Android Open Source Project
graphics-pathandroidx.graphics1.0.1Apache-2.0The Android Open Source Project
interpolatorandroidx.interpolator1.0.0Apache-2.0The Android Open Source Project
lifecycle-livedata-coreandroidx.lifecycle2.11.0Apache-2.0The Android Open Source Project
lifecycle-processandroidx.lifecycle2.11.0Apache-2.0The Android Open Source Project
lifecycle-runtime-composeandroidx.lifecycle2.11.0Apache-2.0The Android Open Source Project
lifecycle-runtime-ktxandroidx.lifecycle2.11.0Apache-2.0The Android Open Source Project
lifecycle-runtimeandroidx.lifecycle2.11.0Apache-2.0The Android Open Source Project
lifecycle-viewmodel-composeandroidx.lifecycle2.11.0Apache-2.0The Android Open Source Project
lifecycle-viewmodel-ktxandroidx.lifecycle2.11.0Apache-2.0The Android Open Source Project
lifecycle-viewmodel-savedstateandroidx.lifecycle2.11.0Apache-2.0The Android Open Source Project
lifecycle-viewmodelandroidx.lifecycle2.11.0Apache-2.0The Android Open Source Project
navigationevent-composeandroidx.navigationevent1.0.0Apache-2.0The Android Open Source Project
navigationeventandroidx.navigationevent1.0.0Apache-2.0The Android Open Source Project
profileinstallerandroidx.profileinstaller1.4.0Apache-2.0The Android Open Source Project
savedstate-composeandroidx.savedstate1.4.0Apache-2.0The Android Open Source Project
savedstate-ktxandroidx.savedstate1.4.0Apache-2.0The Android Open Source Project
savedstateandroidx.savedstate1.4.0Apache-2.0The Android Open Source Project
startup-runtimeandroidx.startup1.1.1Apache-2.0The Android Open Source Project
tracingandroidx.tracing1.2.0Apache-2.0The Android Open Source Project
versionedparcelableandroidx.versionedparcelable1.1.1Apache-2.0The Android Open Source Project
window-coreandroidx.window1.5.0Apache-2.0The Android Open Source Project
windowandroidx.window1.5.0Apache-2.0The Android Open Source Project
collectionandroidx.collection1.5.0*Apache-2.0The Android Open Source Project
collection-ktxandroidx.collection1.5.0*Apache-2.0The Android Open Source Project
annotationandroidx.annotation1.10.0*Apache-2.0The Android Open Source Project
lifecycle-commonandroidx.lifecycle2.11.0*Apache-2.0The Android Open Source Project
lifecycle-common-java8androidx.lifecycle2.11.0*Apache-2.0The Android Open Source Project
core-commonandroidx.arch.core2.2.0*Apache-2.0The Android Open Source Project
kotlin-stdliborg.jetbrains.kotlin2.4.20*Apache-2.0JetBrains
kotlinx-serialization-jsonorg.jetbrains.kotlinx1.11.0*Apache-2.0JetBrains
kotlinx-serialization-coreorg.jetbrains.kotlinx1.11.0*Apache-2.0JetBrains
kotlinx-coroutines-coreorg.jetbrains.kotlinx1.9.0Apache-2.0JetBrains
kotlinx-coroutines-androidorg.jetbrains.kotlinx1.9.0Apache-2.0JetBrains

* This artifact ships no version file; the version is the one the build resolves. The licence is the same for every version.

Test-only libraries (JUnit 4, Robolectric, Roborazzi) are not part of the app.

Trademarks5 third-party names, used only to describe compatibility or origin.

Android and Google Play are trademarks of Google LLC. Equalizer APO, AutoEq and Wavelet are named only to describe compatible file formats. The names EQ by ear and DMS are used only to describe the origin of the ported code. No endorsement by any of them is implied.

Coming to Google Play.