Версия 1.0.0.79 · стабильная

Bluetooth A2DP для Windows,
который возвращает звуку детали

CustomA2DP заменяет штатный стек btha2dp собственным транспортом: кодек SBC работает в ядре, сигнальный и медиа-канал остаются тёплыми, а переключение между гарнитурами происходит мгновенно — без «подвисания», тишины и щелчков на выходе.

  • Windows 10 1709+ / Windows 11
  • x64
  • бесплатно
  • один 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_fail в контрольных прогонах
10полос DSP-эквалайзера с лимитером
48кГцчастота SBC-потока без ресемплинга
≈375пакетов в секунду у SBC-насоса

Зачем

Что не так со штатным A2DP

Штатный драйвер Microsoft живёт в юзер-модном стеке и часто проигрывает сам себе: канал рвётся при каждом переключении, звук стартует с задержкой, а на выходе слышен щелчок.

✕ Штатный btha2dp

  • Переключение гарнитуры = разрыв и новый ACL, секунды тишины
  • Поток живёт в юзер-модном процессе и падает вместе с ним
  • Щелчок на старте и в конце из-за резкого разрыва PCM
  • Нет эквалайзера и нет диагностики: непонятно, где встало
  • Битпул SBC зафиксирован на одном значении — качество такое, какое решил стек
  • Своё устройство не поставить без обратной связи

✓ CustomA2DP

  • Тёплый канал: AVDTP-сессия держится, переключение мгновенное
  • Весь путь SBC в ядре — от WASAPI до L2CAP без выхода в user-mode
  • Плавный fade-out перед teardown: тишина вместо щелчка
  • 10-полосный EQ с headroom-лимитером, применяется на лету
  • Битпул SBC под твоим контролем: 345 → 512+ — это примерно 53 → 99 кбит/с на канал
  • Живой статус и подробный лог каждого AVDTP-обмена

Возможности

Всё, что внутри драйвера

Не обёртка над чужим стеком, а собственный аудиотракт: минипорт WaveRT, топология, AVDTP-транспорт и кодек SBC живут в одном.sys и общаются напрямую с Bluetooth-радио.

SBC в ядре

Кодек и AVDTP-транспорт выполняются в драйвере. Никаких зависимостей от BluetoothUserService — поток не рвётся, когда служба занята.

Тёплый канал

Сигнальный и медиа-канал не закрываются после простоя: гарнитура остаётся готовой, поэтому старт звука мгновенный, без повторного AVDTP-handshake.

10-полосный EQ

DSP-эквалайзер с headroom-лимитером: бас можно поднять без писков. Кривая применяется к работающему потоку без перезапуска.

Мгновенное переключение

В режиме auto таргет следует за render sink. Переключили устройство в трее — поток поехал в другую гарнитуру без тишины и без «призрачных» endpoint'ов.

Плавный fade-out

Перед разрывом поток догоняет тишиной короткими SBC-пакетами — ЦАП не щёлкает на границе teardown.

Живая диагностика

В %ProgramData%\CustomA2DP пишутся статус потока, лог L2CAP/AVDTP/SBC и старт устройств. Каждый байт AVDTP-обмена виден по времени.

Настройка качества

Битпул SBC, таймаут и warm-connect настраиваются из конфигуратора. Битпул задаёт битрейт: 345 → 512+ — это ~53 → ~99 кбит/с, у штатного стека значение фиксировано.

Аккуратный откат

Деинсталлятор возвращает A2DP-узлы штатному драйверу и чистит DriverStore. HFP, AVRCP и COM-порты всё это время работают на драйверах Microsoft.

Как работает

Путь одного аудиокадра

Звук из любого приложения идёт через стандартный WASAPI — так что работают все плееры, браузеры, игры и стриминговые сервисы без перенастройки.

Шаг 1 Приложение браузер, плеер, игра
Шаг 2 WASAPI стандартный звуковой стек Windows
Шаг 3 CustomA2DP.sys AudioPipe · WaveRT · EqDsp · SbcStream
Шаг 4 AVDTP свой транспорт поверх L2CAP, PSM 0x0019
Шаг 5 Гарнитура SBC-пакеты по радио

Модули исходников

  • AudioPipe — приём PCM из минипорта, кольцевой буфер, статистика, overrun-контроль
  • MiniportWaveRT — WaveRT-порты и потоки, состояния PAUSE/ACQUIRE/STOP
  • MiniportTopology — топология минипорта для сэмплинг-конверсий Windows
  • SbcStream — кодер SBC, наполнение пакетами, темп 375 fps, idle-fade-out
  • EqDsp — 10-полосный эквалайзер и headroom-лимитер
  • Avdtp — сигналинг AVDTP: discover, get capabilities, set configuration, open, start
  • BtTransport — L2CAP, выбор радио и таргета, тёплый канал, переподключение
  • CustomA2DP — DeviceSetup, параметры реестра, живой статус и логи

Конфигуратор

Настройки без перезагрузки

Нативное приложение без .NET: выбирает активный A2DP-эндпоинт, ставит его по умолчанию для консоли и мультимедиа, прогревает канал настоящим WASAPI-потоком и умеет переподключать гарнитуру power-cycle'ом радио.

  • Версия 1.8.1, тёмный интерфейс, системный трей
  • Эквалайзер и битпул — с применением к живому потоку
  • Кнопка переподключения: звук в уже открытом браузере появляется сразу
  • Показывает версию установленного драйвера прямо из INF
CustomA2DP Config 1.8.1
Драйвер1.0.0.79
УстройствоSoundcore Life Q30
Потокactive · 359 kbps
Переподключить По умолчанию

Требования

Что нужно перед установкой

Драйвер подписан тестовым сертификатом, поэтому Secure Boot должен быть выключен — установщик сделает это сам и попросит перезагрузиться один раз.

Поддерживается

  • Windows 10 1709 (build 16299) и новее
  • Windows 11, все версии
  • Только 64-разрядные системы (x64)
  • Secure Boot выключен
  • Права администратора

Не поддерживается

  • Windows 7, 8, 8.1
  • 32-битные версии Windows
  • Windows на ARM (x64-эмуляция)
  • Кодеки LDAC, aptX, AAC — только SBC
  • Включённый Secure Boot

Перед установкой

  • Отключите Secure Boot в UEFI
  • Перезагрузитесь, убедитесь, что гарнитура сопряжена
  • Запустите установщик и подтвердите UAC
  • Перезагрузитесь один раз — и всё

Установка

Пять шагов

  1. 1

    Скачайте установщик

    Один файл CustomA2DP-Install.exe, ничего распаковывать вручную не нужно.

  2. 2

    Запустите от администратора

    Подтвердите UAC. Установщик разложит файлы, доверит сертификаты, включит test-signing и поставит пакет через pnputil.

  3. 3

    Перезагрузитесь

    Сообщение «требуется перезагрузка» — это ожидаемо. Повторно запускать установщик не нужно: драйвер подхватится сам.

  4. 4

    Проверьте привязку

    A2DP-узел гарнитуры должен переключиться на CustomA2DP. Если нет — Диспетчер устройств → Bluetooth → Обновить драйвер → Установить с диска → %ProgramFiles%\CustomA2DP\package\customa2dp.inf.

  5. 5

    Запустите конфигуратор

    «CustomA2DP Config» из меню «Пуск»: выберите устройство, включите EQ и проверьте состояние через check.cmd.

FAQ

Частые вопросы

Нужно ли отключать Secure Boot?

Да, обязательно. Драйвер подписан тестовым сертификатом, а не сертификатом Microsoft, поэтому включённый Secure Boot его не загрузит. Установщик выключает Secure Boot через bcdedit /set testsigning on и просит перезагрузиться один раз. Просто «включить тестовую подпись» поверх работающего Secure Boot невозможно — загрузчик всё равно отвергнет пакет. Это временное состояние — что изменит донат, написано в разделе «Поддержка».

Драйвер заменит весь Bluetooth-стек Windows?

Нет. Перепривязываются только A2DP-узлы (класс MEDIA, 0000110B). Профили Hands-Free, AVRCP и COM-порты продолжают работать на штатных драйверах Microsoft — микрофон гарнитуры и управление воспроизведением не пострадают.

Как вернуть штатный драйвер, если что-то пошло не так?

Запустите uninstall.cmd в %ProgramFiles%\CustomA2DP или удалите приложение через «Параметры → Приложения → CustomA2DP → Удалить». Деинсталлятор уберёт пакеты из DriverStore, сертификаты, ярлыки и папку программы. Test signing при этом останется включённым — отключается вручную: bcdedit /set testsigning off и перезагрузка.

С какими гарнитурами протестировано?

Soundcore Life Q30, JBL Flip 7 и D300-DH. Драйвер работает по стандартному профилю A2DP с кодеком SBC, поэтому совместим с любой A2DP-гарнитурой. Экзотические кодеки (LDAC, aptX) не поддерживаются — для них нужен отдельный стек, а не доработка этого драйвера.

Почему при смене гарнитуры звук иногда пропадает на пару секунд?

Почти всегда причина в том, что Bluetooth-радио не поднимает новый ACL-канал к новой гарнитуре: Windows продолжает считать устройство подключённым, пока физически не переключите гарнитуру или не выполните power-cycle радио. Конфигуратор умеет делать power-cycle автоматически — это и есть кнопка «Переподключить».

Где смотреть, что происходит с потоком?

Драйвер постоянно пишет файлы в %ProgramData%\CustomA2DP: customa2dp_status.txt (состояние, битпул, отправленные кадры, ошибки), customa2dp_bt.log (подробный лог L2CAP, AVDTP и SBC-насоса) и customa2dp_start.log (старт и остановка устройств). Проверить состояние быстро можно скриптом check.cmd.

Сколько стоит и можно ли без регистрации?

Драйвер бесплатный, без аккаунтов, телеметрии и подписки. Донат необязателен: он покрывает расходы на подписание пакетов и тестовое железо и частично идёт на поддержку ассистента проекта.

Что делать, если после установки звука нет?

Проверьте три вещи: 1) в Диспетчере устройств A2DP-узел гарнитуры показывает CustomA2DP, а не Microsoft; 2) в конфигураторе выбран правильный эндпоинт и он сделан «По умолчанию» для консоли и мультимедиа; 3) в customa2dp_bt.log есть строка audio stream established — она доказывает, что SBC-насос запустился и поток идёт. Если строки нет — проблема в привязке драйвера, а не в кодировании.

Загрузка

CustomA2DP 1.0.0.79

Один самораспаковывающийся установщик: драйвер, конфигуратор, сертификаты и утилиты проверки. Системные файлы не перезаписываются, изменяются только A2DP-узлы и хранилище драйверов.

Файл
CustomA2DP-Install.exe
Размер
2,23 МБ
Версия драйвера
1.0.0.79
Подпись
A2DP-Lab (тестовая)
SHA-256
0040F49ECC26E66E37FADFECAC3ABBEC84EE75C8A3D3860DD6B2831CB5A920B7

Безопасность и честность

  • Драйвер подписан тестовым сертификатом и работает в режиме test signing — это честно и заметно в «Диспетчере устройств».
  • Никакой телеметрии: сетевых обращений драйвер не делает, наружу уходят только ваши аудиоданные по Bluetooth.
  • Весь код — C для Windows Driver Kit и нативный C++ для конфигуратора; никаких сторонних SDK и скрытых зависимостей.
  • Проект открыт для отчётов об ошибках: логи из %ProgramData%\CustomA2DP обычно решают вопрос быстрее всего.