Introduction
Introduction Statistics Contact Development Disclaimer Help
github.com-jaakkopasanen-AutoEq_-_2022-09-11_14-41-08
by jaakkopasanen
Thumbnail
Download
Web page
Automatic headphone equalization from frequency responses
AutoEQ
TL;DR If you are here just looking to make your
headphones sound better, find your headphone model
inresults[1] folder's recommended headphones listand
follow instructions in Usage[2] section.
About This Project
AutoEQ is a project for equalizing headphone frequency
responses automatically and it achieves this by
parsingfrequency response measurements and producing
equalization settings which correct the headphone to a
neutral sound.This project currently has over 2500
headphones covered in theresults[3] folder.See Usage[4]
for instructions how to use the results withdifferent
equalizer softwares andResults[5] section for details
about parameters and how the results wereobtained.
AutoEQ is not just a collection of automatically produced
headphone equalization settings but also a tool for
equalizingheadphones for yourself. autoeq.py provides
methods for reading data, equalizing it to a given
targetresponse and saving the results for usage with
equalizers. It's possible to use different compensation
(target)curves, apply tilt for making the headphones
brighter/darker and adding a bass boost. It's even
possible to make oneheadphone sound (roughly) like
another headphone. For more info about equalizing see
Equalizing[6]. Ifyou're looking for something light
weight to install as a dependency for your own project,
you'll findautoeq-pkg[7] much more suited for your needs.
Third major contribution of this project is the
measurement data and compensation curves all in a
numerical formatexcept for Crinacle's raw data.
Everything is stored as CSV files so they are easy to
process with any programminglanguage or even Microsoft
Excel.
Sennheiser HD 800[8]
Sennheiser HD 800 equalization results plotted
Usage
AutoEQ produces settings for basically all types of
equalizer apps.
Convolution Equalizers
Convolution equalizer is the most powerful type of
equalizer software. These equalizers allow extremly
precise controlover the frequency response and the
results are the same on all devices and platforms when
using the same FIR filter.Convolution equalizer is the
preferred way to use AutoEq results.
AutoEq supports convolution equalizers with FIR filters
as WAV files and with EqualizerAPO's GraphicEQ filter
type. Thedefault results contain FIR filters for both
44.1 kHz and 48 kHz sampling rates. Other sampling rates
are supported butnot given in the default results.
EqualizerAPO's GraphicEQ works with any sampling rate.
To use the FIR filters, download the appropriate WAV file
and import it to the EQ software of your choice. Please
keepin mind that not all EQ softwares support
convolution. Some equalizers can load multiple FIR
filters at the same time.Download both WAV files, create
a Zip file containing both and load the Zip file to for
example Roon.
See EqualizerApo[9] for instructions on how to use the
GraphicEQ.
Parametric Equalizers
Parametric equalizers have filters (bands) with user
adjustable gain, center frequency and quality Q. Keep in
mind thatparametric eq accuracy depends on the number of
filters available. Usually 10 filters produce very
goodresults but as little as 5 can be good enough. Keep
in mind that different parametric equalizers will produce
differentoutcomes with the same parameter values.
Parameters produced by AutoEq are equal with EqualizerAPO
using 48 kHz samplingrate. When using other equalizers or
sampling rates, it's always highly recommended to check
that the frequency responseof the equalizer matches the
parametric eq curve in the graphs.
All parametric equalizer except Peace require you to
configure the filter parameters manually with the
software userinterface. Some parametric equalizer use
filter width (band width) instead of Q. Filter width can
be calculated as:bw = Fc / Q where bw is the band width
in Herts, Fc is center frequency and Q is quality. Filter
width inoctaves 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 thenatural logarithm. See
http://www.sengpielaudio.com/calculator-bandwidth.htm for
an online calculator.
It's very important to set preamp according to the value
given in the result README.md document. Parametric eq
filterswill produce positive gains and to avoid clipping
a preamp with negative gain is required.
Parametric eq settings can be used with Peace or any
other parametric eq which has at least 5 bands available.
Evenfewer bands is possible but pre-computed results
require to use minimum five first of the filters.
Parametric equalizerfilter parameters look like this:
| Type | Fc | Q | Gain || :------ | :------ | :--- | :----
-- || Peaking | 28 Hz | 0.46 | 6.3 dB || Peaking | 162 Hz
| 0.91 | -2.3 dB || Peaking | 2237 Hz | 1.94 | -4.6 dB ||
Peaking | 6093 Hz | 2.26 | -4.7 dB || Peaking | 8251 Hz |
3.71 | -2.9 dB |
Fixed Band Equalizers
Fixed band eq is more commonly known as graphic equalizer
but in order not to confuse with EqualizerAPO GraphicEQ
it iscalled like that in this project. Fixed band
equalizer is like parametric equalizer with several
peaking filters butdon't have adjustable frequency
information, only gain. All other types are preferred
over fixed band equalizers but onsome devices these are
the only available ones.
Fixed band equalizers have trouble compensating for
narrow notches and peaks that fall between two bands.
Good exampleis Sennheiser HD 800[10]with it's 6 kHz peak
that is right in between 4 kHz and 8 kHz bands of
standard 10-band equalizer.When using 10-band equalizer
check if the fixed band equalization curve is very
different than the desired equalizationcurve at some
frequency and adjust the nearby filters by ear for best
results.
Fixed band equalizer settings look like this:
| Type | Fc | Q | Gain || :------ | :------- | :--- | :---
--- || Peaking | 31 Hz | 1.41 | 6.1 dB || Peaking | 62 Hz
| 1.41 | 3.0 dB || Peaking | 125 Hz | 1.41 | -1.1 dB ||
Peaking | 250 Hz | 1.41 | -2.2 dB || Peaking | 500 Hz |
1.41 | -0.9 dB || Peaking | 1000 Hz | 1.41 | 0.1 dB ||
Peaking | 2000 Hz | 1.41 | 3.6 dB || Peaking | 4000 Hz |
1.41 | -1.0 dB || Peaking | 8000 Hz | 1.41 | -4.1 dB ||
Peaking | 16000 Hz | 1.41 | -7.5 dB |
Windows
has EqualizerAPO[11], Peace[12] and many media players
with parametric equalizers such asNeutron[13],Roon[14]
and Foobar2000[15].
EqualizerAPO
It's possible to use plain EqualizerAPO[16] and edit
configuration file inC:\\Program
Files\\EqualizerAPO\\config\\config.txt. Replace contents
of the file with the GraphicEQ.txt file found inresults.
Preamp is not needed because it is incorporated into the
GraphicEQ line. UsingSennheiser HD 650[17]would make
config file look like this:GraphicEQ: 20 -0.5; 21 -0.5;
22 -0.5; 23 -0.5; 24 -0.5; 26 -0.5; 27 -0.5; 29 -0.5; 30 -
0.5; 32 -0.9; 34 -1.2; 36 -1.5; 38 -1.8; 40 -2.1; 43 -
2.4; 45 -2.4; 48 -2.5; 50 -2.6; 53 -3.0; 56 -3.2; 59 -
3.3; 63 -3.6; 66 -4.0; 70 -4.5; 74 -5.0; 78 -5.5; 83 -
5.9; 87 -6.3; 92 -6.7; 97 -7.0; 103 -7.3; 109 -7.6; 115 -
7.8; 121 -8.0; 128 -8.1; 136 -8.4; 143 -8.6; 151 -8.7;
160 -8.8; 169 -8.8; 178 -8.9; 188 -8.9; 199 -9.0; 210 -
9.0; 222 -9.0; 235 -8.9; 248 -8.8; 262 -8.6; 277 -8.5;
292 -8.4; 309 -8.3; 326 -8.2; 345 -8.1; 364 -7.9; 385 -
7.8; 406 -7.7; 429 -7.6; 453 -7.6; 479 -7.5; 506 -7.4;
534 -7.2; 565 -7.1; 596 -7.0; 630 -7.0; 665 -7.0; 703 -
7.0; 743 -7.0; 784 -7.1; 829 -7.1; 875 -7.1; 924 -7.0;
977 -7.1; 1032 -7.2; 1090 -7.3; 1151 -7.2; 1216 -7.0;
1284 -6.9; 1357 -6.7; 1433 -6.4; 1514 -6.2; 1599 -6.1;
1689 -5.9; 1784 -5.6; 1885 -5.4; 1991 -5.2; 2103 -5.1;
2221 -5.2; 2347 -5.5; 2479 -5.8; 2618 -6.2; 2766 -6.6;
2921 -6.9; 3086 -7.0; 3260 -6.8; 3443 -6.2; 3637 -5.6;
3842 -5.1; 4058 -4.6; 4287 -4.2; 4528 -4.2; 4783 -4.8;
5052 -5.2; 5337 -4.8; 5637 -4.3; 5955 -4.7; 6290 -4.9;
6644 -4.7; 7018 -4.8; 7414 -5.7; 7831 -6.3; 8272 -6.5;
8738 -6.5; 9230 -6.5; 9749 -6.5; 10298 -6.5; 10878 -6.5;
11490 -6.5; 12137 -6.5; 12821 -7.8; 13543 -9.9; 14305 -
9.7; 15110 -9.0; 15961 -11.0; 16860 -13.5; 17809 -14.5;
18812 -15.2; 19871 -15.7
EqualizerAPO has a graphical user interface for adjusting
configurations. Launch the editor fromC:\\Program
Files\\EqualizerAPO\\Editor.exe.
equalizerapo-editor[18]
EqualizerAPO Editor GUI
Peace
Peace[19] is a GUI for manipulating parametric eq
filterswith EqualizerAPO. Peace also has visualization
for the end result equalization frequency response,
profile manager formultiple different eq settings and a
switch for disabling everything among other features.
Load eq settings into Peaceby clicking Import button and
select the ParametricEQ.txt file. Set the preamp to value
mentioned in theresults.
peace[20]
Peace with full GUI for EqualizerAPO
Android
Android has several different equalizer options but not
too many powerful apps which work with all apps. Wavelet
is the bestoption for newer Androids (version 9 and up)
but older devices have a built-in fixed band equalizer
which works system widebut the center frequencies and Q
values vary so might need to produce your own results[21].
Wavelet
Wavelet[22] is an Android app which comes withall the
AutoEq eq profiles built in. The app works with all music
apps so is closest to system-wide equalizer one canhave
on Android without rooting. The equalizer built into this
app is very powerful and can represent the AutoEqprofiles
very accurately. There is also an option to tune the
sound with graphic equalizer. Wavelet has the
bestBluetooth device compatibility of all the tested eq
apps on Android.
The main functionalities of Wavelet are free (including
AutoEq profiles and graphic eq) but some extra features
can beunlocked with an in-app purchase.
Wavelet[23]
Neutron
Neutron[24] is a music player with parametric
equalizerand comes with all of the AutoEq profiles built
in but is not free.
USB Audio Player PRO
USB Audio Player PRO[25] is an Android appwith improved
USB audio drivers for usage with USB DACs. USB Audio
PlayerPRO is not system-wide but works with local files
and many streaming services though not with Spotify. USB
Audio Playerhas Toneboosters Morphit plugin which has
parametric equalizer. This app and the plugin are not
free.
Music EQ Equalizer
The best app for system wide equalization on older
Android phones (without rooting) isMusic Equalizer EQ[26]
which is a 10-band standardequalizer. Gains for each band
can be adjusted with only 1 dB resolution but this isn't
a problem because the averageerror is then only 0.25 dB,
hardly noticeable. Bigger problem is the potential narrow
peaks and notches between thebands' center frequencies
since there isn't really anything that can be done for
those. See notes aboutfixed band equalizers[27].
The app starts in the presets view so you need to click
the left arrow in the top left corner to get to the
manual view. Here youcan adjust the bands. Set each band
level to the closest value to what the equalization
settings ask. Pre-computed resultsonly support standard
10-band equalizers which have band center frequencies at
31, 63, 125, 250, 500, 1000, 2000, 4000,8000 and 16000
Hz. Q values are not adjustable so you don't have to
worry about those even though they are given in theresult
settings.
Viper4Android
Viper4Android[28] is a system-wideconvolution based
equalizer (and much more) on Android but it requires
rooting of the device. Viper4Android is supportedwith
impulse response (WAV) files. For rooted users this is
the best option.
JamesDSP
JamesDSP[29] is an alternative toViper4Android. It
provides a system wide solution, has a convolution engine
but requires rooting.
Linux
PulseEffects / EasyEffects
PulseEffects / EasyEffects[30] is a Linux module with
wide variety of signalprocessing 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
applyAutoEq presets. Navigate to the plugins tab and add
the convolver 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 AutoEqgenerated WAV file. You may also need to
manually click 'load' in the Impulses menu for the filter
to be fully loaded. PulseEffects' convolver requires you
to set the input gain to prevent clipping. The gain
requiredby parametric eq should be sufficient, maybe 0.5
dB of negative gain more. Depending on the version, you
may need torename the .wav file as .irs.
To use parametric eq, from version 6.0.0 onwards, first
select the plugins tab atthe bottom of the screen, add
the equalizer plugin, and load APO settings by clicking
"Load APO Preset" andselecting the ParametricEQ.txt file.
For EasyEffects <= 6.1.3, Pre-amp can be adjusted with
the input slider.Later versions support reading this from
ParametricEQ.txt.
From version 5.0.0 onwards, PulseEffects was renamed to
EasyEffects and uses PipeWire instead of PulseAudio as
backend.Load eq settings by clicking the top center cog &
clicking Import ACO Presets button and select the
ParametricEQ.txtfile. Pre-amp can be adjusted with the
input slider.
For versions prior to v4.8.0, adjust filter parameters by
clicking the cog button on each filterand set type to
"Bell", mode to "APO" and adjust the gain with the
slider. Number of filters can be changed by clickingthe
screwdriver and wrench button.
pulseeffects[31]
OSX / MacOS
System wide parametric EQ solutions on OSX typically rely
on separate plugin hosting software and the actual
pluginwhich does the actual equalization.
Pardon the lack of documentation for these. I have not
tested any of the methods myself but they have been
suggested byhelpful AutoEQ users.
SoundSource[32] is the easiest way to use AutoEq on Mac
since it comes with all of theprofiles built in. The
software is however not free.
Audio plugin hosts include:- Apple's own AU Lab[33] hosts
AU plugins and can be used as a system-wide audio output
via BlackHole[34] or Soundflower[35].- MenuBus[36] has a
free version but is no longer actively developed.-
Hosting AU[37] with BlackHole[38] orSoundflower[39] can
be used as a system wide AU plugin host.
EQ plugins include:- Voxengo PrimeEQ[40] is a parametric
EQ plugin but is not free.- Fabfilter Pro Q3[41] is
another parametric EQ plugin, moreexpensive than Voxengo
but might be easier to install and use. Note: Pro Q3 uses
a different system and all Q values need to be multiplied
by 1.41!- LAConvolver plugin[42] is a free convolver EQ
which works with impulse response WAV files.- AUNBandEq
comes built in with Mac OSX. Works at least with
HostingAU + BlackHole
hostingau+blackhole[43]
Tutorials:- Apple AU Lab + Soundflower + AUNBandEQ
Tutorial[44] AU Lab Permission Issue[45]
eqMac
eqMac[46] is a Free & Open Source[47] System Wide
equalizer for macOS.eqMac has a Free 10 Band EQ and an
Unlimited Band EQ (paid) with built-in AutoEQ
Integration! (Expert EQ)
autoeq-promo.png[48]
iOS
iOS unfortunately doesn't allow system-wide equalizers,
so the only options are either music players with built-
inequalizer or hardware solutions[49].
Neutron
Neutron[50] is a music player with parametric equalizer
andcomes with all of the AutoEq profiles built in but is
not free.
EQE
EQE[51] is a system wide parametric equalizer on iOS but
requires jailbreaking. Hereare instructions on how to set
it up:
https://www.reddit.com/r/headphones/comments/dqbt81
/psaifyouhaveajailbrokeniphoneyoucan/
Hardware
Some devices have built-in equalizers and since they do
the processing in the device, they work with any source
whichcan connect to the device.
Qudelix 5K[52] is a portable DAC and amplifierwith wired
and Bluetooth connectivity and 10 band parametric
equalizer.
Radsone EasStudio ES100[53] is a Bluetooth DAC and amp
with built-in 10 bandequalizer. Since this is a hardware
solution it will work withpractically any source.
Equalizing
autoeq.py is the tool used to produce the equalization
results from measurement data. There is nofancy graphical
user interface but instead it is used from command line.
Installing
* Download and install Git: https://git-
scm.com/downloads. When installing Git on Windows,
use Windows SSL verificationinstead of Open SSL or
you might run into problems when installing project
dependencies.
* Download and install 64-bit Python 3.10[54]. Make
sure to check Add Python 3.10 to PATH.
* You may need to install libsndfile[55] if you're
having problems with soundfilewhen installing
requirements.txt.
* On Linux you may need to install Python dev
packagesbashsudo apt install python3-dev python3-pip
python3-venv
* On Linux you may need to install pip[56]
* On Windows you may need to installMicrosoft Visual
C++ Redistributable for Visual Studio 2015, 2017, and
2019[57]
* Open a terminal / command prompt. On Windows, search
cmd in the start menu.
* Clone AutoEqbashgit clone
https://github.com/jaakkopasanen/AutoEq.git
* Go to AutoEq locationbashcd AutoEq
* Check Python version. You should see Python 3.10.x
printed out. If you see for example 3.11.x, you need
to install Python 3.10.bashpython --version
* Create a python virtual environmentbashpython -m venv
venv
* Activate virtualenv```bash
On Windows
venv\\Scripts\\activate.bat
On Linux and Mac
. venv/bin/activate- Update pipbashpython -m pip install -
U pip- Install required packagesbashpython -m pip install
-U -r requirements.txt- Verify installation. If
everything went well, you'll see the list of command line
parameters AutoEq accepts.bashpython autoeq.py --help```
When coming back at a later time you'll only need to
activate virtual environment again```bash
On Windows
cd AutoEqvenv\\Scripts\\activate.bat
On Linux and Mac
cd AutoEq. venv/bin/activate```
To learn more about virtual environments, read Python'
venv documentation[58].
Updating
AutoEq is in active development and gets new
measurements, results and features all the time. You can
get the latestversion from gitbashgit pull
Dependencies may change from time to time, you can update
to the latest withbashpython -m pip install -U -r
requirements.txt
Command Line Arguments
```usage: autoeq.py [-h] --inputdir INPUTDIR [--outputdir
OUTPUTDIR] [--standardizeinput] [--newonly] [--
compensation COMPENSATION] [--equalize] [--parametriceq]
[--fixedbandeq] [--rockbox] [--fc FC] [--q Q] [--
tenbandeq] [--maxfilters MAXFILTERS] [--convolutioneq] [--
fs FS] [--bitdepth BITDEPTH] [--phase PHASE] [--fres
FRES] [--bassboost BASSBOOST] [--iembassboost
IEMBASSBOOST] [--tilt TILT] [--soundsignature
SOUNDSIGNATURE] [--maxgain MAXGAIN] [--trebleflower
TREBLEFLOWER] [--treblefupper TREBLEFUPPER] [--
treblegaink TREBLEGAINK] [--showplot] [--threadcount]
optional arguments: -h, --help show this help message and
exit --inputdir INPUTDIR Path to input data directory.
Will look for CSV files in the data directory and
recursively in sub-directories. --outputdir OUTPUTDIR
Path to results directory. Will keep the same relative
paths for files found in inputdir. --standardizeinput
Overwrite input data in standardized sampling and bias? --
newonly Only process input files which don't have results
in output directory. --compensation COMPENSATION File
path to CSV containing compensation (target) curve.
Compensation is necessary when equalizing because all
input data is raw microphone data. See "compensation",
"innerfidelity/resources" and "headphonecom/resources". --
equalize Will run equalization if this parameter exists,
no value needed. --parametriceq Will produce parametric
eq settings if this parameter exists, no value needed. --
fixedbandeq Will produce fixed band eq settings if this
parameter exists, no value needed. --rockbox Will produce
a Rockbox .cfg file with 10 band eq settings if this
parameter exists,no value needed. --fc FC Comma separated
list of center frequencies for fixed band eq. --q Q Comma
separated list of Q values for fixed band eq. If only one
value is passed it is used for all bands. Q value can be
calculated from bandwidth in N octaves by Q =
2^(N/2)/(2^N-1). --tenbandeq Shortcut parameter for
activating standard ten band eq optimization. --
maxfilters MAXFILTERS Maximum number of filters for
parametric EQ. Multiple cumulative optimization runs can
be done by giving multiple filter counts separated by
"+". "5+5" would create 10 filters where the first 5 are
usable independently from the rest 5 and the last 5 can
only be used with the first 5. This allows to have
muliple configurations for equalizers with different
number of bands available. Not limited by default. --
convolutioneq Will produce impulse response for
convolution equalizers if this parameter exists, no value
needed. --fs FS Sampling frequency in Hertz for impulse
response and parametric eq filters. Single value or
multiple values separated by commas eg 44100,48000. When
multiple values are given only the first one will be used
for parametric eq. Defaults to 44100. --bitdepth BITDEPTH
Number of bits for every sample in impulse response.
Defaults to 16. --phase PHASE Impulse response phase
characteristic. "minimum", "linear" or "both". Defaults
to "minimum" --fres FRES Frequency resolution for impulse
responses. If this is 20 then impulse response frequency
domain will be sampled every 20 Hz. Filter length for
impulse responses will be fs/fres. Defaults to 10. --
bassboost BASSBOOST Bass boost shelf. Sub-bass
frequencies will be boosted by this amount. Can be either
a single value for a gain in dB or a comma separated list
of three values for parameters of a low shelf filter,
where the first is gain in dB, second is center frequency
(Fc) in Hz and the last is quality (Q). When only a
single value (gain) is given, default values for Fc and Q
are used which are 105.0 Hz and 0.71, respectively. For
example "--bassboost=6" or "--bassboost=9.5,150,0.69". --
iembassboost IEMBASSBOOST iembassboost argument has been
removed, use "--bassboost" instead! --tilt TILT Target
tilt in dB/octave. Positive value (upwards slope) will
result in brighter frequency response and negative value
(downwards slope) will result in darker frequency
response. 1 dB/octave will produce nearly 10 dB
difference in desired value between 20 Hz and 20 kHz.
Tilt is applied with bass boost and both will affect the
bass gain. --soundsignature SOUNDSIGNATURE File path to a
sound signature CSV file. Sound signature is added to the
compensation curve. Error data will be used as the sound
signature target if the CSV file contains an error column
and otherwise the raw column will be used. This means
there are two different options for using sound
signature: 1st is pointing it to a result CSV file of a
previous run and the 2nd is to create a CSV file with
just frequency and raw columns by hand (or other means).
The Sound signature graph will be interpolated so any
number of point at any frequencies will do, making it
easy to create simple signatures with as little as two or
three points. --maxgain MAXGAIN Maximum positive gain in
equalization. Higher max gain allows to equalize deeper
dips in frequency response but will limit output volume
if no analog gain is available because positive gain
requires negative digital preamp equal to maximum
positive gain. Defaults to 6.0. --trebleflower
TREBLEFLOWER Lower bound for transition region between
normal and treble frequencies. Treble frequencies can
have different max gain and gain K. Defaults to 6000.0. --
treblefupper TREBLEFUPPER Upper bound for transition
region between normal and treble frequencies. Treble
frequencies can have different max gain and gain K.
Defaults to 8000.0. --treblegaink TREBLEGAINK Coefficient
for treble gain, affects both positive and negative gain.
Useful for disabling or reducing equalization power in
treble region. Defaults to 1.0. --showplot Plot will be
shown if this parameter exists, no value needed. --
threadcount THREADCOUNT Amount of threads to use for
processing results. If set to "max" all the threads
available will be used. Using more threads result in
higher memory usage. Defaults to 1.```
Examples
Reproducing Results
Reproducing pre-computed results for oratory1990 measured
on-ear headphones:bashpython autoeq.py --
input_dir="measurements/oratory1990/data/onear" --
output_dir="my_results/oratory1990/harman_over-ear_2018" -
-compensation="compensation/harman_over-
ear_2018_wo_bass.csv" --equalize --parametric_eq --
max_filters=5+5 --ten_band_eq --bass_boost=4.0 --
convolution_eq --fs=44100,48000
Reproducing pre-computed results for Rtings measured
IEMs:bashpython autoeq.py --
input_dir="measurements/rtings/data/inear" --
output_dir="my_results/rtings/avg" --
compensation="measure
ments/rtings/resources/rtings_compensation_avg.csv" --
equalize --parametric_eq --max_filters=5+5 --ten_band_eq -
-bass_boost=6.0 --convolution_eq --fs=44100,48000
All parameters used for pre-computed results can be found
in the results/update.py script.
Equalizing Individual Headphones
Equalizing Sennheiser HD 650 and saving results to
my_results/HD650:bashpython autoeq.py --
input_dir="measure
ments/innerfidelity/data/onear/Sennheiser HD 650" --
output_dir="my_results/HD650" --
compensation="measurements
/innerfidelity/resources/innerfidelity_harman_over-
ear_2018_wo_bass.csv" --equalize --bass_boost=4 --
show_plot --convolution_eq --fs=44100,48000
Fixed Band Equalizers
Filter parameters for fixed band equalizers can be
adjusted with --q and --fc parameters. Producing fixed
bandequalizer settings for Sony WH-1000XM3 app:bashpython
autoeq.py --
input_dir="measurements/oratory1990/data/onear/Sony WH-
1000XM3" --output_dir="my_results/Sony WH-1000XM3 (app)" -
-compensation="compensation/harman_over-
ear_2018_wo_bass.csv" --equalize --bass_boost=4.0 --
fixed_band_eq --fc=400,1000,2500,6300,16000 --q=1.05
Using Sound Signatures
AutoEQ provides a way to play around with different sound
signatures easily. The use-cases include making
headphonesdeviate from the neutral target or making one
headphone sound like another.
Equalizing Sennheiser HD 800 to sound like Sennheiser HD
650 using pre-computed results. Both have been measured
byoratory1990 so we'll use those measurements. Pre-
computed results include 4dB of bass boost for over-ear
headphones andtherefore we need to apply a bass boost of
4dB here as well.bashpython autoeq.py --
input_dir="measurements/oratory1990/data/onear/Sennheiser
HD 800" --output_dir="my_results/Sennheiser HD 800 (HD
650)" --compensation="compensation/harman_over-
ear_2018_wo_bass.csv" --
sound_signature="results/oratory1990/harman_over-
ear_2018/Sennheiser HD 650/Sennheiser HD 650.csv" --
equalize --parametric_eq --max_filters=5+5 --ten_band_eq -
-bass_boost=4 --convolution_eq --fs=44100,48000
Equalizing Massdrop x Sennheiser HD 800 to sound like AKG
K701. There is no K701 measurement made by oratory1990
sowe'll use Innerfidelity's measurement for the sound
signature. The list of recommended results always points
to bestmeasurement so you can check there which one to
use (measurement system can be found in the
URL).bashpython autoeq.py --
input_dir="measurements/oratory1990/data/onear/Sennheiser
HD 800" --output_dir="my_results/Sennheiser HD 800
(K701)" --compensation="compensation/harman_over-
ear_2018_wo_bass.csv" --
sound_signature="results/innerfide
lity/innerfidelity_harman_over-ear_2018/AKG K701/AKG
K701.csv" --equalize --parametric_eq --max_filters=5+5 --
ten_band_eq --bass_boost=4 --convolution_eq --
fs=44100,48000
Equalizing HiFiMAN HE400S to sound like Massdrop x Meze
99 Noir. HE400S is measured only by Innerfidelity so
we'll pointcompensation file pointing to Innerfidelity's
calibrated Harman target. Meze 99 Noir has massive
natural bass boost andto capture that we need to relax
max gain to +12dB.bashpython autoeq.py --
input_dir="measurements/innerfidelity/data/onear/HiFiMAN
HE400S" --output_dir="my_results/HE400S (99 Noir)" --
compe
nsation="measurements/innerfidelity/resources/innerfi
delity_harman_over-ear_2018_wo_bass.csv" --
sound_signature="results/oratory1990/harman_over-
ear_2018/Meze 99 Noir/Meze 99 Noir.csv" --equalize --
parametric_eq --max_filters=5+5 --ten_band_eq --
bass_boost=4 --max_gain=8
Applying V-shaped sound signature to Audeze Mobius. First
step is to create the sound signature file. Save this
tomy_data/v.csv:csvfrequency,raw20,4.01000,-
4.010000,4.020000,0.0Then use it by providing the path to
--sound_signature parameter. We'll set bass boost to 0dB
because the soundsignature already has a significant bass
boost. Of course it's possible to add bass boost on top
of the sound signaturefile if you want even more
bass.bashpython autoeq.py --
input_dir="measurements/rtings/data/onear/Audeze Mobius" -
-output_dir="my_results/Audeze Mobius (V-signature)" --
com
pensation="measurements/rtings/resources/rtings_compens
ation_avg.csv" --sound_signature="my_data/v.csv" --
equalize --parametric_eq --max_filters=5+5 --ten_band_eq -
-bass_boost=4.0
Results
The main principle used by AutoEQ for producing the
equalization function is to invert the error curve. Error
is thedifference between raw microphone data and the
compensation (target) curve. If headphone's frequency
response is 4 dBbelow the target at 20 Hz equalization
function will have +4 dB boost at 20 Hz. In reality
simply inverting the error isnot sufficient since
measurements and equalization have several problems that
need to be addressed, seeTechnical Challenges[59] for
more details.
Results provided in this project currently have all the
headphone measurements from- Crinacle[60]- Headphone.com
[61]- Innerfidelity[62]- oratory1990[63]- Reference Audio
Analyzer[64]- Rtings[65]with the exception of Reference
Audio Analyzer measurements done on the SF1 system.
Results are organized by source/target/headphone so a
Sennheiser HD 650 measured by Innerfidelity and tuned to
acalibrated Harman target would be found
ininnerfidelity/innerfidelityharmanover-
ear_2018/Sennheiser HD 650[66].Multiple measurements of
the same headphone by the same measurement entity are
averaged. All different measurements foraveraging have
been renamed with snXXX (serial number) or sample X in
the end of the name to distinguish from theaveraged data
which has no suffixes in the name.
oratory1990 measurements have been done on Gras 43AG and
43AC couplers, the same which were used to develop
Harmantarget responses by Olive et al. and therefore use
Harman target responses for the equalization targets.
These resultsare recommended over all other measurements
because of this reason. Harman target data is in the
compensation folder.
Crinacle's in-ear measurements have been performed with
IEC 60318-4 coupler and are therefore compatible
withHarman in-ear targets. This fact also earns
Crinacle's measurements second highest ranking
recommendation afteroratory1990. Crinacle's over-ear
measurements use the same ear simulator attached to a
MiniDSP ears pinna. Themeasurements done on this system
are not as accurate as oratory1990's but because of the
high quality ear simulator,these are a bit better than
rest.
Innerfidelity, Rtings and Headphone.com measurements have
been performed on Head Acoustics HMSII.3 measurement
system.This system is not an industry standard anymore
because of the rigid pinnae. The Headphone.com
measurements are the oldones which are no longer
available. These are not to be consfused with the new
measurements Resolve is producing usingGRAS system.
Reference Audio Analyzer have three different measurement
systems[67]none of which seem to represent human hearing
particularly well. The most recent HDM-X system is close
to the HeadAcoustics HMSII.3 systems but seems to suffer
a bit more in the bass range. HDM1 is clearly worse than
other systemsand the measurements done on the SF1 system
are not included at all because that is a flat plate
coupler. IEM measurementsare done with what looks like a
tubing coupler and these don't look very accurate.
Reference Audio Analyzermeasurements and results are a
last resort.
All of the results use frequency response targets that
were specifically developed for this project except
oratory1990and Crinacle's IEM measurements which use
standard Harman targets. The target curves were developed
by calibratingmeasurements against reference measurements
by oratory1990 and Crinacle (IEMs) and modifying the
Harman 2018 over-earand 2019 in-ear targets with the
calibration data.
None of these targets have bass boost seen in Harman
target responses and therefore a +4dB boost was applied
for allover-ear headphones, +6dB for in-ear headphones
and no boost for earbuds. Harman targets actually ask for
about +6dB forover-ears and +9dB for in-ears but since
some headphones cannot achieve this with positive gain
limited to +6dB, asmaller boost was selected. Above 6 to
12 kHz data is filtered more heavily to avoid equalizing
the narrow dips andnotches that depend heavily on the
listener's own ears.
oratory1990 IEM Target
In-ear results with oratory1990 target (formerly "Usound"
target) are not longer given because the new 2019
Harmanin-ear fixes the +10 kHz problems of the 2017
target. Also it is easy to transform results created for
Harman 2019 tooratory1990 target without running the
processing yourself if you are using parametric equalizer
and have two filters(bands) available by adding these two
to your eq software:
| Type | Fc | Q | Gain || :------ | :--- | :--- | :--- ||
Peaking | 113 | 0.75 | 3.5 || Peaking | 3766 | 0.63 | -
2.3 |
The results will be remarkably similar to results
produced with the actual oratory1990 target:
oratory1990 vs Harman in-ear 2019[68]
Of course it's still possible to produce native results
with oratory1990 target by pointing compensation to
theoratory1990 target file: --
compensation="compensation/oratory1990.csv or--
compensation="compensation/oratory1990_wo_bass.csv
Innerfidelity Target by Super Best Audio Friends Forum User
"Serious"
Innerfidelity and Headphone.com measured headphones
previously usedSBAF-Serious target[69] only.The SBAF-
Serious curve is no longer used for these measurements
since a new targets were developed by calibrating
Harmantargets. This is a modified version of
Innerfidelity target curve produced by a user called
Serious on Super Best AudioFriends forum. This curve
doesn't have any glaring problems and is quite well
balanced overall. Curve was turned into acompensation for
raw microphone data and tilted 0.2 dB / octave brighter.
Innerfidelity measurements are recommendedover
Headphone.com measurements because SBAF-Serious target
was developed for Innerfidelity. SBAF-Serious curve
wasmodified to be suitable for Headphone.com
measurements. CSV data files for Innerfidelity
andHeadphone.com are at
innerfidelity/resources/innerfidelity_compensation_sbaf-
serious.csv
andheadphonecom/resources/headphonecom_compensation_sbaf-
serious.csv, respectively.
Rtings Targets
Rtings measured headphones have a frequency response
target made for this project. This treble average target
is using anaverage of frequency responses of all Rtings
measured headphones in the treble range with small manual
reduction of the9kHz peak and the Rtings native response
below 2500 Hz without bass boost. Three different targets
were compared inlistening tests and the treble average
target was found to sound the best. Other two were the
Rtings native target curveand calibrated and uncalibrated
versions of SBAF Serious target curve. Rtings uses the
same measurement system asInnerfidelity uses so in theory
the uncalibrated SBAF Serious target should work
similarly with Rtings but listeningtests found the treble
average target to be slightly better. Rtings havea very
informative video[70] about how they are doing the
measurements andhow they came up with the target they use.
All of these Rtings targets retired when new calibrated
Harman targets were developed for Rtings measurements.
Technical Challenges
Simply inverting headphone frequency response deviation
from target response does not usually produce
sufficientresults. Some problems are caused by
imperfections in measurements, some are reliability
issues and some are practicalend-user problems. Rtings
has a good video on Youtube[71] about measurementsystem
challenges and solutions which is definitely worth
checking out. Innerfidelity also has a veryeducational
video on Youtube[72] about measurements and what
constitutes as aneutral sound. Main takeoffs are that
bass and treble measurements are very inconsistent,
neutral sound is not very welldefined yet and on-ear
headphones have big reliability problems in 8 to 9kHz
range due to resonances which move whenheadphone
placement is changed. Harman international has done some
solid research into preferred headphone frequencyresponse
but since that research was done on a different
measurement system the target does not apply directly
toInnerfidelity (Summer 2018) and Headphone.com
measurements.
There is very little that can be done for fighting bass
inconsistencies because the same problems will be there
whetherequalization is used or not. Headphones simply
have different bass responses on different listeners
(heads). Thereforebass is taken as is in AutoEQ and
equalized as if there was nothing wrong with it. Your
mileage may vary. Luckily basshas smaller impact on music
and having too much bass (especially sub-bass) doesn't
create problems of the same magnitudeas having too much
treble.
Moving resonances around 8 to 9kHz may cause big problems
if not taken into account. Spikes and dips in this range
areof great amplitude and very narrow. If one equalizes
these spikes and dips according to frequency response
measurementin worst case scenario a spike will move in a
place of dip when headphone is moved, and therefore the
spike is amplifiedsignificantly, leading to a very sharp
and piercing sound signature. To counter these problems
by default AutoEQ uses heavysmoothing and limited
positive gain above 6 to 8kHz. This way the equalization
will follow a broader trend of the regionand will not
care so much about narrow spikes and dips. Also positive
gain is limited to 0dB as an extra safety measureagainst
amplifying spikes due to moving the headphone.
Suppressing a narrow dip even further is not an optimal
thing to do but in practice haslittle negative effect on
the sound. Both of these measures will also alleviate
upper treble measurement inconsistenciesabove 11 to 12
kHz.
A practical end-user problem is if too high positive gain
is allowed which asks for equal amount of negative
digitalpre-amp to prevent clipping. This negative preamp
will limit maximum volume produced by the system if there
is no analoggain available. If a dedicated headphone
amplifier is available or if the motherboard/soundcard
can drive the headphonesloud enough even when using high
negative preamp larger --max_gain values can be used. By
default --max_gain is setto +6dB so as not to cripple the
user's volume too much. Max gain will clip the
equalization curve which produces sharp kinksin it. Sharp
changes in equalization may produce unwanted equalization
artifacts. To counter this AutoEQ rounds thecorners
whenever max gain clips the curve.
Parametric Equalizer Optimization
AutoEQ has an optimizer to fit several peaking filters to
the desired equalization curve. Optimization is part
heuristicinitialization and part mathematical
optimization.
In the initialization phase peaks are detected from the
target curve and a peaking filter is created to match the
peak'sheight (gain) and location (frequency). This way,
the optimizer finds a suitable number of filters to
optimize. If the bassregion has no peaks and therefore is
missing filters entirely, a maximum of two filters will
be added at 20 Hz and 60 Hz.
A way to limit the number of filters used is provided
with max_filters parameter. If there are too many filters
afterinitialization, some filters are removed. First
filters with small gain (< 0.2 dB and < 0.33 dB) are
removed. If there are toomany filters after reduction of
small gain filters, nearby filters are attempted to
merge. Merged filter will be in themid point of the
merged filters. If merging filters did not reduce the
count enough, smallest filters are removed untilcount
matches maximum allowed number of filters. Image below
shows initialization for 1More MK801 headphone. Red
dotsare the peaks of filters before reduction and green
dots are the peaks after reduction.
filter-initialization[73]
Equalization target and initial peak filters for
optimization before and after filter number limitation
After suitable number of filters have been achieved and
filter center frequencies and gains have been set to
appropriatevalues a mathematical optimization is
performed to fit sum frequency response of all filters to
match as close aspossible the desired curve. Optimization
is based on gradient descent and will attempt to minimize
meansquared error between the sum frequency response of
the filters and the target. When improvements in the
error aregetting too small to make a practical difference
the optimization is stopped. Animation below shows
progress from theinitialization to a close finished curve.
optimization-animation[74]
Optimization of parametric eq filters (click to play)
Contact
Issues[75] are the way to go if you are experiencing
problems, haveideas or if there is something unclear
about how things are done or documented.
You can find me in Reddit[76] andHead-fi[77] if you just
want to say hello.
To restore the repository download the bundle
wget https://archive.org/download/github.com-jaakkopasanen-AutoEq_-_2022-…
and run:
git clone jaakkopasanen-AutoEq_-_2022-09-11_14-41-08.bundle
Source: https://github.com/jaakkopasanen/AutoEq[78]
Uploader: jaakkopasanen[79]
Upload date: 2022-09-11
References
1. ./results (link)
2. #usage (link)
3. ./results (link)
4. #usage (link)
5. #results (link)
6. #equalizing (link)
7. https://github.com/jaakkopasanen/autoeq-pkg (link)
8. ./results/oratory1990/harman_over-ear_2018/Sennheiser%20HD%20800/Sennheiser…
9. #EqualizerAPO (link)
10. ./results/oratory1990/harman_over-ear_2018/Sennheiser%20HD%20800 (link)
11. #equalizerapo (link)
12. #peace (link)
13. https://www.microsoft.com/en-us/p/neutron-music-player/9nblggh4vp2h?active…
14. https://roonlabs.com/ (link)
15. https://www.foobar2000.org/ (link)
16. https://sourceforge.net/projects/equalizerapo/ (link)
17. ./results/oratory1990/harman_over-ear_2018/Sennheiser%20HD%20650 (link)
18. //web.archive.org/web/2im_/https://i.imgur.com/lHhRBuA.png (img)
19. https://sourceforge.net/projects/peace-equalizer-apo-extension/ (link)
20. //web.archive.org/web/2im_/https://i.imgur.com/e0POEbF.png (img)
21. #equalizing (link)
22. https://play.google.com/store/apps/details?id=com.pittvandewitt.wavelet (l…
23. //web.archive.org/web/2im_/https://i.imgur.com/UGiBwFX.png (img)
24. https://play.google.com/store/apps/details?id=com.neutroncode.mp (link)
25. https://play.google.com/store/apps/details?id=com.extreamsd.usbaudioplayer…
26. https://play.google.com/store/apps/details?id=mediam.music.equalizer (link)
27. #fixed-band-equalizers (link)
28. https://forum.xda-developers.com/showthread.php?t=2191223 (link)
29. https://forum.xda-developers.com/android/apps-games/app-reformed-dsp-manag…
30. https://github.com/wwmm/easyeffects (link)
31. //web.archive.org/web/2im_/https://user-images.githubusercontent.com/32952…
32. https://rogueamoeba.com/soundsource/ (link)
33. https://www.apple.com/apple-music/apple-digital-masters/ (link)
34. https://github.com/ExistentialAudio/BlackHole (link)
35. https://github.com/mattingalls/Soundflower (link)
36. https://www.menubus.audio/versions (link)
37. http://ju-x.com/hostingau.html (link)
38. https://github.com/ExistentialAudio/BlackHole (link)
39. https://github.com/mattingalls/Soundflower (link)
40. https://www.voxengo.com/product/primeeq/ (link)
41. https://www.fabfilter.com/products/pro-q-3-equalizer-plug-in (link)
42. http://audio.lernvall.com/ (link)
43. //web.archive.org/web/2im_/https://user-images.githubusercontent.com/38220…
44. https://www.superbestaudiofriends.org/index.php?threads/systemwide-eq-on-m…
45. https://discussions.apple.com/thread/8552731 (link)
46. https://eqmac.app (link)
47. https://github.com/bitgapp/eqmac (link)
48. //web.archive.org/web/2im_/https://raw.githubusercontent.com/bitgapp/eqMac…
49. #Hardware (link)
50. https://apps.apple.com/app/neutron-music-player/id766858884 (link)
51. https://github.com/rweichler/EQE (link)
52. https://www.qudelix.com/products/qudelix-5k-dac-amp (link)
53. https://www.radsone.com/earstudio (link)
54. https://www.python.org/getit/ (link)
55. http://www.mega-nerd.com/libsndfile/ (link)
56. https://pip.pypa.io/en/stable/installing/ (link)
57. https://support.microsoft.com/en-us/help/2977003/the-latest-supported-visu…
58. https://docs.python.org/3.8/library/venv.html (link)
59. #technical-challenges (link)
60. https://crinacle.com/ (link)
61. http://graphs.headphone.com/ (link)
62. https://www.innerfidelity.com/headphone-measurements (link)
63. https://www.reddit.com/r/oratory1990 (link)
64. https://reference-audio-analyzer.pro/en/catalog-reports.php?sp_1=1&tp=1 (l…
65. https://www.rtings.com/headphones (link)
66. ./results/innerfidelity/innerfidelity_harman_over-ear_2018/Sennheiser%20HD…
67. https://reference-audio-analyzer.pro/en/stands.php (link)
68. //web.archive.org/web/2im_/https://i.imgur.com/kGYBOev.png (img)
69. https://www.superbestaudiofriends.org/index.php?threads/innerfidelity-fr-t…
70. https://www.youtube.com/watch?v=HNEI3qLZEKo (link)
71. https://www.youtube.com/watch?v=HNEI3qLZEKo (link)
72. https://www.youtube.com/watch?v=SDRHFNfFCFU (link)
73. //web.archive.org/web/2im_/https://i.imgur.com/UlMb2jK.png (img)
74. //web.archive.org/web/2im_/https://i.imgur.com/pM7JYAb.gif (img)
75. https://github.com/jaakkopasanen/AutoEq/issues (link)
76. https://www.reddit.com/user/jaakkopasanen (link)
77. https://www.head-fi.org/members/jaakkopasanen.491235/ (link)
78. https://github.com/jaakkopasanen/AutoEq (link)
79. https://github.com/jaakkopasanen (link)
Date Published: 2022-09-12 01:07:32
Identifier: github.com-jaakkopasanen-AutoEq_-_2022-09-11_14-41-08
Item Size: 2147483647
Media Type: software
# Topics
GitHub;code;software;git
# Collections
github_narabot_mirror
# Uploaded by
@narabot
# Similar Items
View similar items
PHAROS
You are viewing proxied material from tilde.pink. The copyright of proxied material belongs to its original authors. Any comments or complaints in relation to proxied material should be directed to the original authors of the content concerned. Please see the disclaimer for more details.