Version 1.0.0.79 · stable

Bluetooth A2DP for Windows
that stops cutting out

CustomA2DP replaces the stock btha2dp stack with a transport of its own: the SBC codec runs in the kernel, the signaling and media channels stay warm, and switching between headsets is instant — no dead air, no stuttering, no click at the end of playback.

  • Windows 10 1709+ / Windows 11
  • x64
  • free
  • single EXE
customa2dp_status.txt stream active
target
Q30 · e8eecce37ad5
codec
SBC · 48 000 Hz
bitpool
72
measured
471 kbps
sent_frames
206 752
send_fail
0
0send failures in control runs
10DSP equalizer bands with a limiter
48kHzSBC stream rate, no resampling
~375SBC packets per second from the pump

Why

What the stock A2DP driver gets wrong

The Microsoft driver lives in user mode and often outplays itself: the channel is torn down on every switch, playback starts with a delay, and the stream ends with a click.

✕ Stock btha2dp

  • Switching a headset means dropping and re-establishing the ACL link — seconds of silence
  • The stream runs in a user-mode process and dies with it
  • An audible click at stream start and teardown from the abrupt PCM cut
  • No equalizer and no diagnostics: no way to tell where it stalled
  • No way to install your own endpoint without fighting the stack

✓ CustomA2DP

  • Warm channel: the AVDTP session is kept, so switching is instant
  • The whole SBC path lives in the kernel — from WASAPI to L2CAP, no user-mode hop
  • A short fade-out before teardown: silence instead of a click
  • 10-band EQ with a headroom limiter, applied on the fly
  • Live status and a log of every AVDTP exchange

Features

Everything inside the driver

Not a wrapper around someone else's stack: a self-contained audio path. The WaveRT miniport, topology, AVDTP transport and the SBC codec live in one .sys and talk to the Bluetooth radio directly.

SBC in the kernel

Codec and AVDTP transport run inside the driver. No dependency on BluetoothUserService, so the stream never dies just because that service got busy.

Warm channel

Signaling and media channels stay open through idle time, so the headset is always ready and playback starts without another AVDTP handshake.

10-band EQ

A DSP equalizer with a headroom limiter: you can push the bass without harsh clipping. The curve applies to the running stream without a restart.

Instant switching

In auto mode the target follows the render sink. Switch the device in the tray and the stream moves to the other headset — no silence, no stale phantom endpoints.

Fade-out

Before tearing the stream down the driver catches up with silence in short SBC packets, so the DAC never clicks at the boundary.

Live diagnostics

Stream status, an L2CAP/AVDTP/SBC log and device start records land in %ProgramData%\CustomA2DP. Every byte of the AVDTP exchange is visible with timestamps.

Quality controls

SBC bitpool, idle timeout, pump mode, warm connect and PCM input capture are all configurable from the configurator or the registry.

Clean rollback

The uninstaller hands A2DP nodes back to the stock driver and cleans DriverStore. HFP, AVRCP and COM ports keep running on Microsoft drivers the whole time.

How it works

The path of a single audio frame

Sound from any application goes through the standard WASAPI interface, so every player, browser, game and streaming service works without reconfiguration.

Step 1 Application browser, player, game
Step 2 WASAPI the standard Windows audio stack
Step 3 CustomA2DP.sys AudioPipe · WaveRT · EqDsp · SbcStream
Step 4 AVDTP own transport over L2CAP, PSM 0x0019
Step 5 Headset SBC packets over the air

Source modules

  • AudioPipe — PCM intake from the miniport, ring buffer, statistics, overrun control
  • MiniportWaveRT — WaveRT ports and streams, PAUSE/ACQUIRE/STOP transitions
  • MiniportTopology — miniport topology for Windows sample rate conversion
  • SbcStream — SBC encoder, packet pacing at 375 fps, idle fade-out
  • EqDsp — 10-band equalizer and headroom limiter
  • Avdtp — AVDTP signaling: discover, get capabilities, set configuration, open, start
  • BtTransport — L2CAP, radio and target selection, warm channel, reconnection
  • CustomA2DP — DeviceSetup, registry parameters, live status and logging

Configurator

Settings without a reboot

A native application with no .NET runtime. It picks the active A2DP endpoint, makes it default for console and multimedia, warms the channel with a real WASAPI stream, and can power-cycle the radio to force a reconnection.

  • Version 1.8.1, dark interface, system tray
  • Equalizer and bitpool, applied to the live stream
  • Reconnect button: sound appears in an already open browser immediately
  • Shows the installed driver version straight from the INF
CustomA2DP Config 1.8.1
Driver1.0.0.79
DeviceSoundcore Life Q30
Streamactive · 359 kbps
Reconnect Set as default

Requirements

What you need before installing

The driver carries a test certificate, so Secure Boot must be disabled. The installer takes care of it and asks for a single reboot.

Supported

  • Windows 10 1709 (build 16299) and newer
  • All Windows 11 releases
  • 64-bit systems only (x64)
  • Secure Boot disabled
  • Administrator rights

Not supported

  • Windows 7, 8, 8.1
  • 32-bit editions of Windows
  • Windows on ARM (x64 emulation)
  • LDAC, aptX, AAC codecs — SBC only
  • Secure Boot enabled

Before you install

  • Turn Secure Boot off in UEFI
  • Reboot and make sure your headset is paired
  • Run the installer and approve the UAC prompt
  • Reboot once — that is all

Install

Five steps

  1. 1

    Download the installer

    A single CustomA2DP-Install.exe file. There is nothing to unpack by hand.

  2. 2

    Run it as administrator

    Approve the UAC prompt. The installer deploys the files, trusts both certificates, enables test signing and installs the package via pnputil.

  3. 3

    Reboot

    A "reboot required" message is expected. Do not run the installer again: the driver loads on its own.

  4. 4

    Check the binding

    The headset A2DP node should move to CustomA2DP. If it does not: Device Manager → Bluetooth → Update driver → Browse → %ProgramFiles%\CustomA2DP\package\customa2dp.inf.

  5. 5

    Run the configurator

    Open "CustomA2DP Config" from the Start menu, pick the device, enable the EQ and verify with check.cmd.

FAQ

Common questions

Do I have to disable Secure Boot?

Yes, it is mandatory. The driver is signed with a test certificate rather than a Microsoft one, so an active Secure Boot will refuse to load it. The installer turns on test signing with bcdedit /set testsigning on and asks for one reboot. There is no way around this: the boot loader will not load the package while Secure Boot is enforced.

Will it replace the whole Windows Bluetooth stack?

No. Only A2DP nodes are re-bound (MEDIA class, 0000110B). Hands-Free, AVRCP and COM port nodes keep running on the stock Microsoft drivers, so the headset microphone and playback controls stay intact.

How do I get the stock driver back?

Run uninstall.cmd from %ProgramFiles%\CustomA2DP, or remove the app through Settings → Apps. The uninstaller drops the packages from DriverStore and removes the certificates, shortcuts and program folder. Test signing stays on and can be disabled manually with bcdedit /set testsigning off plus a reboot.

Which headsets have been tested?

Soundcore Life Q30, JBL Flip 7 and D300-DH. The driver implements the standard A2DP profile with the SBC codec, so it works with any A2DP headset. Exotic codecs such as LDAC and aptX are not supported — they need a different stack, not a tweak to this driver.

Why does sound sometimes disappear for a couple of seconds after switching headsets?

Almost always the Bluetooth radio fails to bring up a new ACL link to the new headset: Windows still believes the device is connected until you physically switch it or power-cycle the radio. The configurator can do that power-cycle for you — that is what the "Reconnect" button does.

How can I see what the stream is doing?

The driver constantly writes to %ProgramData%\CustomA2DP: customa2dp_status.txt (state, bitpool, frames sent, errors), customa2dp_bt.log (detailed L2CAP, AVDTP and SBC pump log) and customa2dp_start.log (device start and stop). For a quick check, run check.cmd.

Is it free? Is an account required?

The driver is free, with no accounts, telemetry or subscription. Donations are optional: they cover signing the packages and test hardware, and partially go to supporting the project assistant.

What should I check if there is no sound after installing?

Three things: 1) in Device Manager the A2DP node shows CustomA2DP, not Microsoft; 2) the configurator has the right endpoint selected and set as default for both console and multimedia; 3) customa2dp_bt.log contains the line audio stream established, which proves the SBC pump started. If that line is missing, the problem is the driver binding, not encoding.

Download

CustomA2DP 1.0.0.79

One self-extracting installer with the driver, the configurator, the certificates and the check utilities. No system files are overwritten: only the A2DP nodes and the driver store are touched.

File
CustomA2DP-Install.exe
Size
2.23 MB
Driver version
1.0.0.79
Signature
Smartfusion.ru (test)
SHA-256
5E41DCA859F73690B51A5C4BB77774F62E6E23EA12AAC0D849DBA3EAD6663A3D

Security and honesty

  • The driver is signed with a test certificate and runs in test-signing mode — visible as such in Device Manager.
  • No telemetry: the driver makes no network requests, and the only data leaving your PC is the audio itself, over Bluetooth.
  • Everything is C for the Windows Driver Kit plus native C++ for the configurator: no third-party SDKs, no hidden dependencies.
  • Bug reports are welcome — the logs in %ProgramData%\CustomA2DP usually resolve an issue faster than anything else.