@@ -5,7 +5,7 @@ and follow instructions in [Usage](#usage) section.
5
5
6
6
## About This Project
7
7
AutoEQ is a project for equalizing headphone frequency responses automatically and it achieves this by parsing
8
- frequency response measurements and producing a equalization settings which correct the headphone to a neutral sound.
8
+ frequency response measurements and producing equalization settings which correct the headphone to a neutral sound.
9
9
This project currently has over 2500 headphones covered in the
10
10
[ results] ( ./results ) folder.
11
11
See [ Usage] ( #usage ) for instructions how to use the results with
@@ -36,7 +36,7 @@ AutoEQ produces settings for basically all types of equalizer apps.
36
36
### Parametric Equalizers
37
37
Parametric equalizers have filters with user adjustable gain, center frequency and quality Q. Keep in mind that
38
38
parametric eq accuracy depends on the number of filters available. Usually 10 filters produce very good
39
- results but as little as 5 can be good enough. Parametric equalizer is typically the safe bet if you're system, app or
39
+ results but as little as 5 can be good enough. Parametric equalizer is typically the safe bet if your system, app or
40
40
player has that available.
41
41
42
42
All parametric equalizer except Peace require you to configure the filter parameters manually with the software user
@@ -156,8 +156,8 @@ error is then only 0.25 dB, hardly noticeable. Bigger problem is the potential n
156
156
bands' center frequencies since there isn't really anything that can be done for those. See notes about
157
157
[ fixed band equalizers] ( #fixed-band-equalizers ) .
158
158
159
- App starts in presets view so you need to click the left arrow in the top left corner to get to manual view. Here you
160
- can adjust the bands. Set each band level to closest value to what the equalization settings ask. Pre-computed results
159
+ 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 you
160
+ can adjust the bands. Set each band level to the closest value to what the equalization settings ask. Pre-computed results
161
161
only support standard 10-band equalizers which have band center frequencies at 31, 63, 125, 250, 500, 1000, 2000, 4000,
162
162
8000 and 16000 Hz. Q values are not adjustable so you don't have to worry about those even though they are given in the
163
163
result settings.
@@ -191,7 +191,7 @@ Audio plugin hosts include:
191
191
- [ MenuBus] ( https://www.menubus.audio/versions ) has a free version but is no longer actively developed.
192
192
- [ SoundSource] ( https://rogueamoeba.com/soundsource/ ) is in active development but not free.
193
193
- [ Hosting AU] ( http://ju-x.com/hostingau.html ) with [ BlackHole] ( https://github.com/ExistentialAudio/BlackHole ) or
194
- [ Soundflower] ( https://github.com/mattingalls/Soundflower ) can be used as system wide AU plugin host.
194
+ [ Soundflower] ( https://github.com/mattingalls/Soundflower ) can be used as a system wide AU plugin host.
195
195
196
196
EQ plugins include:
197
197
- [ Voxengo PrimeEQ] ( https://www.voxengo.com/product/primeeq/ ) is a parametric EQ plugin but is not free.
@@ -212,7 +212,7 @@ presets but can be created by passing parameters
212
212
[ Contact me] ( #contact ) if you know good solutions for iOS.
213
213
214
214
#### EQE
215
- [ EQE] ( https://github.com/rweichler/EQE ) is a system wide parametric equalizer on iOS but requires a jailbreaking. Here
215
+ [ EQE] ( https://github.com/rweichler/EQE ) is a system wide parametric equalizer on iOS but requires jailbreaking. Here
216
216
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/
217
217
218
218
### Hardware
@@ -225,11 +225,11 @@ practically any source.
225
225
fancy graphical user interface but instead it is used from command line.
226
226
227
227
### Installing
228
- - Download [ AutoEQ zip] ( https://github.com/jaakkopasanen/AutoEq/archive/master.zip ) and exctract to a convenient
228
+ - Download [ AutoEQ zip] ( https://github.com/jaakkopasanen/AutoEq/archive/master.zip ) and extract to a convenient
229
229
location. Or just git clone if you know what that means.
230
230
- Download and install 64-bit [ Python3] ( https://www.python.org/getit/ ) . Python 3.8 doesn't work yet. Make sure to check
231
231
* Install Python 3 to PATH*
232
- - Install virtualenv. Run this on command prompt. Search ` cmd ` in Windows start menu.
232
+ - Install virtualenv. Run this on command prompt. Search ` cmd ` in the Windows start menu.
233
233
``` bash
234
234
pip install virtualenv
235
235
```
@@ -252,7 +252,7 @@ source venv/Scripts/activate
252
252
``` bash
253
253
pip install -r requirements.txt
254
254
```
255
- - Verify installation. If everything went well, you'll see list of command line parameters autoeq accepts.
255
+ - Verify installation. If everything went well, you'll see the list of command line parameters autoeq accepts.
256
256
``` bash
257
257
python autoeq.py --help
258
258
```
@@ -310,7 +310,7 @@ optional arguments:
310
310
--fc FC Comma separated list of center frequencies for fixed
311
311
band eq.
312
312
--q Q Comma separated list of Q values for fixed band eq. If
313
- only one value is passed it is used for all bands. Q
313
+ only one value is passed, it is used for all bands. Q
314
314
value can be calculated from bandwidth in N octaves by
315
315
Q = 2^(N/2)/(2^N-1).
316
316
--ten_band_eq Shortcut parameter for activating standard ten band eq
@@ -321,7 +321,7 @@ optional arguments:
321
321
multiple filter counts separated by "+". "5+5" would
322
322
create 10 filters where the first 5 are usable
323
323
independently from the rest 5 and the last 5 can only
324
- be used with the first 5. This allows to have muliple
324
+ be used with the first 5. This allows to have multiple
325
325
configurations for equalizers with different number of
326
326
bands available. Not limited by default.
327
327
--fs FS Sampling frequency for impulse response and parametric
@@ -384,12 +384,12 @@ optional arguments:
384
384
treble frequencies. Treble frequencies can have
385
385
different max gain and gain K. Defaults to 8000.0.
386
386
--treble_max_gain TREBLE_MAX_GAIN
387
- Maximum positive gain for equalization in treble
387
+ Maximum positive gain for equalization in the treble
388
388
region. Defaults to 0.0.
389
389
--treble_gain_k TREBLE_GAIN_K
390
390
Coefficient for treble gain, affects both positive and
391
391
negative gain. Useful for disabling or reducing
392
- equalization power in treble region. Defaults to 1.0.
392
+ equalization power in the treble region. Defaults to 1.0.
393
393
--show_plot Plot will be shown if this parameter exists, no value
394
394
needed.
395
395
```
@@ -425,11 +425,11 @@ python autoeq.py --input_dir="measurements/oratory1990/data/onear/Sony WH-1000XM
425
425
426
426
#### Using Sound Signatures
427
427
AutoEQ provides a way to play around with different sound signatures easily. The use-cases include making headphones
428
- deviate from neutral target or making one headphone sound like another.
428
+ deviate from the neutral target or making one headphone sound like another.
429
429
430
430
Equalizing Sennheiser HD 800 to sound like Sennheiser HD 650 using pre-computed results. Both have been measured by
431
- oratory1990 so we'll use those measurments . Pre-computed results include 4dB of bass boost for over-ear headphones and
432
- therefore we need to apply bass boost of 4dB here as well.
431
+ oratory1990 so we'll use those measurements . Pre-computed results include 4dB of bass boost for over-ear headphones and
432
+ therefore we need to apply a bass boost of 4dB here as well.
433
433
``` bash
434
434
python 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
435
435
```
@@ -458,14 +458,14 @@ frequency,raw
458
458
20000,0.0
459
459
```
460
460
Then use it by providing the path to ` --sound_signature ` parameter. We'll set bass boost to 0dB because the sound
461
- signature already has significant bass boost. Of course it's possible to add bass boost on top of the sound signature
461
+ signature already has a significant bass boost. Of course it's possible to add bass boost on top of the sound signature
462
462
file if you want even more bass.
463
463
``` bash
464
464
python autoeq.py --input_dir=" measurements/rtings/data/onear/Audeze Mobius" --output_dir=" my_results/Audeze Mobius (V-signature)" --compensation=" measurements/rtings/resources/rtings_compensation_avg.csv" --sound_signature=" my_data/v.csv" --equalize --parametric_eq --max_filters=5+5 --ten_band_eq --bass_boost=4.0
465
465
```
466
466
467
467
## Results
468
- The main principle used by AutoEQ for producing the equalization function is to invert error curve. Error is the
468
+ The main principle used by AutoEQ for producing the equalization function is to invert the error curve. Error is the
469
469
difference between raw microphone data and the compensation (target) curve. If headphone's frequency response is 4 dB
470
470
below the target at 20 Hz equalization function will have +4 dB boost at 20 Hz. In reality simply inverting the error is
471
471
not sufficient since measurements and equalization have several problems that need to be addressed, see
@@ -478,12 +478,12 @@ Results provided in this project currently have all the headphone measurements f
478
478
- [ oratory1990] ( https://www.reddit.com/r/oratory1990 )
479
479
- [ Reference Audio Analyzer] ( https://reference-audio-analyzer.pro/en/catalog-reports.php?sp_1=1&tp=1 )
480
480
- [ Rtings] ( https://www.rtings.com/headphones )
481
- with the exception of Reference Audio Analyzer measurements done on SF1 system.
481
+ with the exception of Reference Audio Analyzer measurements done on the SF1 system.
482
482
483
483
Results are organized by ` source/target/headphone ` so a Sennheiser HD 650 measured by Innerfidelity and tuned to a
484
484
calibrated Harman target would be found in
485
485
[ innerfidelity/innerfidelity_harman_over-ear_2018/Sennheiser HD 650] ( ./results/innerfidelity/innerfidelity_harman_over-ear_2018/Sennheiser%20HD%20650 ) .
486
- Multiple measurements of a same headphone by a same measurement entity are averaged. All different measurements for
486
+ Multiple measurements of the same headphone by the same measurement entity are averaged. All different measurements for
487
487
averaging have been renamed with snXXX (serial number) or sample X in the end of the name to distinguish from the
488
488
averaged data which has no suffixes in the name.
489
489
@@ -503,8 +503,8 @@ This system is not an industry standard anymore because of the rigid pinnae.
503
503
Reference Audio Analyzer have [ three different measurement systems] ( https://reference-audio-analyzer.pro/en/stands.php )
504
504
none of which seem to represent human hearing particularly well. The most recent HDM-X system is close to the Head
505
505
Acoustics HMSII.3 systems but seems to suffer a bit more in the bass range. HDM1 is clearly worse than other systems
506
- and the measurements done on SF1 system are not included at all because that is a flat plate coupler. IEM measurements
507
- are done with a what looks like a tubing coupler and these don't look very accurate. Reference Audio Analyzer
506
+ and the measurements done on the SF1 system are not included at all because that is a flat plate coupler. IEM measurements
507
+ are done with what looks like a tubing coupler and these don't look very accurate. Reference Audio Analyzer
508
508
measurements and results are a last resort.
509
509
510
510
All of the results use frequency response targets that were specifically developed for this project except oratory1990
@@ -550,24 +550,24 @@ Headphone.com are at `innerfidelity/resources/innerfidelity_compensation_sbaf-se
550
550
` headphonecom/resources/headphonecom_compensation_sbaf-serious.csv ` , respectively.
551
551
552
552
### Rtings Targets
553
- Rtings measured headphones have frequency response target made for this project. This treble average target is using an
553
+ Rtings measured headphones have a frequency response target made for this project. This treble average target is using an
554
554
average of frequency responses of all Rtings measured headphones in the treble range with small manual reduction of the
555
555
9kHz peak and the Rtings native response below 2500 Hz without bass boost. Three different targets were compared in
556
556
listening tests and the treble average target was found to sound the best. Other two were the Rtings native target curve
557
557
and calibrated and uncalibrated versions of SBAF Serious target curve. Rtings uses the same measurement system as
558
558
Innerfidelity uses so in theory the uncalibrated SBAF Serious target should work similarly with Rtings but listening
559
559
tests found the treble average target to be slightly better. Rtings have
560
560
[ a very informative video] ( https://www.youtube.com/watch?v=HNEI3qLZEKo ) about how they are doing the measurements and
561
- how did they came up with the target they use.
561
+ how they came up with the target they use.
562
562
563
- All of these Rtings targets retired when a new calibrated Harman targets were developed for Rtings measurements.
563
+ All of these Rtings targets retired when new calibrated Harman targets were developed for Rtings measurements.
564
564
565
565
## Technical Challenges
566
566
Simply inverting headphone frequency response deviation from target response does not usually produce sufficient
567
567
results. Some problems are caused by imperfections in measurements, some are reliability issues and some are practical
568
568
end-user problems. Rtings has a good [ video on Youtube] ( https://www.youtube.com/watch?v=HNEI3qLZEKo ) about measurement
569
569
system challenges and solutions which is definitely worth checking out. Innerfidelity also has a very
570
- educational [ video on Youtube] ( https://www.youtube.com/watch?v=SDRHFNfFCFU ) about measurments and what constitutes as a
570
+ educational [ video on Youtube] ( https://www.youtube.com/watch?v=SDRHFNfFCFU ) about measurements and what constitutes as a
571
571
neutral sound. Main takeoffs are that bass and treble measurements are very inconsistent, neutral sound is not very well
572
572
defined yet and on-ear headphones have big reliability problems in 8 to 9kHz range due to resonances which move when
573
573
headphone placement is changed. Harman international has done some solid research into preferred headphone frequency
@@ -576,25 +576,25 @@ Innerfidelity (Summer 2018) and Headphone.com measurements.
576
576
577
577
There is very little that can be done for fighting bass inconsistencies because the same problems will be there whether
578
578
equalization is used or not. Headphones simply have different bass responses on different listeners (heads). Therefore
579
- bass is taken as is in AutoEQ and equalized as if there was nothing wrong with it. You're mileage may wary . Luckily bass
579
+ bass is taken as is in AutoEQ and equalized as if there was nothing wrong with it. Your mileage may vary . Luckily bass
580
580
has smaller impact on music and having too much bass (especially sub-bass) doesn't create problems of the same magnitude
581
581
as having too much treble.
582
582
583
583
Moving resonances around 8 to 9kHz may cause big problems if not taken into account. Spikes and dips in this range are
584
584
of great amplitude and very narrow. If one equalizes these spikes and dips according to frequency response measurement
585
- in worst case scenario a spike will move in a place of dip when headphone is moved and therefore the spike is amplified
586
- significantly leading to very sharp and piercing sound signature. To counter these problems by default AutoEQ uses heavy
585
+ in worst case scenario a spike will move in a place of dip when headphone is moved, and therefore the spike is amplified
586
+ significantly, leading to a very sharp and piercing sound signature. To counter these problems by default AutoEQ uses heavy
587
587
smoothing and limited positive gain above 6 to 8kHz. This way the equalization will follow a broader trend of the region
588
588
and will not care so much about narrow spikes and dips. Also positive gain is limited to 0dB as an extra safety measure
589
- against amplifying moved spike . Suppressing a narrow dip even further is not an optimal thing to do but in practice has
589
+ against amplifying spikes due to moving the headphone . Suppressing a narrow dip even further is not an optimal thing to do but in practice has
590
590
little negative effect on the sound. Both of these measures will also alleviate upper treble measurement inconsistencies
591
591
above 11 to 12 kHz.
592
592
593
593
A practical end-user problem is if too high positive gain is allowed which asks for equal amount of negative digital
594
594
pre-amp to prevent clipping. This negative preamp will limit maximum volume produced by the system if there is no analog
595
595
gain available. If a dedicated headphone amplifier is available or if the motherboard/soundcard can drive the headphones
596
- loud enough even when using high negative preamp larger ` --max_gain ` values can be uses . By default ` --max_gain ` is set
597
- to +6dB to not to cripple user's volume too much. Max gain will clip the equalization curve which produces sharp kinks
596
+ loud enough even when using high negative preamp larger ` --max_gain ` values can be used . By default ` --max_gain ` is set
597
+ to +6dB so as not to cripple the user's volume too much. Max gain will clip the equalization curve which produces sharp kinks
598
598
in it. Sharp changes in equalization may produce unwanted equalization artifacts. To counter this AutoEQ rounds the
599
599
corners whenever max gain clips the curve.
600
600
@@ -604,8 +604,8 @@ AutoEQ has an optimizer to fit several peaking filters to the desired equalizati
604
604
initialization and part mathematical optimization.
605
605
606
606
In the initialization phase peaks are detected from the target curve and a peaking filter is created to match the peak's
607
- height (gain) and location (frequency). This way the optimizer finds suitable number of filters to optimize. If bass
608
- region has no peaks and therefore is missing filters entirely, maximum of two filters will be added at 20 Hz and 60 Hz.
607
+ height (gain) and location (frequency). This way, the optimizer finds a suitable number of filters to optimize. If the bass
608
+ region has no peaks and therefore is missing filters entirely, a maximum of two filters will be added at 20 Hz and 60 Hz.
609
609
610
610
A way to limit the number of filters used is provided with ` max_filters ` parameter. If there are too many filters after
611
611
initialization, some filters are removed. First filters with small gain (< 0.2 dB and < 0.33 dB) are removed. If there are too
0 commit comments