使い方

目次

  1. ウィンドウ
    1. ホーム
    2. プロファイル
    3. 診断
    4. アダプタ
    5. 設定
    6. 初回セットアップ
  2. トレイとフライアウト
  3. Windows 起動時に開始
  4. CLI モード
    1. 基本
    2. コーデック選択
    3. 品質
    4. ABR(アダプティブビットレート)
    5. デバイス検出
    6. オプション一覧
  5. キャプチャモード
    1. アプリモード
    2. 音量
    3. ヘッドホンのボタン
    4. システム全体のエフェクトアプリ
      1. A2DPWB が自分の仮想出力デバイスを持たない理由
  6. コーデック比較
  7. aptX ファミリーと aptX Adaptive の互換性
    1. aptX Adaptive に対応していない理由
    2. aptX Adaptive から aptX への「フォールバック」ではありません
    3. 指定したコーデックがない場合
    4. ヘッドホンが別の機器とも接続中でコーデックが出てこない
    5. サンプルレート
    6. ヘッドホンが提供するコーデックの確認方法
  8. 最大メディアパケットサイズ(プロファイルごと)
  9. 送信ストリームの検証(a2dpwb_decode)
  10. 通信品質と AFH
  11. 対向受信テスト(tools/linux_sink)
  12. LE Audio(実験的)
  13. 更新
  14. トラブルシューティング
    1. コアが動いていないと表示される
    2. ドライバーの割り当てや復元に失敗する
    3. Bluetooth アダプターが応答しない
    4. アップデート後にペアリングがうまくいかない
    5. 接続がタイムアウトする

ウィンドウ

スタートメニューの A2DP Windows Bridge(または a2dpwb.exe)で起動します。左のメニューに 5 つの画面があり、ウィンドウの幅が狭いときはアイコンだけに畳まれます。ウィンドウは常駐の a2dpwb-core.exe の状態を表示しているだけなので、閉じても配信は止まりません(トレイとフライアウトを参照)。

ホーム

  • 現在のプロファイルのデバイス、その状態、使用中のコーデックとビットレート。プロファイルとは別のコーデックで接続したときは、コーデックのバッジにどれを使ったかと理由が出ます
  • 画面で一番大きな 接続 / 切断 ボタン
  • 音量: ヘッドホンの音量(音量を参照)
  • プロファイルの切り替え、キャプチャソース(編集 付き)、小さなグラフ付きの通信品質
  • エラーには原因と、あればその直し方のボタン(WinUSB を割り当てる、ダウンロードページを開く、Bluetooth を再起動、もう一度試す、プロファイルの 編集 など)が付きます

プロファイル

プロファイルは、デバイスとその音の設定の組み合わせです。カードにはデバイス、コーデック、キャプチャソースが表示され、接続(配信中は 切断)、編集、削除ができます。新規プロファイル と編集ボタンで編集画面が開きます。

  • デバイス: デバイスを検索 で USB アダプターを使って近くのデバイスを探します(約 10 秒。ヘッドホンはペアリングモードに)。A2DPWB で以前ペアリングしたデバイスには ペアリング済み と付きます。検索で見つからないときは 手動入力: にアドレスを入れて 使う を押します。入力・貼り付けたアドレスはその場で整形されます(aa-bb-cc-dd-ee-ff、AABBCCDDEEFF、AA BB CC DD EE FF はどれも AA:BB:CC:DD:EE:FF になります)
  • プロファイル名: 自分で入力するまではデバイス名に合わせて変わります
  • コーデック: 自動または 1 つのコーデック。3 本のバー(音質・低遅延・安定性)付きのカードで選びます。このコーデックが使えないときは別のコーデックで接続(既定でオン。指定したコーデックがない場合を参照)
  • キャプチャソース: システムループバック、仮想デバイス、アプリ(キャプチャモードを参照)
  • 連動する Windows 音量(音量を参照)
  • 詳細設定(品質・サンプルレート・ビット深度・パケットサイズ): 選んだコーデックで使える値だけが出ます
    • 音質: LDAC は HQ (990 kbps) / SQ (660 kbps) / MQ (330 kbps)。LHDC V5 は高音質 (1000 kbps) / 中高音質 (900 kbps) / 標準 (500 kbps) / モバイル (400 kbps) で、Android と同じ 4 段階。AAC と SBC にも品質の段階があり、aptX 系はビットレート固定です
    • ABR(適応ビットレート): LDAC と LHDC V5(ABRを参照)
    • サンプルレート: 自動はキャプチャするデバイスに合わせます
    • ビット深度: LDAC と LHDC V5 は 16 / 24 ビット(自動は 24 ビット)、それ以外は 16 ビット
    • 最大メディアパケットサイズ(バイト)(最大メディアパケットサイズを参照)

初期設定のままで一番良い音になります。ほとんどのプロファイルは 詳細設定 を触る必要はありません。

診断

  • 配信中の 通信品質: 実効ビットレート、パケット、送信前に破棄したパケット、音声取り込みの欠落、送信キュー、無線時間の使用率、電波の強さ(RSSI)、AFH のチャネル(通信品質と AFHを参照)
  • 接続フロー: 直近の接続の 11 の段階(開始、Bluetooth アダプター、ACL / AVDTP 接続、コーデック能力の取得、コーデック選択、音声の取り込み、ストリーム設定、エンコーダー、ストリーム開始、音声送信、接続の維持と切断・再接続)を、かかった時間とともに OK / 警告 / 失敗で表示します。フローをコピー でコピーできます
  • ログ: リアルタイムに表示し、レベル(すべてのレベル、情報以上、警告とエラー、エラーのみ)と文字列で絞り込めます。表示中のログをコピー で表示中の行をコピーします
  • HCI キャプチャを開始 / HCI キャプチャを停止(送信ストリームの検証を参照)
  • 診断情報をコピー: バージョン・OS・アダプター・プロファイル・接続フロー・警告とエラー・直近のログをまとめてクリップボードへコピーします(不具合報告にそのまま貼れます)。BT アドレスを伏せる(既定でオン)で、アドレスはメーカー部分だけ(AA:BB:CC:xx:xx:xx)になります

設定 > 開発者モード をオンにすると、診断に 対向受信テスト のタブが加わります(対向受信テストを参照)。

アダプタ

  • 検出した USB Bluetooth アダプターと、そのチップ、ドライバ、ファームウェア。再検出 で探し直します
  • WinUSB を割り当てる / 元のドライバに戻す(セットアップを参照)。毎回 Windows が管理者の許可を求めます
  • ファームウェア用の Bluetooth チップ と、ダウンロードページを開く、設定フォルダを開く(ファームウェアを参照)
  • AFH: 自動、オフ、手動(Wi-Fi のチャネルを指定)(通信品質と AFHを参照)
  • Bluetooth スタック: 停止中(最初の検索か接続で起動)、起動中、準備完了、エラーの表示と Bluetooth を再起動

設定

項目 設定
表示 言語、テーマ(システム / ライト / ダーク)
起動 Windows 起動時に開始 と トレイに入れた状態で起動(Windows 起動時に開始を参照)、システムトレイに最小化(トレイとフライアウトを参照)
ヘッドホン ヘッドホンのボタンで再生を操作(ヘッドホンのボタンを参照)、ヘッドホンの音量を記憶(音量を参照)
更新 アップデートを確認、起動時にアップデートを確認、アップデート確認にプレリリースを含める(ベータ版も通知)、今すぐ更新(更新を参照)
詳細 開発者モード(診断に受信機テストを追加し、ログを詳しくします。再起動は不要)、設定フォルダ と 設定フォルダを開く、セットアップを実行
A2DPWB について バージョン、ライセンス、サードパーティライセンス、A2DPWB を終了

初回セットアップ

初回の起動(プロファイルがまだないか、WinUSB のアダプターがない)では A2DPWB のセットアップ が開きます: アダプタを選ぶ、ドライバとファームウェア、ヘッドホンを探す、テスト。セットアップを参照してください。設定 > セットアップを実行 でもう一度開けます。

トレイとフライアウト

A2DPWB はウィンドウの有無にかかわらず、システムトレイで動き続けます。

  • トレイのアイコンを 左クリック するとフライアウトが開きます: デバイスと状態、接続 / 切断、音量、プロファイルの切り替え、コーデック、通信品質、アプリを開く。Esc かほかの場所のクリックで隠れます。エラーの直し方がメインウィンドウの画面(プロファイル、アダプタ)にある場合は、ボタンでウィンドウのその画面を開きます
  • 右クリック でメニューが開きます: A2DPWB を開く、最初の 10 件のプロファイル(使用中のものにチェック。クリックするとそのプロファイルで接続)、切断、終了。メニューはウィンドウを起動せずにすぐ開きます
  • アイコンのツールチップで待機中かストリーミング中かが分かります

設定 > システムトレイに最小化 がオン(既定)のときは、ウィンドウを最小化しても閉じてもトレイに隠れるだけで、配信は続きます。オフのときは、最小化するとタスクバーに入り、ウィンドウを閉じると A2DPWB が終了します。トレイのメニューの 終了 か 設定 > A2DPWB を終了 で、配信を止めてアダプターを放し、A2DPWB を完全に終了します。

Windows 起動時に開始

設定 > Windows 起動時に開始 をオンにすると、サインイン時に A2DPWB が起動します。トレイに入れた状態で起動 がオンならバックグラウンドで起動し、出るのはトレイのアイコンだけで、ウィンドウはそこから開きます。オフ(既定)ならメインウィンドウが開きます。中身は HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Run の値 A2DPWB(データは "<フォルダー>\a2dpwb-core.exe"。トレイに入れた状態で起動 がオンなら後ろに --background が付きます)です。手動で無効にするには、この値を削除してください。v1 に v2 を上書きでインストールすると、トレイに入れた状態で起動 はオンになります(v1 は常にトレイに入れた状態で起動していたため)。

CLI モード

a2dpwb-core.exe --cli で、ウィンドウと同じコアを使ってコンソールから配信します。先に A2DPWB を終了してください(トレイ > 終了)。アダプターを使えるのは一度に 1 つのプログラムだけです。CLI はプロファイルを読みません。すべてオプションで指定します。

基本

# 最適なコーデックを自動選択
a2dpwb-core.exe --cli -d AA:BB:CC:DD:EE:FF

Ctrl+C で配信を止めます。CLI は状態、コーデックとビットレートを表示し、最後に送信したパケット数と破棄したパケット数を表示します。

コーデック選択

a2dpwb-core.exe --cli -d AA:BB:CC:DD:EE:FF -c ldac      # LDAC
a2dpwb-core.exe --cli -d AA:BB:CC:DD:EE:FF -c aptxhd    # aptX HD
a2dpwb-core.exe --cli -d AA:BB:CC:DD:EE:FF -c aptxll    # aptX Low Latency
a2dpwb-core.exe --cli -d AA:BB:CC:DD:EE:FF -c aptx      # aptX
a2dpwb-core.exe --cli -d AA:BB:CC:DD:EE:FF -c aac       # AAC
a2dpwb-core.exe --cli -d AA:BB:CC:DD:EE:FF -c sbc       # SBC
a2dpwb-core.exe --cli -d AA:BB:CC:DD:EE:FF -c lhdcv5    # LHDC V5
a2dpwb-core.exe --cli -d AA:BB:CC:DD:EE:FF -c opus      # Opus(試験的。48 kHz、256 kbps)
a2dpwb-core.exe --cli -d AA:BB:CC:DD:EE:FF -c opus05    # PipeWire の Opus 05(試験的。相手が PipeWire のとき)

自動選択の優先順位: LDAC > aptX HD > aptX LL > aptX > LHDC V5 > Opus(試験的) > AAC > SBC XQ > SBC(FastStream と Opus 05 は明示的に選んだときだけ)

指定したコーデックをヘッドホンが提供していない場合、CLI は理由を表示してエラーで止まります。ヘッドホンが提供する一番良いコーデックを使うには -c auto(既定)にしてください。aptX Adaptive は選択されません – aptX ファミリーと aptX Adaptive の互換性を参照してください。

品質

a2dpwb-core.exe --cli -d AA:BB:CC:DD:EE:FF -c ldac -q hq   # 990 kbps(既定)
a2dpwb-core.exe --cli -d AA:BB:CC:DD:EE:FF -c ldac -q sq   # 660 kbps
a2dpwb-core.exe --cli -d AA:BB:CC:DD:EE:FF -c ldac -q mq   # 330 kbps

# LHDC V5: hq 1000 / mhq 900 / sq 500 / mq 400 kbps(Android と同じ 4 段階)
a2dpwb-core.exe --cli -d AA:BB:CC:DD:EE:FF -c lhdcv5 -q mhq  # 900 kbps

ABR(アダプティブビットレート)

a2dpwb-core.exe --cli -d AA:BB:CC:DD:EE:FF -c ldac -a
a2dpwb-core.exe --cli -d AA:BB:CC:DD:EE:FF -c lhdcv5 -a

ABR は Bluetooth 接続が不安定な場合にビットレートを自動的に下げ、安定すると引き上げます。LDAC は品質モード間を移動し、LHDC V5 は Android と同じ方針で 160〜400 kbps の範囲で動きます。ウィンドウでは、プロファイルの編集画面の 詳細設定 にあります。

デバイス検出

# USB アダプターで近くのデバイスを探す(10 秒。長くするには --scan 20 など)
a2dpwb-core.exe --cli --scan

先にヘッドホンをペアリングモードにしてください。

オプション一覧

オプション 説明
-d <addr> ヘッドホン / 受信機の Bluetooth アドレス(AA:BB:CC:DD:EE:FF)
-c <codec> ldac、aptxhd、aptxll、aptx、aac、sbc、lhdcv5、opus、opus05、auto(既定: auto)
-q <mode> 品質: hq(既定)、sq、mq。LHDC V5 は mhq(900 kbps)も可
-a ABR(LDAC と LHDC V5)
-m <mode> キャプチャモード: loopback(既定)、virtual、app
--audio-device <id> -m virtual で使う再生デバイス
--app <exe> -m app で使う実行ファイル(例: spotify.exe)
--rate <hz> 取り込みのサンプルレート(既定: デバイスのレート)
--bits <16\|24> ビット深度(既定: コーデックが対応していれば 24)
--max-packet <バイト数> 最大メディアパケットサイズ、679〜1679、既定 1023(最大メディアパケットサイズを参照)
--afh <auto\|off\|6,11> AFH ホストチャネル分類(通信品質と AFHを参照)
--remote-sink <host[:port]\|auto> 対向受信機が受け取った内容を表示。-d がなければその受信機へ送信(対向受信テストを参照)
--scan [秒] 近くのデバイスを表示して終了(既定 10 秒)
-h ヘルプを表示

開発・テスト用に --hci-tcp <host:port>(WinUSB アダプターの代わりに TCP 経由の仮想コントローラー)、--test-tone(キャプチャ音声の代わりに左 1 kHz / 右 1.5 kHz)、--duration <秒>(指定秒数で停止)、--hci-capture <file.pklg>(実行全体の HCI キャプチャ)もあります。ビルドを参照してください。

--cli を付けない a2dpwb-core.exe は常駐のプログラムで、ウィンドウも起動します。--background を付けるとトレイのアイコンだけで起動します(トレイに入れた状態で起動 がオンのとき Windows 起動時に開始 が使います)。a2dpwb-core.exe --quit は、動いている A2DPWB に配信を止めて終了するよう頼みます(インストーラーが使います)。

キャプチャモード

A2DPWB は 3 つのオーディオキャプチャモードに対応しています。モードによって、音声経路のどこを取り込むかが違います:

モード 取り込むもの
システムループバック Windows の既定の出力デバイスで再生される音(全アプリのミックス)
仮想デバイス 選んだデバイス(VB-CABLE 等)にアプリが出力した音
アプリ 1 つのアプリ(とその子プロセス)が再生する音だけを、アプリ自身の処理の後で取り込む。Windows 11 または Windows 10 バージョン 2004(ビルド 19041)以降が必要

プロファイルの編集画面でも、キャプチャソースの下に同じ説明が表示されます。

システムループバックは音声をコピーするだけで、既定の出力デバイスから音声を奪いません。音声は Bluetooth ヘッドホンに加えて、そのデバイス(スピーカー、HDMI 接続のテレビなど)からも出続けます。ヘッドホンだけで聞くには、VB-CABLE などどこからも音が出ないデバイスを使って、仮想デバイスモードにしてください。

仮想デバイスモードで 既定デバイスを自動切替 をオンにすると、ストリーミング中は選択したデバイスが Windows の既定の出力になります。Windows の設定を変えなくても、アプリの音声がそのデバイスに出力されます。ストリーミングを止めると、元の既定デバイスに戻します。

  • オーディオデバイスの一覧には、A2DPWB が仮想オーディオデバイスと判定したデバイスだけが表示されます。1 つもなければ、編集画面に VB-Cableをダウンロード が出ます。
  • 既定の通信デバイス(通話アプリが使うもの)は変更しません。
  • アプリによっては、再起動するまで元のデバイスで再生し続けます。
  • A2DPWB が異常終了した場合、既定デバイスは元に戻りません。Windows のサウンド設定で変更してください。

アプリモード

アプリモードは、1 つのアプリ(音楽プレーヤー、ブラウザー、エフェクトアプリなど)の音声を送ります。アプリの一覧から選んでください。一覧には現在音声を再生しているアプリが表示されます。見つからない場合は、そのアプリで再生を始めてから 更新 を押してください。子プロセスも含むので、別プロセスで音声を再生するブラウザーでも使えます。

  • アプリが起動していなくても接続できます。A2DPWB はヘッドホンに接続し、アプリが起動すると送信を始めます。ストリーミング中にアプリを終了しても接続は保たれ、アプリを起動し直すと自動で再び取り込みます。
  • アプリ自身の出力先デバイスからも音は出続けます。ヘッドホンだけで聞くには、その出力先デバイス(マスター音量)をミュートしてください。A2DPWB が取り込む音には影響しません。ただし、Windows の音量ミキサーでアプリ自体をミュートすると、ヘッドホンも無音になります。
  • Windows の音量ミキサーにあるそのアプリのスライダーで、ヘッドホンに送る音量が変わります(出力先デバイスの音量も一緒に変わります)。マスター音量や音量キーでは送る音は変わりません。プロファイルの 連動する Windows 音量 が自動なら、代わりにヘッドホンの音量が変わります(音量 を参照)。
  • Windows が A2DPWB の指定したサンプルレートに変換するので、サウンド設定のデバイス形式に左右されません。
  • Windows 10 バージョン 2004(ビルド 19041)より前には、アプリ単位のキャプチャがありません。その PC でアプリモードのプロファイルで接続すると、別のキャプチャソースを選ぶよう求めるエラーになります。

音量

ストリーミング中、ヘッドホンが AVRCP 絶対音量に対応していれば、ホームとトレイのフライアウトに 音量 スライダーが表示されます。ヘッドホン側の音量を変えるので、送る音声のビット数は削られません。ヘッドホンの音量ボタンやタッチ操作で変えた値もスライダーに反映されます。

プロファイルの 連動する Windows 音量 で、ストリーミング中に Windows の音量とヘッドホンの音量を一つの音量として連動させます:

選択 連動する Windows の音量
自動(初期値) A2DPWB が取り込むデバイス。システムループバックとアプリモードでは既定の出力デバイス、仮想デバイスモードでは選んだデバイス
オフ なし。Windows の音量とヘッドホンの音量は別々
出力デバイス そのデバイスの音量
  • ヘッドホンの音量ボタンやジェスチャー、音量 スライダーで変えると連動先の Windows の音量が変わり、サウンド設定でそのデバイスのスライダーを動かすとヘッドホンの音量が変わります。
  • 音量キーと Windows の音量フライアウトは常に既定の出力デバイスに働くので、ヘッドホンの音量が変わるのは連動先が既定の出力デバイスのときだけです(自動なら基本的にそうなります。仮想デバイスモードで 既定デバイスを自動切替 がオフの場合を除く)。
  • ストリーミング開始時は Windows の音量をヘッドホンの音量に合わせ、終了すると元の音量に戻します。
  • 自動では音声を Windows の音量がかかる前に取り込むので、音量を下げるのはヘッドホン側の 1 回だけです。連動先の音量で取り込む音も変わる場合は音量が二重にかかるので、オフにしてください(システム全体のエフェクトアプリ を参照)。
  • ミュートは連動しません。出力デバイスをミュートして PC から音を出さないようにしても、ヘッドホンはミュートされません。

設定 > ヘッドホンの音量を記憶(初期状態でオフ)にすると、ヘッドホンの音量を機器ごとに保存し、次に接続したとき音声を送る前に設定します。オフの場合、ヘッドホンは自身が最後に使っていた音量で始まるため、前回 A2DPWB で使った音量よりずっと大きいことがあります(スマートフォンで使った後など)。

ヘッドホンのボタン

ストリーミング中は、ヘッドホンの再生/一時停止・曲送り・曲戻しの操作(ボタンやタッチ操作。WH-1000XM4 のダブルタップなど)で PC の再生を操作できます。A2DPWB はこれを Windows のメディアキーとして渡し、Windows のメディアコントロールに表示されているアプリ(Spotify、ブラウザー、メディアプレーヤーなど)が受け取ります。停止も渡します。

  • 再生と一時停止はどちらも Windows の再生/一時停止キーとして扱うので、ヘッドホン側の再生状態の認識がずれていても、タップのたびに再生と一時停止が切り替わります。
  • A2DPWB は再生中かどうか(キャプチャする音声があるかどうか)をヘッドホンに伝えるので、外すと一時停止するヘッドホンも正しい操作を送れます。
  • 早送り・巻き戻し(ボタンの長押し)は Windows に対応するメディアキーがないため無視します。
  • 音量の操作はヘッドホン自体の音量を変えます。連動する Windows 音量 で連動先の Windows の音量も変わります(音量 を参照)。
  • 設定 > ヘッドホンのボタンで再生を操作 でオフにできます(別のプログラムもメディアキーに反応して二重に動く場合など)。

ヘッドホンが AVRCP に対応している必要があります(ほぼすべてのヘッドホンが対応しています)。対応していない場合も、ボタンが使えないだけでストリーミングは通常どおり動作します。

システム全体のエフェクトアプリ

システム全体にかかるエフェクトアプリ(イコライザー、音質補正、バーチャルサラウンドなど)の多くは、自分の仮想出力デバイスを追加します。他のアプリはそのデバイスに音を再生し、エフェクトアプリは処理した音を、エフェクトアプリで選んだ出力先デバイスに再生します。A2DPWB でどのモードを選ぶかで、エフェクトがかかった音になるかが決まります:

設定 ヘッドホンに届く音
仮想デバイス: エフェクトアプリ自身の仮想デバイス エフェクト前の音(アプリがエフェクトアプリに渡す音)
アプリ: エフェクトアプリ エフェクト後の音(エフェクトアプリが再生する音。おすすめ)
仮想デバイス: エフェクトアプリの出力先デバイス(出力先を VB-CABLE にした場合など) エフェクト後の音(アプリモードが使えない Windows 向け)

アプリモードでは、エフェクトアプリの出力先はどのデバイスでも構いません。A2DPWB が取り込むのはアプリが再生する音で、デバイスが鳴らす音ではないので、出力先は音の行き先として置いておくだけです。PC でも同時に鳴らないように、誰も聞いていない出力(モニターの HDMI 音声など)を選ぶか、そのデバイスのマスター音量をミュートしてください。VB-CABLE などの仮想デバイスを音の捨て場にしてもよいですが、必須ではありません。出力先のデバイスは有効で、接続されている必要があります。

エフェクトアプリ自身の仮想デバイスが Windows の既定の出力デバイスの場合、その音量はエフェクトアプリが受け取る音も下げます。連動する Windows 音量 が自動だと、音量の変更が二重に(エフェクトアプリの入力とヘッドホンの両方に)かかります。そのプロファイルではオフにして、ヘッドホンの音量か 音量 スライダーを使ってください。

A2DPWB が自分の仮想出力デバイスを持たない理由

Windows の出力デバイス一覧に Bluetooth ヘッドホンを出し、エフェクトアプリから直接選べるようにするには、カーネルモードのオーディオドライバーが必要です。A2DPWB はこれを含めていません:

  • カーネルのオーディオドライバーを作って保守するのは大がかりな作業で、不具合があると Windows ごと停止(ブルースクリーン)します。
  • Windows 10 / 11 は Microsoft の署名があるドライバーしか読み込みません。署名を受けるには EV コード署名証明書(年に数百米ドル)と Microsoft Partner Center のアカウントが必要で、通常は法人として登録します。
  • 署名を回避する方法は Windows のテスト署名モードだけですが、システムのセキュリティが下がり、一部のソフト(アンチチートのあるゲームなど)が動かなくなります。A2DPWB はこの方法を使いません。

同じ用途には、アプリモードか、無料の仮想デバイス(VB-CABLE など)を使ってください。

  • 既定デバイスを変更する公開 API は Windows にないため、他の音声切り替えツールと同じく非公開の IPolicyConfig インターフェースを使います(Windows 10 / 11)。

システムループバックと仮想デバイスは WASAPI 共有モードを使用するため、キャプチャのサンプルレートは Windows サウンド設定の「既定の形式」に依存します(通常 48 kHz)。LDAC の 96 kHz を利用するには、サウンド設定 → デバイスのプロパティ → 詳細 → 既定の形式で出力デバイスのサンプルレートを 96 kHz に変更してください。

コーデック比較

コーデック 最適な用途 トレードオフ
LDAC (HQ) 最高音質 レイテンシーが高い、安定した接続が必要
LDAC (ABR) 音質 + 安定性 接続状況に応じてビットレートが変動
aptX HD 高音質、幅広いデバイス対応 固定 576 kbps
aptX LL ゲーム、動画(低レイテンシー) 音質が低い (16-bit)
aptX aptX 対応機器が最も多い 16-bit、352/384 kbps
AAC Apple デバイス、良い効率 中程度の音質
SBC 最大の互換性 最低の音質

プロファイルの編集画面では、同じ比較を各コーデックのカードの 3 本のバーで表示します。

aptX ファミリーと aptX Adaptive の互換性

A2DPWB は 3 種類の aptX コーデックに対応しており、いずれも libopenaptx でエンコードします。aptX Adaptive には対応していません。

aptX HD・aptX Low Latency は実験的な対応です。 Android / PipeWire の実装に合わせ、エンコード→デコードの往復テストは通っていますが、実機のヘッドホンでの検証はまだです。

クラシック aptX だけが目的なら、Windows 10 標準の Bluetooth スタックがクラシック aptX に対応しています(aptX HD・aptX LL・aptX Adaptive は非対応)。その場合 A2DPWB は不要です。A2DPWB が主に役立つのは LDAC・aptX HD・aptX Low Latency です。

コーデック Vendor ID / Codec ID RTP ヘッダー 対応状況
aptX 0x0000004F / 0x0001 なし 対応(44.1/48 kHz で 352/384 kbps)
aptX HD 0x000000D7 / 0x0024 あり 対応(576 kbps、24-bit 入力)
aptX Low Latency 0x0000000A または 0x000000D7 / 0x0002 なし 対応(352 kbps)
aptX Adaptive 0x000000D7 / 0x00AD – 非対応 – 検出してログに記録するのみ

aptX Adaptive に対応していない理由

オープンソースの aptX Adaptive エンコーダーは存在しません。libopenaptx が実装しているのは aptX と aptX HD のみです(A2DPWB は aptX Low Latency にも使用しています)。arkq/openaptx も aptX / aptX HD を再実装しているだけで aptX Adaptive エンコーダーは含まれておらず、バイナリの再配布も認められていません。そのため A2DPWB は aptX Adaptive を検出してログに記録するだけです。

aptX Adaptive から aptX への「フォールバック」ではありません

接続時、ヘッドホンは対応コーデックの一覧(AVDTP ストリームエンドポイント)を通知し、A2DPWB はその中から 1 つを選びます。aptX Adaptive は最初から選択候補に入らないため、そこから「フォールバック」するわけではありません。

  • ヘッドホンがクラシック aptX も通知している場合 – Qualcomm は aptX Adaptive を aptX / aptX HD と下位互換があると案内しているため、多くの aptX Adaptive 対応ヘッドホンがこれに該当します。この場合 A2DPWB はクラシック aptX を直接選択します。aptX はヘッドホンの一覧にある独立したコーデックであり、aptX Adaptive の縮退モードではありません。
  • ヘッドホンが aptX Adaptive のみを通知している場合(クラシック aptX・aptX HD・aptX LL がない) – A2DPWB では aptX を使えません。Auto は優先順位に従って次のコーデック(通常は AAC か SBC)を選びます。

自動選択の優先順位: LDAC > aptX HD > aptX LL > aptX > LHDC V5 > Opus(試験的) > AAC > SBC XQ > SBC(FastStream と Opus 05 は明示的に選んだときだけ)

指定したコーデックがない場合

ヘッドホンが通知していないコーデックを明示的に指定した場合の動作です。

場所 動作
プロファイル・このコーデックが使えないときは別のコーデックで接続 をオン(既定) ヘッドホンが提供する最良のコーデック(Auto の優先順位)で接続し、代わりに使ったコーデックとその理由をコーデックのバッジに表示します。
プロファイル・上記をオフ エラー(「デバイスは … に対応していません」)で接続を中止します。aptX・aptX HD・aptX LL を指定し、ヘッドホンが aptX Adaptive しか提供していない場合は、その旨を表示し Auto・AAC・SBC の使用を案内します。
CLI(-c <codec>) 同じエラーで止まります。提供されている最良のコーデックで接続するには -c auto にしてください。

このオプションはプロファイルの編集画面の、コーデックのカードの下にあります(Auto では使いません)。

ヘッドホンが別の機器とも接続中でコーデックが出てこない

ヘッドホンはコーデックごとにストリームエンドポイント(SEP)を提供します。デュアル(マルチポイント)接続でスマホや PC へ再生中のエンドポイントは 使用中 と通知され、その再生が止まるまでそのコーデックは使えません。また、接続が 1 台のときだけハイレゾコーデック(LDAC・L2HC など)を提供するヘッドホンもあります。この場合 A2DPWB はログに次のように記録します。

remote SEP 6: sink audio, IN USE (codec not queried)
remote SEPs in use by another connection: 1 of 6 audio sink SEP(s); ...
capability discovery complete (LDAC=false ... , 1 of 6 audio sink SEP(s) in use)

エラーも「別の機器が使用中」と表示します。スマホや PC との接続を切る(またはヘッドホンのアプリでデュアル接続をオフにする)と、もう一度接続してください。PC 内蔵の Bluetooth がヘッドホンとペアリングされたままの場合も「別の機器」にあたります。

サンプルレート

aptX・aptX HD・aptX LL が対応するのは 44.1 kHz と 48 kHz のみです。A2DPWB はヘッドホンが通知したサンプルレートから 1 つを選び(現在の Windows デバイスのレートを優先し、使えなければ 48 kHz)、WASAPI にリサンプリングさせます。aptX のために Windows のサウンド設定を変更する必要はありません。

ヘッドホンが提供するコーデックの確認方法

  1. ヘッドホンに接続します。
  2. 診断 を開き、ログの絞り込みに remote と入力します。

同じ行は設定フォルダーのログファイル(%APPDATA%\A2DPWB\logs\a2dpwb-core.<日付>.log)にもあり、CLI モードではコンソールに表示されます。以下の行で、ヘッドホンが通知しているコーデックを正確に確認できます。

remote supports aptX (SEID ..., [...])
remote supports aptX Adaptive (SEID ...) - never selected (no open encoder); classic aptX is used only if the remote lists it
remote vendor codec 0x........./0x.... (SEID ...) - unsupported
capability discovery complete (LDAC=false aptX HD=false aptX LL=false aptX=true aptX Adaptive=true [not encodable] SBC=true AAC=true LHDC V5=false Opus=false)
  • aptX=true – クラシック aptX を使用できます(aptX Adaptive=true であっても同様)。
  • aptX=false・aptX HD=false・aptX LL=false かつ aptX Adaptive=true – ヘッドホンは aptX Adaptive しか提供していません。Auto・AAC・SBC を使ってください。
  • remote vendor codec ... - unsupported – A2DPWB が実装していないその他のベンダーコーデックです。

最大メディアパケットサイズ(プロファイルごと)

各プロファイルの 最大メディアパケットサイズ(プロファイルの編集画面 > 詳細設定。CLI では --max-packet <バイト数>)で、Bluetooth パケット 1 つに入れる音声データの上限を 679〜1679 バイトの範囲で設定できます。ヘッドホンごとに別の値を使えます。ヘッドホン側の上限(MTU)も常に適用され、A2DPWB は小さい方を使います。変更は次回の接続から反映されます。以前のバージョンで保存したプロファイルには、それまで全体で設定していた値が入ります。

既定値の 1023 を推奨します。 Bluetooth のベースバンドパケット(3-DH5)1 つに収まる大きさです。大きくしても削減できるオーバーヘッドは 1〜2% 程度で、パケットが失われたときに失われる音声が長くなります。679 は 2-DH5 パケット 1 つ分で、LDAC が受け付ける最小値です。

送信ストリームの検証(a2dpwb_decode)

多くのヘッドホンは、使用中のコーデックを表示できません。診断 > HCI キャプチャを開始 / HCI キャプチャを停止 で、HCI パケットログ(設定フォルダーの hci_<日付>_<時刻>.pklg)を記録できます。コーデックの交渉内容と送信したすべてのメディアパケットが記録されます。LDAC 990 kbps では 1 時間あたり約 0.5 GB 増えるため、必要な間だけ記録してください。CLI モードでは --hci-capture <file.pklg> で実行全体を記録します。

キャプチャは接続前でもストリーミング中でも開始できます。接続中に開始した場合は、A2DPWB が記憶していた接続確立時のパケット(L2CAP チャネルの確立と、コーデック交渉を含む AVDTP シグナリング)を先に書き込むので、途中からでも解析できます。記録中と停止後は、診断にファイルのパスが表示されます。

キャプチャは Wireshark で開けるほか、開発者向けツール a2dpwb_decode(ソースからビルド。ビルドを参照)で検証できます。

a2dpwb_decode "%APPDATA%\A2DPWB\hci_20260925_120000.pklg" -o C:\temp\check

このツールは AVDTP シグナリング(SET_CONFIGURATION / RECONFIGURE と、ヘッドホンがそれを受け入れたか)を追跡し、A2DPWB が送信したメディアパケットを取り出して、交渉した設定と照合します。

コーデック 検証内容 出力
SBC・AAC・aptX・aptX HD・aptX LL リファレンスデコーダーで全体をデコード。フレームのパラメーターと設定の一致、メディアペイロードヘッダーのフレーム数 試聴用の <prefix>.<n>.<codec>.wav
LDAC フレームヘッダーのみ(同期ワード、サンプルレート、チャンネルモード、フレーム長)、フレーム数、ビットレート。オープンソースの LDAC デコーダーは存在しません レポートのみ

各ストリームについて、RTP シーケンス番号の欠落、RTP タイムスタンプの進み方、ビットレート、Bluetooth コントローラーが送信完了を報告した ACL パケット数も表示します。最終行は RESULT: OK か RESULT: PROBLEMS FOUND です(終了コード 0 / 1)。

これで分かるのは、A2DPWB が何を送信したかと、その内容が交渉したコーデックとして正しいかです。受信側は交渉したコーデックでしかデコードできないため、ヘッドホンから正しく音が出ていて、かつレポートに問題がなければ、そのコーデックが実際に使われている強い根拠になります。

診断 > 通信品質 には、ストリーミング中に A2DPWB が送信している内容を表示します: 実効ビットレート、送信パケット数、送信前に破棄したパケット(送信キューがあふれた = 電波が追いつかない)、音声取り込みの欠落、送信キュー、無線時間の使用率、そして 電波の強さ: 接続の RSSI(コントローラーの適正な受信範囲との差。0 なら適正、マイナスは弱すぎ。絶対値ではありません)と、79 ある Bluetooth チャネルのうちホッピングに使っている数(AFH)。ホームとトレイのフライアウトでは、これを 良好 / やや不安定 / 不安定 にまとめて表示します。

Bluetooth は混んだチャネルを自分で避けます(AFH)が、Wi-Fi のことはエラーから学ぶしかありません。A2DPWB は、避けるべきチャネルをコントローラーにも伝えます(AFH ホストチャネル分類)。すべての接続に適用されます:

AFH  
自動(既定) この PC が接続している 2.4 GHz の Wi-Fi のチャネルだけ(接続中は 30 秒ごとに確認し直します)。2.4 GHz の Wi-Fi につながっていないとき(未接続、5 / 6 GHz、有線)は何も伝えません
オフ 伝えない(コントローラーに任せる)
手動(例: 6,11) 指定した Wi-Fi チャネル(1〜14)

自動では、聞こえるだけの Wi-Fi(近所のアクセスポイントなど)はコントローラー自身の AFH に任せます。混んだチャネルでも避けるとホッピングの幅が 22 MHz 減り、かえって通信が悪くなることがあるためです。それでも避けたいチャネルは手動で指定してください。

Bluetooth のチャネルは常に 20 以上残します。設定は アダプタ 画面、settings.json(設定フォルダ)の "afh"、CLI モードの --afh で行います。避けている Wi-Fi チャネルは電波の行に表示されます。効果は環境次第なので、対向受信テストで測って確かめてください。

対向受信テスト(tools/linux_sink)

通信品質に表示されるのは A2DPWB が送信した内容です。実際に何が届いたかを見るには、Linux の 2 台目の PC で tools/linux_sink/a2dpwb_sink.py を起動します。その PC の普通の Bluetooth アダプター(内蔵で可)を直接(Bumble、HCI ユーザーチャネル)A2DP シンクとして動かし、LDAC を含む全コーデックで届いたメディアパケットをすべて測定して、統計をネットワーク経由で提供します。

tools/linux_sink フォルダを Linux PC にコピーして(フォルダだけで動きます)、次を実行します:

sh setup.sh      # 初回のみ: デコーダーライブラリと Python 環境(Ubuntu / Debian、Python 3.11 以上)
sudo sh run.sh   # 受信側を起動(Bluetooth アダプターを使うため root)

Windows の PC では A2DPWB を終了して(トレイ > 終了)、次を実行します:

a2dpwb-core.exe --cli --remote-sink auto -c ldac --test-tone

--remote-sink auto はローカルネットワークから受信側を見つけ、-d で別のデバイスを指定しなければ受信側の Bluetooth アダプターへ送信し、受信側の統計を 5 秒ごとと終了時に表示します: ビットレート、欠落・遅延パケット(RTP シーケンス番号)、ジッタと間隔、模擬した再生バッファの音切れ・音飛び、ストリーム/デコードのエラー、受信側の RSSI(適正な受信範囲との差。0 なら適正、マイナスは弱すぎ)。--test-tone を付けなければシステムの音を送ります。--remote-sink <host[:port]> で、探さずに受信側を指定できます。

設定 > 開発者モード で、診断に 対向受信テスト のタブが出ます。このバージョンではプレビューで、受信機のアドレスは保存しますが、まだ送信はしません。上のコマンドラインを使ってください。

パケット数は送信側・受信側ともストリームの最初のパケットから数えるので、送信数と受信数を比べられ、通常は一致します。Bluetooth は届かなかった無線パケットをコントローラーの中で再送し、A2DPWB はリンクが続く限りパケットをあきらめないため、電波が悪いときは欠落ではなく受信側の間隔・ジッタ・音切れとして現れます。電波が追いつかないときは、送信側で送信前に破棄されます。再送の回数は送信側・受信側のどちらからも取得できません。

ツールの実行中、受信側 PC の Bluetooth スタックはそのアダプターを使えません。検出は UDP ブロードキャスト(ポート 51201)なので、2 台は同じネットワークセグメントにある必要があります(そうでなければアドレスを指定します)。オプションと統計のプロトコルは tools/linux_sink/README.md を参照してください。

LE Audio(実験的)

A2DPWB は LE Audio のヘッドホンやイヤホンにも送れます(BAP ユニキャストで LC3 を接続型アイソクロナスストリームに乗せる)。ヘッドセットの音量(VCP)、メディアボタン(MCP)、左右のイヤホンの組(CSIP)、ゲーミングヘッドセット向けの低遅延モード(GMAP)にも対応します。この機能は実験的で、プロファイルごとに選びます。LE Audio デバイス用のプロファイルだけが使います。確かめたのは Bluetooth のエミュレータだけで、実機の LE Audio ヘッドホンではまだ試していません。お使いの機器では動かないこともあるので、普段の視聴には従来の A2DP のプロファイルを使ってください。

必要なもの:

  • Bluetooth 5.2 以降でアイソクロナスチャネル(ISO)に対応した USB Bluetooth アダプター(A2DP と同じく WinUSB を割り当てる)。ISO に対応していないアダプターでは「adapter does not support LE Audio (no ISO buffers)」で止まります。
  • LE Audio(LC3)に対応したヘッドホンやイヤホン。機種によっては、先に専用アプリで LE Audio を有効にする必要があります。

使い方:

  1. ヘッドホンをペアリングモードにして、プロファイルでデバイスをスキャンします。LE Audio のデバイスには LE Audio、左右一組のイヤホンには LE Audio セット の印が付きます(どちらか片方を選べば、もう片方は A2DPWB が探します)。A2DP にも対応したヘッドホンは、種類ごとに 2 回表示されます。
  2. プロファイルで LE Audio デバイス(実験的、LC3) にチェックを入れます。コーデックや品質は選べません(ヘッドホンが受け付ける一番よい LC3 の設定を A2DPWB が選びます)。取り込みはシステムループバックと仮想デバイスだけです。
  3. その下の ゲーミングヘッドセット向け低遅延(GMAP、実験的) は既定でオンです。GMAP のゲーム用の役割に対応したヘッドセットでは短い LC3 フレームを使い、それ以外のヘッドセットではどちらでも通常の設定になります。

設定画面に LE Audio のスイッチはありません。万一 LE 側がアダプターの動作を妨げるときは、settings.json(設定 > 設定フォルダ)の "le_audio_experimental": false で LE をまとめて止められます。

CLI モードでは --le-audio -d <アドレス> で LE Audio のデバイスに送ります。--le-device <アドレス> でグループのもう 1 台(もう片方のイヤホン)を加え、--le-scan で近くの LE Audio デバイスを一覧し、--le-low-latency / --le-preset <名前> で設定を選びます(LE のオプションの一覧は a2dpwb-core.exe --cli -h)。

更新

A2DPWB は GitHub Releases を 1 日に 1 回まで確認します(設定 > 起動時にアップデートを確認。アップデート確認にプレリリースを含める でベータ版も通知)。新しいバージョンがあれば、設定に表示されます。

  • インストール版: 今すぐ更新 で署名付きの更新をダウンロードします。配信中は待ち、配信を止めたときにインストールするので、更新で音が切れることはありません。A2DPWB はいったん終了し、新しいバージョンをインストールして、自動で再び起動します。
  • ポータブル版(または更新の署名がないビルド): ダウンロードページを開く でリリースのページを開きます。

トラブルシューティング

コアが動いていないと表示される

ウィンドウは隣にある a2dpwb-core.exe を自分で起動します。「A2DPWB のコアが動いていません」は起動できなかったという意味です。A2DPWB をインストールし直してください(ポータブル版なら zip を展開し直します)。「コアのバージョンが合いません」は、2 つのプログラムのバージョンが違うという意味です。両方を同じバージョンにしてください(最新のリリースをインストールすればそうなります)。

ドライバーの割り当てや復元に失敗する

  • 「管理者の確認が拒否されたため、ドライバは変更していません」: もう一度ボタンを押し、確認を許可してください。
  • 「ドライバを変更できませんでした」: 詳しくは 診断 のログを見てください。
  • 「元のドライバには戻りませんでした」: Zadig で設定したアダプターでは、Windows がまた Zadig の WinUSB ドライバーパッケージを選ぶことがあります。デバイスマネージャーでそのドライバーパッケージを削除し(アダプター > デバイスのアンインストール、「このデバイスのドライバーを削除しようとしました」にチェック)、アダプターを抜いて挿し直してください。

Bluetooth アダプターが応答しない

開いたアダプターから何も返ってこない(HCI Reset に応答しない)場合、A2DPWB は 5 秒で見切り、もう一度だけ開き直します。それでも応答しなければ「Bluetooth アダプターが応答しません」と表示します。アダプターを抜いて挿し直してから、もう一度お試しください(または Bluetooth を再起動)。A2DPWB の再起動は不要です。開始に失敗してもアダプターは解放され、次の開始で初期化し直します。

アダプターが固まらないよう、A2DPWB は開くときに USB パイプをリセットし、閉じるときに HCI Reset を送ります。

アップデート後にペアリングがうまくいかない

A2DPWB は SSP(Just Works)と General Bonding でペアリングし、リンクキーを保存するため、次回以降はペアリングし直さずに再接続できます(v2 は v1 のリンクキーを読みます)。以前のバージョンの A2DPWB でペアリングしたヘッドホンにつながらなくなった場合は、ヘッドホン側で A2DPWB のペアリング情報を削除し(ペアリング履歴の消去方法はヘッドホンの説明書を参照)、改めてペアリングしてください。

接続がタイムアウトする

A2DPWB は SDP レコード(A2DP Source、AVRCP Controller / Target)を登録し、ヘッドホンがオーディオソースとして認識できるようにしています。接続がタイムアウトした場合は中途半端な接続が破棄されるため、A2DPWB を再起動せずにそのまま再試行できます。ヘッドホンの電源が入っていること、通信範囲内にあること、他の機器に接続されていないことを確認してください。

接続が確立した後に通信が届かなかった場合と、ヘッドホンが応答しなかった場合は、自動で再試行します(最大 3 回)。ヘッドホンがペアリング情報を失っている場合(リセットや別の PC とのペアリング)は、保存したキーを破棄して 1 回だけペアリングし直します。失敗したときは、何が起きたかを表示します:

メッセージ 意味
デバイスが応答しません 電源オフ、範囲外、または接続できない状態(新しいデバイスはペアリングモードに)
接続は確立しましたが、その後の通信が届きませんでした 電波状態: もう一度試すか、アダプターとデバイスの位置を見直す
デバイスは応答しましたが、デバイス側から接続を切られました 今は接続を受け付けない状態: 電源を切る途中、充電中、別の機器と接続中など
認証に失敗しました(ペアリングし直しても失敗) デバイスをペアリングモードにするか、デバイス側のペアリング情報を削除して再試行

切れた接続は自動で再接続します(最大 10 回)。配信中に PC がスリープに入ったときは、復帰した後に再接続します。この再接続は回数に数えません。