It's an AMD platform, so it's the native AMD HD Audio Controller (17h/19h/1ah), with a Realtek ALC245 codec behind it.
I have no idea what other hardware is involved, presumably an external Class-D amplifier IC (but I don't know as there doesn't seem to be a datasheet for the ALC245 available).
> Is there any technical reason it couldn't be generic though?
It includes 2 .wav files containing a measured, real-life calibration data for this specific laptop.
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 :)
REW can generate a set of peaking/shelf equalizer filters, but why would I want to do that instead of just applying the inverse impulse response instead?
It's just more work for a less perfect solution/result...
Exactly correct, that was my thought process while doing it.
I tried it without that 300 Hz slope first of course, but that did try to murder my speakers. :)
Depends on what you want to do :)
If you just want to read/write sectors of 512 bytes at a time, it's pretty easy to implement even on a simple MCU.
There's a couple of registers which need to be set:
https://wiki.osdev.org/ATA_PIO_Mode
and you can then just read/write the data from the parallel lines.
Here's a similar project using an ATmega32:
https://github.com/zwostein/idetrol
(i used this code, ported to ARM to check my hardware before I wrote the kerneldriver)
Software/virtualization is just helpless against such a threat model.