A minimal Windows-only Bluetooth A2DP control tool. Reconnect, reset, and (optionally) tune the codec settings of your Bluetooth audio devices.
Windows only. Built directly on Win32 Bluetooth APIs, MMDevice/WASAPI, and D3D11. Will not run under WINE and is not a candidate for cross-platform porting. On Linux, use BlueZ + PipeWire.
Grab the latest release zip — contains OpenA2DP.exe (GUI) and OpenA2DP-cli.exe (headless CLI). No installer, fully portable, no VC++ Redistributable required.
Bleeding-edge builds: Actions tab → latest run → Artifacts → OpenA2DP-windows-x64.
- Reconnect / Reset — the 99% workflow: fix a Bluetooth audio device that connected but isn't playing.
- Test Audio — one-click playback of a short Windows system sound (
%WINDIR%\Media\tada.wav) through the default audio endpoint to confirm your Bluetooth device is actually receiving audio. - Set as Default — one-click "make this BT device the system default audio endpoint for all roles (Console, Multimedia, Communications)". Uses the undocumented IPolicyConfig COM interface, same as SoundSwitch / EarTrumpet.
- Audio visualizer — live WASAPI-loopback driven, four modes (cycle by clicking anywhere on it): bars with peak-hold lines, scrolling spectrogram waterfall, oscilloscope, and CRT-style L/R vectorscope. Auto-recovers when the default audio endpoint changes (e.g. after a Reconnect).
- Opt-in tray notifications for auto-heal recovery, low battery (≤20%), HFP fallback (when Windows demotes a device to mono 8/16 kHz voice mode), and new GitHub releases. All gated by a master "Tray Notifications" checkbox in the top-right header. Default off.
- Auto-Heal — optional per-device watchdog for the Windows 11 connect-but-silent bug, with toast notifications.
- HFP Watchdog — optional periodic Handsfree-disable so Windows can't fall back to narrowband mono SCO.
- System tray — right-click menu for Reconnect / Disable HFP / Switch Stack / Show / Quit. Minimizes to tray.
- CLI mode —
OpenA2DP-cli.exefor Task Scheduler / scripts. - Approachable by default — first launch only shows the basics. The Advanced Mode checkbox in the top-right unlocks everything below.
- Live codec settings via Alternative A2DP Driver — read+write SBC/AAC parameters in the driver's per-device registry config (codec, sample rates, channel mode, block size, allocation, subbands, AAC bitrate, ABR). Bitpool slider clamped to the device's reported max with an admin-only override.
- A2DP stack control — start/stop A2DP services from the Windows SCM, or one-click switch the entire active stack (Microsoft ↔ AltA2DP). Needs admin. The "Use AltA2DP" button auto-disables (with a hint pointing at bluetoothgoodies.com) if the Alternative A2DP Driver isn't installed. When both stacks happen to be loaded simultaneously — common because Windows refuses to unload the BthA2dp kernel driver at runtime — the active-stack indicator correctly reports "Alternative A2DP Driver (Microsoft also loaded)" since AltA2DP's user-mode service intercepts WASAPI before BthA2dp can route audio.
- Status panel — sample rate, bit depth, channels, codec bitrate, audio latency, matched WASAPI endpoint, battery, and a Device Capabilities subsection from the driver's
Capability\<addr>registry subtree. - Bluetooth remote-event tracking — logs play/pause/next/prev/volume from your headphones via three observation surfaces (low-level keyboard hook, WASAPI default-endpoint volume polling, WinRT SMTC poller).
- Per-device manual service toggles for AudioSink and Handsfree.
- Connection history, activity counters, diagnostic log with severity filters and Copy-to-Clipboard.
See CHANGELOG.md for the full per-version inventory.
- Pair your Bluetooth audio device in Windows Settings.
- Run
OpenA2DP.exe, select the device on the left. - Click Reconnect if audio is broken, or Reset to cycle all audio services.
- Click Test Audio to play a short Windows sound and confirm playback is working.
- Optionally enable Auto-Heal (Advanced Mode → Watchdogs).
- Right-click the tray icon for quick actions without opening the window.
- To switch A2DP stacks, run as Administrator and use the Use Microsoft / Use AltA2DP buttons in Advanced Mode.
OpenA2DP-cli.exe --reconnect AA:BB:CC:DD:EE:FF
OpenA2DP-cli.exe --list-devices
OpenA2DP-cli.exe --switch-stack ms # needs admin
OpenA2DP-cli.exe --help
Full command list: --reconnect, --disable-hfp, --enable-a2dp, --list-devices, --list-stacks, --switch-stack, --start-service, --stop-service, --show-codec-config, --set-codec, --set-bitpool, --set-aac-bitrate, --probe-registry. Service-control commands need admin.
Requires Visual Studio 2022+ with Desktop development with C++ + Windows SDK + Git.
git clone --recurse-submodules https://github.com/birdybro/OpenA2DP.git
cd OpenA2DP
scripts\build.bat
Outputs build\OpenA2DP.exe (GUI, /SUBSYSTEM:WINDOWS) and build\OpenA2DP-cli.exe (CLI, /SUBSYSTEM:CONSOLE).
To cut a release: bump OA2DP_VER_* in both scripts/version_*.rc, add a CHANGELOG entry, then git tag v0.X.Y && git push --tags. CI builds, zips, and attaches to a new GitHub Release automatically.
Tests: tests\build_and_test.bat.
See CLAUDE.md for architecture notes.
- Codec detection on the Microsoft stack: Windows doesn't expose A2DP codec negotiation parameters in user mode, so without the Alternative A2DP Driver the status panel can only show what WASAPI measures.
- Battery: only shown if the device exposes
DEVPKEY_Bluetooth_Batteryto Windows. Many headphones don't. - Service control needs admin. Start/Stop and Switch Stack are greyed out otherwise.
- Tested stacks: Microsoft stock and Alternative A2DP Driver. Other third-party stacks should work but aren't tested.
GPL-3.0. See LICENSE.
Application icon by Ramy W. on Flaticon.
