[PR #1776] Audio equalizer for Android #1695

Open
opened 2026-04-25 00:00:40 +02:00 by adam · 0 comments
Owner

📋 Pull Request Information

Original PR: https://github.com/advplyr/audiobookshelf-app/pull/1776
Author: @KiwiHour
Created: 1/8/2026
Status: 🔄 Open

Base: masterHead: audio-equalizer


📝 Commits (9)

  • 3028ae6 PoC equalizer done
  • 3a6e05b frontend equalizer done, still needs code to emit changes to backend
  • f475dc8 moved equalizer to audio player menu
  • 2db6555 capacitor now talks to frontend and supplies available equalizer frequencies, equalizer settings are also saved now
  • 5422aad functionality complete, changes to the frontend now correctly apply to the native equalizer through capacitor
  • 2317584 added debouncing to equalizer changes, removes static buzzing sound
  • 74a431e adjusted equalizer front end to match up with abs colours more
  • eb850a1 moved android section of equalizer logic into its own class/manager
  • a2adbfd moved equalizer label to strings folder for translation, cleaned up whitespaces

📊 Changes

9 files changed (+381 additions, -9 deletions)

View changed files

android/app/src/main/java/com/audiobookshelf/app/data/EqualizerBand.kt (+6 -0)
android/app/src/main/java/com/audiobookshelf/app/managers/EqualizerManager.kt (+91 -0)
📝 android/app/src/main/java/com/audiobookshelf/app/player/PlayerListener.kt (+5 -0)
📝 android/app/src/main/java/com/audiobookshelf/app/player/PlayerNotificationService.kt (+8 -2)
📝 android/app/src/main/java/com/audiobookshelf/app/plugins/AbsAudioPlayer.kt (+27 -0)
📝 components/app/AudioPlayer.vue (+56 -7)
📝 components/app/AudioPlayerContainer.vue (+6 -0)
components/modals/EqualizerModal.vue (+181 -0)
📝 strings/en-us.json (+1 -0)

📄 Description

Brief summary

This PR fully implements an equalizer to fix poor quality audio

Which issue is fixed?

Solves #407 partly, only for android
Helps towards #195 (maxing out the equalizer can act as a volume boost)

Pull Request Type

This is both a frontend and backend change.
Only affects Android

In-depth Description

Since available equalizer frequencies are device dependent, the frontend makes a plugin call to the backend asking for available frequencies (currently this is only implemented for android). The user can then adjust the frequencies between -15dB and 15dB, the adjustment also has a "Link bands" (like in VLC) for a more intuitive adjustment.
Changes made on the frontend are saved locally and sent to the backend, where it decides how to apply the new equalizer settings.

I've done my best to follow the existing approach and conventions, and the implementation is done in such a way that adding iOS support should require minimal extra effort (just need to code the iOS version of the android code, no extra frontend changes [except adding the equalizer menu entry back for iOS, as it's currently blocked])

Some possible improvement (which is why I've set this PR as a draft):

  • The equalizer sliders don't use the existing ui-range-input component, as it had issues with dragging for input (could only tap to change it, not drag)
  • The equalizer slider cursor/thumb isn't white, when it should be (to match the other sliders, like for the progress bars on the player)

Some thoughts for future work. In the equalizer enhancement request, having item specific equalizer settings was asked for. I could not find a clean way to implement this without jamming my code into the metadata or database. So I think "item specific settings" is a separate feature in and of itself, but perhaps just adding information to the metadata or DB is a fine way. Let me know

Please let me know about any other improvements (naming changes, moving code, etc) that you feel is better. I'm still very new to this code base.

How have you tested this?

I've tested it on the android studio emulated device and also my own phone. Android's inbuilt equalizer is device specific, so I would love if some people could test this on their own devices and confirm it works as intended.

Screenshots

image

Video showing equalizer in use, showing that the settings save between audio sessions
https://github.com/user-attachments/assets/2387960e-ed50-492f-8e38-a35192ab54b5


🔄 This issue represents a GitHub Pull Request. It cannot be merged through Gitea due to API limitations.

## 📋 Pull Request Information **Original PR:** https://github.com/advplyr/audiobookshelf-app/pull/1776 **Author:** [@KiwiHour](https://github.com/KiwiHour) **Created:** 1/8/2026 **Status:** 🔄 Open **Base:** `master` ← **Head:** `audio-equalizer` --- ### 📝 Commits (9) - [`3028ae6`](https://github.com/advplyr/audiobookshelf-app/commit/3028ae6948adaddc51ad5d50723763f4821645f9) PoC equalizer done - [`3a6e05b`](https://github.com/advplyr/audiobookshelf-app/commit/3a6e05bb5f16865cb6707b3e6507109b3e52daa7) frontend equalizer done, still needs code to emit changes to backend - [`f475dc8`](https://github.com/advplyr/audiobookshelf-app/commit/f475dc8049130dace9135f1dc24804ba1613d4a0) moved equalizer to audio player menu - [`2db6555`](https://github.com/advplyr/audiobookshelf-app/commit/2db6555f58222a06e9e328e77079f3f3f6feccc2) capacitor now talks to frontend and supplies available equalizer frequencies, equalizer settings are also saved now - [`5422aad`](https://github.com/advplyr/audiobookshelf-app/commit/5422aad86c44e5b768b82376e0d9dcc170917ae7) functionality complete, changes to the frontend now correctly apply to the native equalizer through capacitor - [`2317584`](https://github.com/advplyr/audiobookshelf-app/commit/231758433bc2ee885d777e2402d74fe64547acef) added debouncing to equalizer changes, removes static buzzing sound - [`74a431e`](https://github.com/advplyr/audiobookshelf-app/commit/74a431efc9476d89e9029aae141fc470399aaa9a) adjusted equalizer front end to match up with abs colours more - [`eb850a1`](https://github.com/advplyr/audiobookshelf-app/commit/eb850a1588f4bfcd42ecacba0d9778b2c01cdcd8) moved android section of equalizer logic into its own class/manager - [`a2adbfd`](https://github.com/advplyr/audiobookshelf-app/commit/a2adbfd4e46e893884824dee706128f55e688f73) moved equalizer label to strings folder for translation, cleaned up whitespaces ### 📊 Changes **9 files changed** (+381 additions, -9 deletions) <details> <summary>View changed files</summary> ➕ `android/app/src/main/java/com/audiobookshelf/app/data/EqualizerBand.kt` (+6 -0) ➕ `android/app/src/main/java/com/audiobookshelf/app/managers/EqualizerManager.kt` (+91 -0) 📝 `android/app/src/main/java/com/audiobookshelf/app/player/PlayerListener.kt` (+5 -0) 📝 `android/app/src/main/java/com/audiobookshelf/app/player/PlayerNotificationService.kt` (+8 -2) 📝 `android/app/src/main/java/com/audiobookshelf/app/plugins/AbsAudioPlayer.kt` (+27 -0) 📝 `components/app/AudioPlayer.vue` (+56 -7) 📝 `components/app/AudioPlayerContainer.vue` (+6 -0) ➕ `components/modals/EqualizerModal.vue` (+181 -0) 📝 `strings/en-us.json` (+1 -0) </details> ### 📄 Description ## Brief summary This PR fully implements an equalizer to fix poor quality audio ## Which issue is fixed? Solves #407 partly, only for android Helps towards #195 (maxing out the equalizer can act as a volume boost) ## Pull Request Type This is both a frontend and backend change. Only affects Android ## In-depth Description Since available equalizer frequencies are device dependent, the frontend makes a plugin call to the backend asking for available frequencies (currently this is only implemented for android). The user can then adjust the frequencies between -15dB and 15dB, the adjustment also has a "Link bands" (like in VLC) for a more intuitive adjustment. Changes made on the frontend are saved locally and sent to the backend, where it decides how to apply the new equalizer settings. I've done my best to follow the existing approach and conventions, and the implementation is done in such a way that adding iOS support should require minimal extra effort (just need to code the iOS version of the android code, no extra frontend changes [except adding the equalizer menu entry back for iOS, as it's currently blocked]) Some possible improvement (which is why I've set this PR as a draft): - The equalizer sliders don't use the existing `ui-range-input` component, as it had issues with dragging for input (could only tap to change it, not drag) - The equalizer slider cursor/thumb isn't white, when it should be (to match the other sliders, like for the progress bars on the player) Some thoughts for future work. In the equalizer enhancement request, having item specific equalizer settings was asked for. I could not find a clean way to implement this without jamming my code into the metadata or database. So I think "item specific settings" is a separate feature in and of itself, but perhaps just adding information to the metadata or DB is a fine way. Let me know Please let me know about any other improvements (naming changes, moving code, etc) that you feel is better. I'm still very new to this code base. ## How have you tested this? I've tested it on the android studio emulated device and also my own phone. Android's inbuilt equalizer is device specific, so I would love if some people could test this on their own devices and confirm it works as intended. ## Screenshots <img width="418" height="849" alt="image" src="https://github.com/user-attachments/assets/30ce9a72-8e38-4b60-b665-2bab7760442a" /> Video showing equalizer in use, showing that the settings save between audio sessions https://github.com/user-attachments/assets/2387960e-ed50-492f-8e38-a35192ab54b5 --- <sub>🔄 This issue represents a GitHub Pull Request. It cannot be merged through Gitea due to API limitations.</sub>
adam added the pull-request label 2026-04-25 00:00:40 +02:00
Sign in to join this conversation.
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: starred/audiobookshelf-app#1695