USB Audio Bridge turns a rooted Android device into a USB audio gadget sound card for any USB host (PC, phone, tablet). It exposes a UAC2 gadget by default (with optional UAC1 compatibility mode) via ConfigFS, captures audio from the host, and plays it on the phone. It can also send the phone microphone back to the host.
No additional drivers or companion apps are required on the host.
- Android 8.0+ device running on any of the following architectures:
- armeabi-v7a
- arm64-v8a
- x86
- x86_64
- Rooted Android device using one of the supported root solutions:
- Magisk
- KernelSU
- APatch (untested)
- Kernel with USB audio gadget support:
- For UAC2 mode:
CONFIG_USB_CONFIGFS_F_UAC2=y- Available in Linux since 3.18, but commonly enabled by default on Android only from GKI 2.0+ (Android 12 / kernel 5.10+)
- For UAC1 mode:
CONFIG_USB_CONFIGFS_F_UAC1=y- Available since older kernels, but usually not enabled by default (including GKI kernels)
- May be present on some OEM/custom kernels
- For UAC2 mode:
- Configures a USB Gadget (UAC2 by default, optional UAC1) using ConfigFS.
- Captures audio via TinyALSA from the gadget PCM device.
- Bridges to the selected output engine (AAudio/OpenSL/AudioTrack).
- Provides separate mute controls for speaker and mic at the native layer.
- UAC2 gadget emulation (default, recommended)
- Optional UAC1 gadget mode for older host compatibility
- Speaker and mic bridging at the same time
- Multiple audio engines: AAudio, OpenSL ES, AudioTrack
- Configurable latency presets and advanced buffer controls
- Foreground service with media button support
- Optional ADB preservation via composite gadget mode (may not work on all devices)
- Hardware workarounds for known controller quirks (e.g., some MediaTek UDCs)
- "Keep screen on" feature with optional screensaver
- Mute / unmute with headset media button
- Interactive notification
- Ensure root access is granted and your kernel supports the selected USB audio class mode (UAC2 or UAC1).
- Open the app and enable the USB gadget.
- Connect the device to the host via USB.
- Start audio capture to begin the bridge.
- Use the speaker and mic controls to mute/unmute as needed.
Releases are not published yet. For now, CI builds are available here:
Alternative (raw GitHub Actions artifacts):
Note: CI artifacts are debug-only and may be unoptimized.
cd UsbAudioBridge
./gradlew assembleDebugThe debug APK will be at app/build/outputs/apk/debug/app-debug.apk.
./gradlew assembleReleaseThe release APK will be at app/build/outputs/apk/release/app-release-unsigned.apk.
- Some devices may have audio crackling under load. Current evidence points to it being caused by a mix of CPU load and USB bus contention. No fix is known.
- On older kernels (roughly < 5.4), Windows may detect the gadget as an "Internal AUX Port" and disable/mute it by default. If there is no audio, open the Windows Sound Control Panel and enable the device.
- If the host does not detect audio, verify that the gadget is enabled and that the correct UDC controller is selected.
- Some vendor USB HALs can interfere with gadget mode; the app attempts to stop conflicting services when needed.
- 192kHz sample rate may not work on all devices. Some platforms (e.g., Samsung Exynos 1280) fail to bind the gadget at this rate while lower rates work fine. This is a likely kernel driver limitation.
GNU GPLv3




