Skip to content

Repository files navigation

DacVolumeFix App Icon

DacVolumeFix

Automatically unlocks full hardware volume on USB DACs connected to Android — no root.

License: GPL-3.0 Android 9.0+ APK Size: 2.2 MB GitHub release F-Droid In Review

Always Ready in the Background   Plug In. Done   Build For Audiophiles


The Problem

Most modern Android smartphones have dropped the 3.5mm headphone jack, requiring you to use a USB-C to 3.5mm headphone adapter or DAC. However, when you connect popular DACs like the Apple USB-C Headphone Adapter, your music often sounds surprisingly quiet and underpowered—even with your Android volume slider maxed out at 100%.

This happens because the DAC initializes its internal hardware volume chip to an aggressive low default (usually around -20 dB to -40 dB, or roughly 15% to 25% of potential output). While Windows, macOS, and iOS automatically set the DAC's internal hardware volume to full (0 dB unity gain), Android does not adjust the DAC's hardware volume registers. The Android volume slider only scales the digital audio before sending it out, leaving the physical hardware amplifier starved of power.

DacVolumeFix solves this automatically. Whenever your DAC is connected, DacVolumeFix sends standard USB Audio Class commands to set the hardware volume register to full 0 dB output—giving you the full volume, dynamic range, and driving power your headphones were designed for.


Supported DACs

DAC / Headphone Adapter Chipset / Model Status Output Level
Apple USB-C Adapter (US) Model A2049 (VID: 0x05AC, PID: 0x110A) Confirmed Working 1.0 Vrms (Full Output)
Apple USB-C Adapter (EU) Model A2155 (VID: 0x05AC, PID: 0x110B) Confirmed Working 0.5 Vrms (Full Output)
Conexant / Synaptics CX31993 (JCALLY JA04, Abigail, etc.) Expected Compatible Needs Community Test
Realtek ALC5686 / ALC4042 / ALC4050 Expected Compatible Needs Community Test
Cirrus Logic CS43131 / CS43198 (Moondrop, Tanchjim) Expected Compatible Needs Community Test
FiiO KA11, KA13, JA11 Expected Compatible Needs Community Test
ESS Sabre ES9280AC / ES9281AC / ES9038Q2M Expected Compatible Needs Community Test
Generic USB Audio Class 1/2 Any compliant UAC1 / UAC2 DAC with Feature Units Expected Compatible Needs Community Test

Have a DAC that is not confirmed yet? Report your test results here!


Why DacVolumeFix

  • Pure Kotlin — zero C++ native libraries, zero NDK, runs natively on any Android CPU
  • 2.2 MB — no native binary overhead from cross-compiled .so files
  • Invisible — windowless background operation, never interrupts what you're doing
  • One-time permissiondevice_filter.xml pre-grants USB access, and RECORD_AUDIO permission suppresses Android's repeated USB audio capture warning dialog
  • Zero idle battery — completely dormant when no DAC is connected, event-driven only
  • Universal — unlocks volume system-wide for every app, not tied to any specific music player
  • Open source — GPL-3.0, full source code available, no telemetry, no internet permission

Installation & Setup

Download APK

Download the signed release APK from GitHub Releases.

Setup

  1. Install and launch DacVolumeFix.
  2. Grant requested permissions:
    • Microphone / Audio: Required to suppress Android's repeated USB audio capture warning dialog on DAC connection (many DACs expose an ADC/microphone interface). DacVolumeFix never records or stores audio.
    • Notifications (Android 13+): Displays the background volume unlock status.
  3. Connect your USB DAC or 3.5mm adapter.
  4. The app automatically detects your DAC and unlocks the hardware volume.
  5. If "Auto-apply on connect" is enabled, future connections will automatically unlock in the background without needing to open the app.

How It Works

  1. Background Trampoline: When your DAC is inserted, Android triggers an invisible, windowless dispatcher that launches without interrupting whatever you are doing.
  2. Pure Framework Control Transfers: DacVolumeFix is written entirely in pure Kotlin using Android's native UsbDeviceConnection.controlTransfer(), avoiding native C++ dependencies.
  3. Automated Hardware Programming: DacVolumeFix communicates with the DAC's AudioControl interface and Feature Unit, setting the digital attenuation register to 0 dB (or your custom target level).
  4. Self-Terminating Service: The unlock completes quickly, displays a confirmation notification in your status bar, and shuts down immediately. It consumes 0.0% battery while idle.

📖 Want the deep technical breakdown?
Read our full Technical Documentation & Architecture Specification covering kernel devio internals, UAC 8.8 fixed-point decibel conversion, descriptor parsing, and USBDEVFS_RESET.


Compatibility

Compatible with Android 9.0 through Android 15 (API 28+):

  • Android 15 (Vanilla Ice Cream — API 35)
  • Android 14 (Upside Down Cake — API 34)
  • Android 13 (Tiramisu — API 33)
  • Android 12 / 12L (Snow Cone — API 31 / 32)
  • Android 11 (Red Velvet Cake — API 30)
  • Android 10 (Quince Tart — API 29)
  • Android 9.0 (Pie — API 28)

Building from Source

Prerequisites

  • Android Studio Ladybug (or newer)
  • JDK 17 or higher (tested with JDK 17, 21, and 25)
  • Android SDK (compileSdk 36, minSdk 28, targetSdk 35)

Build Steps

  1. Clone the repository:
    git clone https://github.com/DeveshTone/DacVolumeFix.git
    cd DacVolumeFix
  2. Build the signed release APK using Gradle:
    ./gradlew assembleRelease
  3. The compiled APK will be generated at: app/build/outputs/apk/release/app-release.apk

Permissions & Privacy

Permission Type Reason
android.permission.RECORD_AUDIO Runtime Required to suppress Android's repeated USB audio capture warning dialog on DAC connection (caused by DACs exposing an ADC/microphone interface). DacVolumeFix never records or stores audio.
android.permission.POST_NOTIFICATIONS Runtime Displays a non-intrusive status bar notification when your DAC is unlocked on Android 13+.
android.permission.FOREGROUND_SERVICE Normal Allows the transient unlock service to run reliably across Android versions.
android.permission.FOREGROUND_SERVICE_CONNECTED_DEVICE Normal Required on Android 14+ for foreground services interacting with external USB hardware.

DacVolumeFix is 100% offline — zero internet permission (android.permission.INTERNET), zero telemetry, and zero tracking.


Contributing

Pull requests and hardware test reports are welcome!

  • Report a new DAC: If you have tested a DAC or adapter, please submit a DAC Compatibility Report with your device's USB Vendor ID (VID) and Product ID (PID).
  • Bug Reports & Feature Requests: Please open an issue using the Issue Templates.

Acknowledgements


License

This project is licensed under the GNU General Public License v3.0 — see the LICENSE file for details.

About

Automatically unlocks full hardware volume on USB DACs connected to Android — no root.

Topics

Resources

Contributing

Stars

1 star

Watchers

0 watching

Forks

Releases

Contributors

Languages