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.
🔄 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>
Blocking a user prevents them from interacting with repositories, such as opening or commenting on pull requests or issues. Learn more about blocking a user.
📋 Pull Request Information
Original PR: https://github.com/advplyr/audiobookshelf-app/pull/1776
Author: @KiwiHour
Created: 1/8/2026
Status: 🔄 Open
Base:
master← Head:audio-equalizer📝 Commits (9)
3028ae6PoC equalizer done3a6e05bfrontend equalizer done, still needs code to emit changes to backendf475dc8moved equalizer to audio player menu2db6555capacitor now talks to frontend and supplies available equalizer frequencies, equalizer settings are also saved now5422aadfunctionality complete, changes to the frontend now correctly apply to the native equalizer through capacitor2317584added debouncing to equalizer changes, removes static buzzing sound74a431eadjusted equalizer front end to match up with abs colours moreeb850a1moved android section of equalizer logic into its own class/managera2adbfdmoved 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):
ui-range-inputcomponent, as it had issues with dragging for input (could only tap to change it, not drag)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
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.