Image 1 — I reverse-engineered my DUSK-SP cable and built my own EQ app for it... turns out the "1 dB steps" limit isn't real, and I got a working preamp out of pure filter maths
Image 2 — I reverse-engineered my DUSK-SP cable and built my own EQ app for it... turns out the "1 dB steps" limit isn't real, and I got a working preamp out of pure filter maths

I reverse-engineered my DUSK-SP cable and built my own EQ app for it... turns out the "1 dB steps" limit isn't real, and I got a working preamp out of pure filter maths

I was asked to not tell u/crinacle about the preamp... So here I am.

TL;DR: these little Moondrop DSP USB-C cables (DUSK / MAY / FreeDSP) are WAY more capable than the stock app lets on. I built my own app that talks to the cable directly, does proper fractional-dB EQ, and adds a preamp the hardware doesn't officially have.

It's now open source. Code and Windows download here: https://github.com/EffectiveEquivalent/FreeDSP-Studio (grab the exe from Releases). MIT licensed, built via GitHub Actions. Windows will moan about an unknown publisher because the exe isn't code-signed yet.... signed builds are coming. More info, Run anyway.

A few things I found that I reckon are genuinely cool:

The EQ profiles live on the cable, not the app

The DSP chip inside the cable has its own memory. It holds a writable custom EQ bank plus the firmware preset voicings (the DUSK ships with Crinacle's tunings, the MAY has Moondrop's own Standard / Bass Head / Reference etc). Whatever profile is active gets applied by the cable itself, so your EQ follows the cable onto any phone or laptop with ZERO software running. My app just reads and writes that on-cable memory over USB HID.

The "integer dB only" thing is a UI illusion

Read a band back and the gain comes out as a whole number, so you ask for 2.3 dB and the stock app shows 2. I assumed that meant the hardware was locked to 1 dB steps. Nope. Each band actually stores two totally separate things:

  • a little metadata record (frequency, Q, filter type, and a gain value stored as a 24-bit integer in whole dB), and
  • the actual biquad filter coefficients that do the real DSP.

The metadata gain is basically just a label for the app's display. The sound is determined ENTIRELY by the coefficients.

How I proved it: I sent a deliberately mismatched write, metadata gain = 0 dB but coefficients calculated for a -12 dB low shelf. If the cable trusted the integer, nothing should happen. Instead the bass completely vanished. So the coefficients are what actually matter and the integer is just cosmetic. Which means fractional gain works perfectly.... I compute the biquad from the true value (RBJ cookbook), send those coefficients, and the cable plays exactly 2.3 dB. It always could, the app just never let you.

(Nerdy bit: it stores a separate coefficient set per sample rate, 44.1 / 48 / 96 / 192 / 384 kHz, so that's 5 biquads per band, as fixed-point numbers scaled by 2^22.)

The preamp is the bit I'm most chuffed with

The cable has no master volume or preamp control at all. But a preamp is really just a flat level shift at every frequency, and here's the trick:

A biquad's response is basically numerator over denominator. If you multiply the numerator (b0, b1, b2) by some constant k, you scale that filter's output by k at every frequency, which is a perfectly flat gain of 20*log10(k) dB. And because the 9 bands are cascaded (their responses multiply together), applying that flat k to just ONE band shifts the entire combined EQ curve up or down by that many dB without changing its shape at all.

So I set k = 10^(preamp/20) and bake it into band 1's coefficients. Free preamp. No extra band used, no firmware feature needed, just maths riding on a filter that's already there. I use it to pull the whole curve down for headroom so big boosts don't clip.

What it turned into

A desktop app with a live frequency response graph, EQ points you drag straight on the curve, squig.link / AutoEQ import, on-cable profile switching, save/recall, and clip protection that won't let you write a distorting EQ without sorting the headroom first.

Reverse-engineered by watching the USB traffic and reimplementing the wire protocol myself, for my own hardware. Honestly the coolest project I've done in ages and it works INCREDIBLY.

And yeah, I built the whole thing with Claude (Claude Code). Took a good few hours.... haha

u/EffectiveEquivalent — 8 days ago
▲ 148 r/oratory1990+2 crossposts

I reverse-engineered my DUSK-SP cable and built my own EQ app for it... turns out the "1 dB steps" limit isn't real, and I got a working preamp out of pure filter maths

TL;DR: these little Moondrop DSP USB-C cables (DUSK / MAY / FreeDSP) are WAY more capable than the stock app lets on. I built my own app that talks to the cable directly, does proper fractional-dB EQ, and adds a preamp the hardware doesn't officially have.

UPDATE: it's now open source. Code and Windows download here: https://github.com/EffectiveEquivalent/FreeDSP-Studio (grab the exe from Releases). MIT licensed, built via GitHub Actions. Windows will moan about an unknown publisher because the exe isn't code-signed yet.... signed builds are coming. More info, Run anyway.

A few things I found that I reckon are genuinely cool:

The EQ profiles live on the cable, not the app

The DSP chip inside the cable has its own memory. It holds a writable custom EQ bank plus the firmware preset voicings (the DUSK ships with Crinacle's tunings, the MAY has Moondrop's own Standard / Bass Head / Reference etc). Whatever profile is active gets applied by the cable itself, so your EQ follows the cable onto any phone or laptop with ZERO software running. My app just reads and writes that on-cable memory over USB HID.

The "integer dB only" thing is a UI illusion

Read a band back and the gain comes out as a whole number, so you ask for 2.3 dB and the stock app shows 2. I assumed that meant the hardware was locked to 1 dB steps. Nope. Each band actually stores two totally separate things:

  • a little metadata record (frequency, Q, filter type, and a gain value stored as a 24-bit integer in whole dB), and
  • the actual biquad filter coefficients that do the real DSP.

The metadata gain is basically just a label for the app's display. The sound is determined ENTIRELY by the coefficients.

How I proved it: I sent a deliberately mismatched write, metadata gain = 0 dB but coefficients calculated for a -12 dB low shelf. If the cable trusted the integer, nothing should happen. Instead the bass completely vanished. So the coefficients are what actually matter and the integer is just cosmetic. Which means fractional gain works perfectly.... I compute the biquad from the true value (RBJ cookbook), send those coefficients, and the cable plays exactly 2.3 dB. It always could, the app just never let you.

(Nerdy bit: it stores a separate coefficient set per sample rate, 44.1 / 48 / 96 / 192 / 384 kHz, so that's 5 biquads per band, as fixed-point numbers scaled by 2^22.)

The preamp is the bit I'm most chuffed with

The cable has no master volume or preamp control at all. But a preamp is really just a flat level shift at every frequency, and here's the trick:

A biquad's response is basically numerator over denominator. If you multiply the numerator (b0, b1, b2) by some constant k, you scale that filter's output by k at every frequency, which is a perfectly flat gain of 20*log10(k) dB. And because the 9 bands are cascaded (their responses multiply together), applying that flat k to just ONE band shifts the entire combined EQ curve up or down by that many dB without changing its shape at all.

So I set k = 10^(preamp/20) and bake it into band 1's coefficients. Free preamp. No extra band used, no firmware feature needed, just maths riding on a filter that's already there. I use it to pull the whole curve down for headroom so big boosts don't clip.

What it turned into

A desktop app with a live frequency response graph, EQ points you drag straight on the curve, squig.link / AutoEQ import, on-cable profile switching, save/recall, and clip protection that won't let you write a distorting EQ without sorting the headroom first.

Reverse-engineered by watching the USB traffic and reimplementing the wire protocol myself, for my own hardware. Honestly the coolest project I've done in ages and it works INCREDIBLY.

And yeah, I built the whole thing with Claude (Claude Code). Took a good few hours.... haha

u/EffectiveEquivalent — 9 days ago

DUSK DSP tool for windows/mac

Hi,

This afternoon I've been working on a windows based tool for changing the presets and EQ on the Dusk DSP cable. I can read the EQ and change between the presets - this all works so far.

I assume this would work with the FreeDSP cable in general, I can try with May at some point.

If there's enough interest, I'll make the code available, or develop it further with a nice UI - maybe even make a mac version.

The aim is to have a graphical UI for setting up the EQ, maybe even have it import PEQ files from squig.link?

Thoughts?

reddit.com
u/EffectiveEquivalent — 10 days ago
▲ 38 r/iems

iPod 5th with Aqua!!

I recently found my old iPod. Replaced the broken screen, new battery and put Rockbox on there. FLAC files of awesome music and the blessing of high quality audio. Having the time of my life. This is what it’s all about.

It’s been super fun reviving it, and it sounds soo good.

u/EffectiveEquivalent — 15 days ago
▲ 64 r/MoondropLab+1 crossposts

Blessing 3 Aqua

I’ve just managed to pick up a pair. Such a beautiful iem.

Not had too much time with them yet, but they are indeed a blessing 3 with a few db bass lift. Almost like a vocal forward dusk.

u/EffectiveEquivalent — 2 months ago
▲ 0 r/iems

BQEYZ Winter II

Just acquired a pair of these a couple of days ago and I’m finding them unreal… I feel I’m missing something. Why aren’t these things ever mentioned? There’s apparently hardly anyone that ever talks about them yet they’re extremely competent IEMs.

If you have a pair, what do you think? Why did you get them? What do you listen to?

I’ve got a good selection of IEMs, blessing 3, orchestra 2, top pro, monarch mk4, reference. The winter have taken over my life this week and im all for it. Why are they so ignored?!

reddit.com
u/EffectiveEquivalent — 3 months ago

I’ve had my Bathys MG for about 9 months and I’ve always used the standard eq. I love the Focal sound and for some reason don’t want to change the intended FR of such an expensive set.

Today I tried the dynamic eq along with a touch of of the mimi profile, as all the reviews seem to point towards and what a revelation. When I tried it before, I’ve gone from the standard to dynamic and it felt a little flat. Today I went straight in.

I always found the mid bass a bit bloomy but got used to it during the session. This is completely fixed with the dynamic present. Everything else seems intact. Bass guitars have so much texture and attack now.

Just a short one from me, if anyone has these and hasn’t tried it, you must. Psychoacoustics are a menace.

reddit.com
u/EffectiveEquivalent — 4 months ago