tl;dr if you’re just looking to improve the sound of your headset, find your headset model in the list of recommended headsets in the results folder and follow the instructions in the usage section .
about this project
autoeq is a project to equalize the frequency responses of headphones automatically and it does this by analyzing the frequency response measurements and producing equalization settings that correct the headphones to a neutral sound. this project currently has over 2500 headphones covered in the results folder. see the usage for instructions on how to use the results with different equalization software and the results section for details on the parameters and how the results were obtained.
Reading: Headphone eq database
autoeq is not only a collection of automatically produced headphone equalization settings, but also a tool to equalize headphones yourself. autoeq.py provides methods for reading data, matching it to a given target response, and saving the results for use with equalizers. it is possible to use different compensation (target) curves, apply tilt to make the headphones brighter/darker, and add a bass boost. it’s even possible to make one earphone sound (more or less) like another earphone. for more information on equalization, see equalization. if you’re looking for something lightweight to install as a dependency for your own project, you’ll find autoeq-pkg much more suitable for your needs.
The third main contribution of this project is the measurement data and compensation curves, all in numerical format, except the raw data from crinacle. everything is stored as csv files, so they are easy to process with any programming language or even microsoft excel.
sennheiser hd 800 equalization results rendered
autoeq produces settings for basically all types of equalizer applications.
the convolution equalizer is the most powerful type of equalization software. These equalizers allow extremely precise control over the frequency response and the results are the same across all devices and platforms when using the same fir filter. convolution equalizer is the preferred way to use the results of autoeq.
autoeq supports convolution equalizers with fir filters as wav files and with equalizerapo’s graphiceq filter type. default results contain fir filters for 44.1khz and 48khz sample rates. Other sample rates are supported, but are not provided in the default results. equalizerapo’s graphiceq works with any sample rate.
To use the first filters, download the appropriate wav file and import it into the eq software of your choice. note that not all eq software supports convolution. some equalizers can load multiple fir filters at the same time. download both wav files, create a zip file containing both, and load it into, for example, roon.
see equalizerapo for instructions on how to use graphiceq.
parametric equalizers have filters (bands) with user-adjustable gain, center frequency, and q quality. note that the accuracy of the parametric equalizer depends on the number of available filters. 10 filters usually produce very good results, but as few as 5 can be good enough. note that different parametric equalizers will produce different results with the same parameter values. the parameters produced by autoeq are the same as those of equalizerapo using a 48 kHz sample rate. when using other equalizers or sample rates, it is always recommended to check that the equalizer’s frequency response matches the parametric equalization curve in the graphics.
all parametric equalizers except peace require you to set the filter parameters manually using the software’s user interface. some parametric equalizers use filter width (bandwidth) instead of q. the width of the filter can be calculated as: bw = fc / q where bw is the bandwidth in herts, fc is the center frequency, and q is the quality. the width of the filter in octaves can be calculated as: n = ln(1 + 1/(2*q^2) + sqrt(((2*q^2 + 1) / q^2 )^2 / 4 – 1 )) / ln(2) where ln is the natural logarithm. see http://www.sengpielaudio.com/calculator-bandwidth.htm for an online calculator.
It is very important to configure the preamplifier according to the value given in the readme.md output document. parametric EQ filters will produce positive gains, and to avoid clipping, a preamp with negative gain is required.
parametric equalizer settings can be used with peace or any other parametric equalizer that has at least 5 bands available. even fewer bands are possible, but the precomputed results require the use of a minimum of five of the first filters. the parametric equalizer filter parameters look like this:
fixed band equalizers
The fixed band equalizer is more commonly known as a graphic equalizer, but not to be confused with the graphic equalizer it is called that in this project. the fixed band equalizer is like a parametric equalizer with several peaking filters, but it has no adjustable frequency information, only gain. all other types are preferable to fixed band equalizers, but on some devices these are the only ones available.
Fixed band equalizers have trouble compensating for narrow notches and peaks that fall between two bands. a good example is sennheiser hd 800 with its 6khz peak which is right between the 4khz and 8khz bands of the standard 10 band equalizer. when using a 10-band equalizer, check to see if the fixed-band equalization curve is too different from the desired equalization curve at any frequency, and adjust filters close by ear for best results.
Fixed band equalizer settings look like this:
has equalizerapo, paz and many media players with parametric equalizers like neutron, roon and foobar2000.
It is possible to use the simple equalizerapo and edit the config file in c:program filesequalizerapoconfigconfig.txt. replace the file content with the graphiceq.txt file found in the results. no preamplifier is needed because it is built into the graphiceq line. using sennheiser hd 650 would make the config file look like this:
equalizerapo has a graphical user interface for adjusting settings. start the editor from c:program filesequalizerapoeditor.exe.
equalizerapo editor gui
peace is a graphical user interface for manipulating parametric equalization filters with equalizerapo. peace also has visualization for the end result EQ frequency response, profile manager for multiple different EQ settings, and a switch to disable all, among other features. load the eq setup in peace by clicking the import button and select the parametriceq.txt file. sets the preamp to the value mentioned in the results.
peace with full GUI for equalizerapo
Android has several different equalizer options, but not too many powerful apps that work with all apps. wavelet is the best option for newer androids (version 9 and newer) but older devices have a built in fixed band equalizer that works system wide but center frequencies and q values vary so it is you may need to produce your own results.
wavelet is an android app that comes with all autoeq eq profiles built in. The app works with all music apps, making it the closest thing to full system equalizer you can have on Android without rooting. The equalizer built into this app is very powerful and can represent autoeq profiles very accurately. there is also an option to fine tune the sound with graphic equalizer. wavelet has the best bluetooth device compatibility of all tested eq apps on android.
Wavelet’s core features are free (including auto-EQ profiles and graphic equalization), but some additional features can be unlocked with an in-app purchase.
neutron is a parametric equalizer music player and it comes with all autoeq profiles built in, but it’s not free.
usb audio player pro
usb audio player pro is an android app with enhanced usb audio drivers for use with usb dacs. usb audio player pro is not system wide, but it works with local files and many streaming services, not spotify though. the usb audio player has a tone booster morphit plugin that has a parametric equalizer. this app and plugin are not free.
music equalizer equalizer
The best app for full system equalization on older android phones (without rooting) is music equalizer eq which is a standard 10 band equalizer. the gains for each band can be adjusted with a resolution of only 1 db, but this is not a problem because the average error is only 0.25 db, barely noticeable. the biggest problem is the possible narrow peaks and notches between the center frequencies of the bands, as there is really nothing that can be done about it. see notes on fixed band equalizers.
The app launches in presets view, so you need to click the left arrow in the top left corner to access manual view. here you can adjust the bands. set each band level to the value closest to what the equalization settings call for. Precalculated results only support standard 10-band equalizers that have band center frequencies of 31, 63, 125, 250, 500, 1000, 2000, 4000, 8000, and 16000hz. q values are not adjustable, so you don’t have to worry about them even though they are provided in the output configuration.
viper4android is a system-wide (and much more) convolution-based equalizer on android, but it requires rooting the device. viper4android supports impulse response (wav) files. for rooted users this is the best option.
See also: Kamala Harris getting mocked for wired ear buds is peak absurdity
jamesdsp is an alternative to viper4android. provides a system wide solution, has a convolution engine but requires rooting.
pulse effects / easy effects
pulseeffects / easyeffects is a linux module with a wide variety of signal processing tools including convolution and parametric equalizers.
From version 4.7.2 onwards, pulseeffects added support for convolution fir filters. this is the recommended way to apply autoeq presets. navigate to the plugins tab and add the convolve plugin, then click the waveform button above the stereo width controls (or just the ‘impulses’ button as of 6.1.x), click ‘import impulse ” and select the wav file generated by autoeq. you may also need to manually click ‘load’ in the boost menu for the filter to fully load. the pulseeffects convolver requires you to set the input gain to prevent clipping. the gain required by the parametric EQ should be enough, maybe 0.5 db more negative gain. depending on the version, you may need to rename the .wav file to .irs.
To use the parametric equalizer, from version 6.0.0 onwards, first select the plugins tab at the bottom of the screen, add the equalizer plugin and load the apo settings by clicking “load preset de apo” and selecting the parametriceq.txt file. for easyeffects <= 6.1.3, the preamp can be adjusted with the input slider. later versions support reading this from parametriceq.txt.
From version 5.0.0 onwards, pulseeffects has been renamed easyeffects and uses pipewire instead of pulseaudio as the backend. load EQ settings by clicking the top middle gear & clicking the import aco presets button and select the parametriceq.txt file. the preamp can be adjusted with the input slider.
for versions prior to v4.8.0, adjust the filter parameters by clicking the gear button on each filter and set the type to “bell”, the mode to “apo” and adjust the gain with the slider. the number of filters can be changed by clicking the screwdriver and wrench button.
osx / macos
system-wide parametric EQ solutions on osx are usually based on separate plugin hosting software and the actual plugin doing the actual EQ.
sorry for the lack of documentation for these. I haven’t tried any of the methods myself, but they have been suggested by helpful autoeq users.
soundsource is the easiest way to use autoeq on mac as it comes with all profiles built in. however, the software is not free.
Audio plugin hosts include:
- apple’s own au lab hosts au plugins and can be used as a system-wide audio output via blackhole or soundflower.
- menubus has a free version, but already it is not actively developed.
- au hosting with blackhole or soundflower can be used as a system-wide au plugin host.
eq plugins include:
- voxengo primeeq is a parametric EQ plugin but it’s not free.
- fabfilter pro q3 is another parametric EQ plugin, more expensive than voxengo but might be easier to install and use. note: pro q3 uses a different system and all q values must be multiplied by 1.41!
- the laconvolver plugin is a free convolver eq that works with impulse response wav files.
- aunbandeq comes integrated with mac osx. works at least with hostingau + blackhole
- apple au lab + soundflower + aunbandeq tutorial au lab permission issue
eqmac is a & open source system wide equalizer for macos. eqmac has a free 10 band equalizer and unlimited band equalizer (paid) with autoeq integration built in! (expert equalizer)
Unfortunately, ios doesn’t allow system-wide equalizers, so the only options are music players with built-in equalizer or hardware solutions.
neutron is a parametric equalizer music player and it comes with all autoeq profiles built in, but it’s not free.
eqe is a system wide parametric equalizer on ios but requires jailbreak. here are instructions on how to set it up: https://www.reddit.com/r/headphones/comments/dqbt81/psa_if_you_have_a_jailbroken_iphone_you_can/
some devices have built-in equalizers, and since they do the processing on the device, they work with any source that can be connected to the device.
qudelix 5k is a portable dac and amplifier with cable and bluetooth connectivity and 10-band parametric equalizer.
radsone easstudio es100 is a bluetooth dac and amplifier with integrated 10 band equalizer. Since this is a hardware solution, it will work with pretty much any font.
autoeq.py is the tool used to produce the equalization results from the measurement data. there is no fancy graphical user interface, rather it is used from the command line.
- 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 have problems installing project dependencies.
- download and install 64-bit python 3.10 . be sure to check add python 3.10 to path.
- you may need to install libsndfile if you have problems with the sound file when installing requirements.txt.
- on linux, you may need to install python development packages
- on linux you may need to install pip
- on windows you may need to install microsoft visual c++ redistributable for visual studio 2015, 2017 and 2019
- open a terminal/command prompt. on windows, search for cmd in the start menu.
- clone autoeq
- go to autoeq location
- check the python version. you should see python 3.10.x printed. if you see for example 3.11.x, you need to install python 3.10.
- create a python virtual environment
- activate virtual environment
- update pip
- install the necessary packages
- verify the installation. if all went well, you will see the list of command line parameters that autoeq accepts.
when you come back later, you just need to re-enable the virtual environment
for more information on virtual environments, read the python’ venv documentation.
autoeq is under active development and gets new measurements, results and features all the time. you can get the latest version from git
dependencies may change from time to time, you can update to the latest with
command line arguments
reproduction of precalculated results for supra-aural headphones measured by oratory1990:
playback of precomputed results for measured elements of rtings:
all parameters used for precomputed results can be found in the results/update.py script.
individual headphone equalization
equalizing sennheiser hd 650 and saving the results to my_results/hd650:
fixed band equalizers
Filter parameters for fixed band equalizers can be adjusted with the -q and -fc parameters. producing fixed band equalizer settings for the sony wh-1000xm3 app:
using sound signatures
autoeq provides a way to easily play around with different sound signatures. use cases include making earphones deviate from the neutral target or making one earphone sound like another.
equalizing sennheiser hd 800 to sound like sennheiser hd 650 using precalculated results. both have been measured by oratory1990, so we’ll use those measurements. the precalculated results include 4 db of bass boost for over-ear headphones, and therefore we need to apply a 4 db bass boost here as well.
See also: IPad (9th generation) – Technical Specifications
equalizing massdrop x sennheiser hd 800 to sound like akg k701. oratory1990 has not done a k701 measurement, so we will use the innerfidelity measurement for the sound signature. the recommended results list always points to the best measurement so you can check which one to use (the measurement system can be found in the url).
equalizing hifiman he400s to sound like massdrop x meze 99 noir. he400s is measured by internal fidelity only, so we will point the offset file pointing to the internal fidelity calibrated harman target. meze 99 noir has a massive natural bass boost and to capture that we need to relax the maximum gain to +12db.
application of the v-shaped sound signature to audeze mobius. the first step is to create the sound signature file. save this to my_data/v.csv:
then use it by supplying the path to the -sound_signature parameter. we will set the bass boost to 0db because the sound signature already has significant bass boost. Of course, it’s possible to add bass boost on top of the sound signature file if you want even more bass.
The main principle used by autoeq to produce the equalization function is to invert the error curve. the error is the difference between the raw microphone data and the compensation (target) curve. If the headphone frequency response is 4dB below target at 20hz, the equalization function will have a +4dB boost at 20hz. actually simply inverting the error is not enough, as the measurements and equalization have several issues that need to be addressed; see the technical challenges for more details.
results provided in this project currently have all headphone measurements of
- reference audio analyzer
- measurements with the exception of the reference audio analyzer measurements made on the sf1 system.
results are organized by source/target/headphones, so a sennheiser hd 650 measured by innerfidelity and adjusted to a calibrated harman target would be found in innerfidelity/innerfidelity_harman_over-ear_2018/sennheiser hd 650. multiple measurements of the same headphone by the same measurement entity are averaged. all the different measures to average have been renamed with snxxx (serial number) or display x at the end of the name to distinguish them from averaged data that do not have suffixes in the name.
oratory 1990 measurements have been made on 43ag and 43ac gras couplers, the same ones used to develop harman target responses by olive et al. and thus use harman target responses for equalization targets. these results are recommended over all other measurements for this reason. harman’s target data is in the offset folder.
Crinacle in-ear measurements have been made with the iec 60318-4 coupler and are therefore compatible with harman in-ear targets. this fact also gives the crinacle measurements the second highest recommendation after oratory1990. Crinacle’s on-ear measurements use the same ear simulator connected to a minidsp pinna. Measurements made on this system are not as accurate as oratory1990, but thanks to the high-quality ear simulator, they are a bit better than the rest.
innerfidelity, rtings and headphone.com measurements have been made in the hmsii.3 head acoustic measurement system. this system is no longer an industry standard due to the rigid canopies. the measurements on headphone.com are the old ones that are no longer available. these should not be confused with the new measures that are being produced using the gras system.
The Reference Audio Analyzer has three different measurement systems, none of which seem to represent human hearing particularly well. the newer hdm-x system is close to the hmsii.3 head acoustic systems but seems to suffer a bit more in the bass range. hdm1 is clearly worse than other systems and the measurements made on the sf1 system are not included at all because it is a flat plate coupler. iem measurements are made with what looks like a pipe coupler and don’t seem very accurate. benchmark audio analyzer measurements and results are the last resort.
all results use frequency response targets that were developed specifically for this project, except oratory1990 and the crinacle iem measurements, which use standard harman targets. Target curves were developed by calibrating the measurements to the Oratory1990 and Crinacle (IEMS) reference measurements and modifying the Harman 2018 supra-aural and 2019 internal targets with the calibration data.
none of these targets have the bass boost seen in harman’s target responses and therefore a +4db boost was applied for all over-ear headphones, +6db for in-ear headphones and no boost for headphones . harman’s goals actually call for around +6db for headphones and +9db for headphones, but since some headphones cannot achieve this with positive gain limited to +6db, a smaller boost was selected. data above 6 to 12 khz is filtered more heavily to avoid equalizing dips and narrow notches that rely heavily on the listener’s own ears.
target of oratory iem 1990
in-ear results are no longer provided with the oratory1990 target (previously “usound” target) because the new 2019 harman earphone corrects the +10khz issues of the 2017 target. it’s also easy to transform the results created for harman 2019 to oratory1990 target without running the processing yourself if you are using a parametric equalizer and have two filters (bands) available by adding these two to your eq software:
The results will be remarkably similar to the results produced with the actual Oratorio 1990 target:
Of course, it is still possible to produce native results with the oratory1990 target by pointing the compensation to the oratory1990 target file: -compensation=”compensation/oratory1990.csv or -compensation=”compensation/oratory1990_wo_bass.csv
super best audio friends “serious” forum user internal fidelity goal
innerfidelity and headphone.com measured previously used headphones for serious sbaf purposes only. the sbaf-serious curve is no longer used for these measurements as new targets were developed by calibrating harman targets. this is a modified version of the internal fidelity target curve produced by a user named serious on the super best audio friends forum. this corner has no obvious issues and is fairly well balanced overall. the curve became an offset for the raw mic data and sloped 0.2 db/octave brighter. innerfidelity measurements are recommended over headphone.com measurements because sbaf-serious target was developed for internalfidelity. sbaf-serious curve modified to fit headphone.com measurements. csv data files for innerfidelity and headphone.com are located at innerfidelity/resources/innerfidelity_compensation_sbaf-serious.csv and headphonecom/resources/headphonecom_compensation_sbaf-serious.csv, respectively.
The measured headphones have a frequency response target made for this project. this treble averaging target uses an average of frequency responses of all measured headphones with rtings in the treble range with a small manual rolloff of the 9 kHz peak and the native response of rtings below 2500 hz with no bass boost . Three different targets were compared in listening tests and the average treble target was found to sound better. the other two were the rtings native target curve and the calibrated and uncalibrated versions of the sbaf serious target curve. rtings uses the same measurement system that innerfidelity uses, so in theory the serious uncalibrated sbaf target should perform similarly with rtings, but listening tests found the average treble target to be slightly better. rtings has a very informative video on how they are taking the measurements and how they got to the target they use.
all of these rting targets were withdrawn when new harman calibrated targets were developed for rting measurements.
Simply reversing the deviation of the headphone’s frequency response from the target response does not usually produce sufficient results. some issues are caused by imperfections in measurements, some are reliability issues, and some are practical end-user issues. rtings has a good video on youtube on measurement system challenges and solutions that is definitely worth a look. innerfidelity also has a very educational video on youtube about measurements and what constitutes neutral sound. the main takeoffs are that bass and treble measurements are very inconsistent, the neutral sound is still not very well defined, and over-ear headphones have major reliability issues in the 8-9khz range due to resonances moving around when change the location of the headphones. harman international has done solid research on the preferred frequency response of headphones, but since that research was done on a different measurement system, the goal does not apply directly to the innerfidelity (summer 2018) and headphone measurements. com.
There is very little that can be done to combat bass inconsistencies because the same problems will present whether equalization is used or not. headphones simply have different bass responses on different listeners (heads). therefore the bass is taken as is in autoeq and equalized as if there was nothing wrong with it. your experience may be different. Fortunately, bass has less of an impact on music, and having too much bass (especially sub-bass) doesn’t create problems of the same magnitude as having too much treble.
Moving resonances between 8 and 9 kHz can cause big problems if not taken into account. the peaks and troughs in this range are large in amplitude and very narrow. if one equates these peaks and dips according to the frequency response measurement, in the worst case a peak will move in a dip spot when the headphones are moved and thus the peak is significantly amplified , leading to a very crisp and penetrating sound signature. to counteract these problems by default, autoeq uses heavy smoothing and limited positive gain above 6 to 8 kHz. this way, the equalization will follow a broader trend of the region and not worry as much about narrow peaks and troughs. in addition, the positive gain is limited to 0dB as an added safety measure against amplification spikes due to headphone movement. further suppressing a narrow decay is not the best, but in practice it has little negative effect on the sound. both measures will also alleviate upper treble measurement inconsistencies above 11 to 12 khz.
A practical issue for the end user is if too high a positive gain is allowed, requiring the same amount of negative digital preamp to avoid clipping. this negative preamplifier will limit the maximum volume produced by the system if no analog gain is available. if a dedicated headphone amplifier is available or if the motherboard/sound card can make the headphones loud enough, even when using a high negative preamp, larger values of -max_gain can be used. by default -max_gain is set to +6db so as not to cripple the user’s volume too much. full gain will clip the EQ curve which produces sharp kinks in it. sudden changes in EQ can produce unwanted EQ artifacts. to counteract this, autoeq rounds the corners every time the maximum gain cuts the curve.
parametric equalizer optimization
autoeq has an optimizer to adjust various peaking filters to the desired equalization curve. optimization is part heuristic initialization and part mathematical optimization.
In the initialization phase, peaks are detected from the target curve and a peak filter is created to match the height (gain) and location (frequency) of the peak. in this way, the optimizer finds an adequate number of filters to optimize. If the bass region has no peaks and is therefore missing filters entirely, a maximum of two filters will be added at 20hz and 60hz.
A way to limit the number of filters used is provided with the max_filters parameter. if there are too many filters after initialization, some filters are removed. the first filters with small gain (< 0.2 db and < 0.33 db) are removed. if there are too many filters after the reduction of the small gain filters, it tries to merge the nearby filters. the combined filter will be at the midpoint of the combined filters. if the combination of filters did not reduce the count enough, the smaller filters are removed until the count matches the maximum number of filters allowed. The following image shows the initialization of the 1more mk801 headset. the red dots are the peaks of the filters before reduction and the green dots are the peaks after reduction.
Equalization target and initial peak filters for optimization before and after limiting the number of filters
after achieving the proper number of filters and setting the center frequencies and filter gains to the appropriate values, a mathematical optimization is performed to adjust the total frequency response of all filters to match as closely as possible with the desired curve. the optimization is based on gradient descent and will try to minimize the mean square error between the frequency response of the sum of the filters and the target. when the improvements in the error become too small to make a practical difference, the optimization stops. the animation below shows the progress from initialization to a final closed curve.
parametric equalization filter optimization (click to play)
problems are the way to go if you have problems, have ideas, or are unclear on how things are done or documented.
You can find me on reddit and head-fi if you just want to say hi.
See also: 6 Best Sleep Mask with Headphones  – Headphonesty