Convert Figma logo to code with AI

jaakkopasanen logoAutoEq

Automatic headphone equalization from frequency responses

14,437
2,507
14,437
105

Quick Overview

AutoEq is an open-source project that automatically generates equalization settings for headphones and in-ear monitors (IEMs). It uses frequency response measurements to create equalization profiles that aim to improve the sound quality of various audio devices, making them closer to a target response curve.

Pros

  • Provides a large database of headphone and IEM measurements
  • Automatically generates EQ settings for various audio devices
  • Supports multiple EQ formats (ParametricEQ, GraphicEQ, etc.)
  • Allows customization of target curves and compensation

Cons

  • Results may vary depending on the quality of input measurements
  • Requires some technical knowledge to implement the generated EQ settings
  • May not account for individual preferences or hearing differences
  • Limited to devices with available measurements in the database

Code Examples

  1. Generate EQ settings for a specific headphone model:
from autoeq import FrequencyResponse, plot_graph
from autoeq.constants import DEFAULT_MAX_GAIN, DEFAULT_TREBLE_F_LOWER, DEFAULT_TREBLE_F_UPPER

fr = FrequencyResponse.read_from_csv('measurements/rtings/headphones/Sennheiser HD 600.csv')
fr.equalize(
    max_gain=DEFAULT_MAX_GAIN,
    treble_f_lower=DEFAULT_TREBLE_F_LOWER,
    treble_f_upper=DEFAULT_TREBLE_F_UPPER
)
fr.plot_graph(show=True, close=False)
  1. Compare multiple frequency responses:
from autoeq import FrequencyResponse, plot_graph

fr1 = FrequencyResponse.read_from_csv('measurements/rtings/headphones/Sennheiser HD 600.csv')
fr2 = FrequencyResponse.read_from_csv('measurements/rtings/headphones/Beyerdynamic DT 990 Pro.csv')

plot_graph(
    [fr1, fr2],
    show=True,
    close=False,
    file_path='comparison.png'
)
  1. Generate ParametricEQ settings:
from autoeq import FrequencyResponse
from autoeq.constants import DEFAULT_MAX_GAIN, DEFAULT_TREBLE_F_LOWER, DEFAULT_TREBLE_F_UPPER

fr = FrequencyResponse.read_from_csv('measurements/rtings/headphones/Sennheiser HD 600.csv')
fr.equalize(
    max_gain=DEFAULT_MAX_GAIN,
    treble_f_lower=DEFAULT_TREBLE_F_LOWER,
    treble_f_upper=DEFAULT_TREBLE_F_UPPER
)
parametric_eq = fr.optimize_parametric_eq()
print(parametric_eq)

Getting Started

  1. Install AutoEq:
pip install autoeq
  1. Download or clone the AutoEq repository for access to measurement data:
git clone https://github.com/jaakkopasanen/AutoEq.git
cd AutoEq
  1. Use the library to generate EQ settings for your headphones:
from autoeq import FrequencyResponse
fr = FrequencyResponse.read_from_csv('measurements/rtings/headphones/YourHeadphoneModel.csv')
fr.equalize()
fr.plot_graph(show=True, close=False)

Replace 'YourHeadphoneModel.csv' with the appropriate CSV file for your headphone model from the measurements directory.

Convert Figma logo designs to code with AI

Visual Copilot

Introducing Visual Copilot: A new AI model to turn Figma designs to high quality code using your components.

Try Visual Copilot

README

AutoEq

AutoEq is a tool for automatically equalizing headphones.

Go to autoeq.app to get started.

This Github repository now mainly serves developers. The contributions of this project are:

  • Web application for easily equalize and tweak headphone frequency responses without needing to install anything
  • Library for working with (headphone) frequency responses and optimizing parametric equalizers
  • PyPi package for installing the library on your projects
  • Collection of headphone measurements as numerical data from oratory1990, crinacle, Innerfidelity, Rtings and legacy headphone.com measurements (which are not the same as what the company produces today).
  • Collection of different headphone frequency response targets as numerical data
  • Pre-computed equalizer settings in results, although these should not be used by normal users since autoeq.app exists

Sennheiser HD 800

Sennheiser HD 800 equalization results plotted

Updates

2023-10-29 AutoEq version 4.0.0. Improved and unified naming conventions across the project. Cleaned up obsolete files and reorganized directory structure. Completely reworked database management tools.

2022-05-14 Web application. Reorganized measurements and results.

2022-10-30 Restructured the project and published in PyPi. Source code moved under autoeq directory and command line usage changed from python autoeq.py to python -m autoeq with underscores _ replaced with hyphens - in the parameter names.

2022-09-18 Parametric eq optimizer reworked. The new optimizer supports shelf filters, has a powerful configuration system, run 10x faster, has limits for Fc, Q and gain value ranges and treats +10 kHz range as average value instead of trying to fix it precisely.

Usage

AutoEq produces settings for basically all types of equalizer apps but does not do the equalization itself. You'll need a different app for that. Go to autoeq.app and select your equalizer app of choice. Quick instructions for importing the produced settings will be shown there.

Command Line Use

In addition to the web application, AutoEq can be used from command line (terminal). This is advanced use mainly intended for developers. The following instructions apply for command line and Python interface use.

Installing

  • Download and install Git: https://git-scm.com/downloads. When installing Git on Windows, use Windows SSL verification instead of Open SSL or you might run into problems when installing project dependencies.
  • Download and install 64-bit Python 3. Make sure to check Add Python 3.X to PATH.
  • You may need to install libsndfile if you're having problems with soundfile when installing and/or running AutoEq.
  • On Linux you may need to install Python dev packages
sudo apt install python3-dev python3-pip python3-venv
git clone https://github.com/jaakkopasanen/AutoEq.git
  • Go to AutoEq location
cd AutoEq
  • Create a python virtual environment
python -m venv venv
  • Activate virtualenv
# On Windows
venv\Scripts\activate.bat
# On Linux and Mac
. venv/bin/activate
  • Update pip
python -m pip install -U pip
  • Install required packages
python -m pip install -U -e .
  • Verify installation. If everything went well, you'll see the list of command line parameters AutoEq accepts.
python -m autoeq --help
python -m autoeq --input-file="measurements/oratory1990/data/over-ear/Sennheiser HD 800.csv" --output-dir="my_results" --target="targets/harman_over-ear_2018_wo_bass.csv" --max-gain=24 --parametric-eq --parametric-eq-config=4_PEAKING_WITH_LOW_SHELF,4_PEAKING_WITH_HIGH_SHELF --bass-boost=6 --convolution-eq --fs=48000 --bit-depth=32 --f-res=16

When coming back at a later time you'll only need to activate virtual environment again

# On Windows
cd AutoEq
venv\Scripts\activate.bat
# On Linux and Mac
cd AutoEq
. venv/bin/activate

To learn more about virtual environments, read Python' venv documentation.

Updating

AutoEq is in active development and gets new measurements, results and features all the time. You can get the latest version from git

git pull

Dependencies may change from time to time, you can update to the latest with

python -m pip install -U -e .

Checking Installation

This prints out CLI parameters if installation was successful.

python -m autoeq --help

Example

Equalizing Sennheiser HD 650 and saving results to my_results/:

python -m autoeq --input-file="measurements/oratory1990/data/over-ear/Sennheiser HD 650.csv" --output-dir="my_results" --target="targets/harman_over-ear_2018.csv" --convolution-eq --parametric-eq --ten-band-eq --fs=44100,48000

Building

Add changelog entry before building and update version number in pyproject.toml!

Install build and twine

python -m pip install build twine

Add updates to autoeq/README.md before building!

Build PyPi package on Windows

copy /y README.md README.md.bak && copy /y autoeq\README.md README.md && python -m build && copy /y README.md.bak README.md && del README.md.bak

Build PyPi package on Linux / MacOS

cp README.md README.md.bak && cp autoeq/README.md README.md && python -m build && cp README.md.bak README.md && rm README.md.bak

publish

python -m twine upload dist/autoeq-<VERSION>*

Remember to add Git tag!

Contact

Issues are the way to go if you are experiencing problems or have ideas or feature requests. Issues are not the correct channel for headphone requests because this project sources the measurements from other databases and a headphone missing from AutoEq means it has not been measured by any of the supported sources.

You can find me in Reddit, Audio Science Review and Head-fi if you just want to say hello.