Releasev0.5.3

NeoMusic 0.5.3: Fixing the EQ Properly

2026年4月11日

A smaller update focused on audio reliability, playback state, and UI polish.

NeoMusic 0.5.3 is not the flashiest update, but it fixes something that absolutely needed to be fixed: the EQ.

The short changelog version is:

  • Bass, treble, and EQ now work properly on devices where they previously did not
  • Playback info no longer disappears after restarting the app
  • Translations and UI details got another cleanup pass

The longer version is that I had to rethink how the app handles audio effects.

The Problem With the Old EQ

The first EQ implementation used Android's AudioEffect APIs.

On paper, that sounds reasonable. Android has audio effect APIs, I need audio effects, so surely this should be fine. Right?

Not really.

The problem is that device-level audio effects can behave differently depending on the phone, Android version, OEM audio stack, and audio session behavior. Some devices handled the EQ fine. Some did not. That is the worst kind of bug because it makes the feature look finished on one device and completely fake on another.

And for NeoMusic, that is a big problem. The EQ panel is not hidden in some boring settings page. It is part of the whole retro hardware vibe. Bass and treble knobs should actually affect the audio. If they do not, the app just looks like it is pretending.

So I stopped relying on the platform EQ path.

Moving the EQ Into the Player Pipeline

The fix was to replace the old AudioEffect approach with a custom ExoPlayer AudioProcessor.

Now NeoMusic processes raw PCM audio directly inside the playback pipeline. The custom EqAudioProcessor applies:

  • Bass low-shelf at 200 Hz
  • Treble high-shelf at 6 kHz
  • Five peaking EQ bands at 60, 230, 910, 3600, and 14000 Hz

The filters use the Audio EQ Cookbook formulas, and the audio thread reads a snapshot of the current coefficients without locking. That part matters because the UI can update knobs and bands while playback continues.

The other important part: when the EQ is off, it is a complete passthrough. No hidden processing. No "off, but still touching the signal" behavior. Raw PCM bytes go through unchanged.

That means if you want to use Dolby Atmos, a device EQ, or some other OEM audio effect, NeoMusic does not get in the way when its own EQ panel is disabled.

Independent Treble and Better Toggling

While I was in there, I also cleaned up treble handling and automatic EQ toggling.

Bass and treble are part of NeoMusic's own processing now, so they only apply when the EQ panel is on. That makes the behavior easier to understand. If the panel is off, NeoMusic is not shaping the sound. If the panel is on, the knobs and bands are active.

This is the kind of thing that probably should not be exciting, but after dealing with platform audio quirks, predictable behavior feels extremely exciting.

Playback Info After Restart

The other user-facing fix is playback info after restarting the app.

NeoMusic's LCD is basically the face of the app. It shows the current track, artist, album art, lyric state, format details, and all the little visual effects that make the player feel alive. So if you restart the app and that information goes missing, it feels broken even if playback itself is still technically fine.

0.5.3 fixes the missing playback info issue, including cases around removed recents and restored state. This was not as exciting as rewriting the EQ, but it is just as important for daily use. Music players get backgrounded, reopened, rotated, killed, restored, and generally abused by Android all day. The UI needs to survive that.

AndroidReleaseAudioEQ