- https://ju-x.com/hostingau.html
- https://existential.audio/blackhole/
Default output for applications is set to BlackHole's virtual sound device which the "Ext-In / Track D" channel can pick up in Hosting AU as an input. An "AUDynamicsProcessor" and "AUGraphicEQ" stage later (both built-in macOS units) it is sent back to the real output device.
To equalize my laptop, I ended up buying a umik-1, and using REW to calculate all the filter coefficients (you can import REW's filter export right into Easy Effects). It's a subtle difference at first, but it's much cleaner (I also usually have a compressor and loudness effect enabled, as the framework speakers are pretty quiet).
>Equalizer APO can be used in conjunction with Room EQ Wizard (http://www.roomeqwizard.com/), because it can read its filter text file format.
As a nitpick: You always know the filter transfer function, it's the DFT of the impulse response (and without the impulse response, you obviously cannot convolve).
Pretty impressive demo.
I use the "cab404" one and very impressed with it.
EDIT: and full easy effects profile: https://gist.github.com/smj-edison/915c3a72bf485bd8910125b68...
> generating a filter curve for a 300Hz slope, both channels were divided (A/B) against that curve
as defining a parametric EQ band. If you just generally want to invert a measured impulse response, then yeah, you don't know the underlying transfer function.
I wonder why laptops don't come with an internal speaker DSP profile loaded onto the EEPROM. This seems like one of those things that you really just want to do in firmware.
IEMs and headphones come EQed out of the factory AFAIK, but apparently quite poorly. I ran the autoEQ profile on my Moondrop Aria beater IEMs and it both cut through the muddiness and opened up the soundstage quite dramatically.
1. Hartmut Brandenstein and Rolf Unbehauen, "Weighted Least-Squares Approximation of FIR by IIR Digital Filters", IEEE TRANSACTIONS ON SIGNAL PROCESSING, VOL. 49, NO. 3, MARCH 2001
2. Hon Keung Kwan and Aimin Jiang, "Recent Advances in FIR Approximation by IIR Digital Filters", 2006 International Conference on Communications, Circuits and Systems
3. Ngai Wong and Chi-Un Lei, "FIR Filter Approximation by IIR Filters Based on Discrete-Time Vector Fitting", 2007 IEEE International Symposium on Circuits and Systems (ISCAS)
The third one is approachable by anyone who has studied linear algebra at the level usually taught for physics students and knows NumPy. No special DSP course is required. My implementation takes approximately 200 lines of Python code.
The article contains a deterministic algorithm that takes a guess on the pole positions in the complex plane and returns a better guess. The idea is to start with a random guess with the correct symmetry and apply the algorithm iteratively.
The only two tricks to be aware of are: 1) their reformulation of everything in section III.B in terms of real numbers (instead of complex numbers) is not making anything simpler and should be ignored, and 2) explicitly symmetrize matrices that are supposed to be symmetrical, it order to avoid accumulation of numerical errors.
Still, it is not something that I would be willing to fully automate: for good results, one has to add a small delay or chop off a few initial near-zero samples, and guessing the delay correctly is what separates an easy-to-approximate filter from a bad one.
- cool!
- oh but there's no way this isn't hard and somewhat manual, something to tune
- wait what, end of blog, that's it, just install a package?
- oh no this is the Asahi announcement, so it's Mac only? [follows link to GitHub]
- no! This is separate, it really is just install a package!
- oh, hang on, GPD Pocket 4 is the laptop shown in image, it's for that only
No slight against the author, nothing wrong with that, just a rollercoaster to follow!
Is there any technical reason it couldn't be generic though? Surely environment has almost as much impact as the hardware anyway, wouldn't you ideally have it sample and adjust every so often on a systemd timer or whatever?
sounds like a win though on the Koss KSC75 regardless though, just makes em more portable to other devices for you
Surely, I don't use the wav files for their laptop for mine.
I manage to get decent battery life, somewhere around four hours in general usage (not gaming or compiling) with TLP and disabling boost on battery, along with a few other small tweaks.
Since these operations sort-of commute, it is easier to understand if you invert the order of operations:
1. Invert the spectrum (ideally through something less sensitive to noise than what's done here). Now you have an impulse response that will, in theory, give you a perfectly flat frequency response.
2. Apply a 300 Hz slope. Now you gave up some of that flatness, but you have something that's physically realizable without murdering your speakers.
https://raw.githubusercontent.com/torvalds/linux/master/soun...
Windows drivers (Realtek?) likely load EQ coefficients into the codec, while the Linux one doesn't.
There are some tools and info here on how to get the coefficients you need (it's Hackintosh-oriented, but the basic principles apply):
https://github.com/acidanthera/AppleALC/wiki/Dumping-process...
[0] https://www.statista.com/statistics/1482210/os-distribution-...
If you measure your own device (and it's frequency/impulse response) and replace those .wav files with that -- you're good to go! There's just no universal format/place to put such calibration yet, which is why I published a custom package (incl. the filter config).
I'm kinda hoping more people generate such files for their laptops and share them, maybe we can build a collection of such profiles for many laptops :)