FivesTech Knowledge

コロナ禍でもめげずに頑張るエンジニアの備忘録

[Windows] Bluetoothイヤホンが使用しているコーデックを確認する

Bluetoothイヤホンは、SBCやaptX、AACなどのコーデックを使用して音声データを伝送しています。
それぞれのコーデックは、対応している環境でないと使用ができません。

各コーデックの違いについてはこちらを参照ください。

Windows 10は、OSレベルでSBC、aptX、AACに対応していますが、実際にどのコーデックが使用されるかは、設定画面等で確認ができません。
Windowsに接続されたBluetoothイヤホンの使用コーデックは、以下の手順でログを採取することで確認ができます。

環境

OS 検証Bluetoothイヤホン
Windows 10 Pro 64-bit TaoTronics Duo Free +

インストールしておくもの

Windows Performance Analyzer

WPRのBluetoothトレース用プロファイルをダウンロードする

Windows 10には、WPR(Windows Performance Recorder)というパフォーマンス記録ツールが標準で入っています。 docs.microsoft.com
このツールは、機能別にログを吐き出す便利な機能を持っているのですが、Bluetoothのログを取得するプロファイルを標準で持っていません。
MicrosoftGitHubでプロファイルを公開しているので、PowerShellを開き以下のコマンドでダウンロードします。

Invoke-WebRequest -Uri https://github.com/Microsoft/busiotools/raw/master/bluetooth/tracing/BluetoothStack.wprp -outfile .\BluetoothStack.wprp

コマンドを実行したディレクトリに、BluetoothStack.wprpというファイルがダウンロードされます。

WPRでBluetoothのログを取得する

ダウンロードしたファイルは、WPRでプロファイルとして使用できます。
Powershellを管理者権限で実行し、プロファイルをダウンロードしたディレクトリに移動した後、以下のコマンドを実行します。

wpr.exe -start BluetoothStack.wprp!BluetoothStack -filemode

コマンド実行後は何も出力されませんが、すでにBluetoothのトレースが開始されています。
Bluetoothイヤホンを接続し、何か音楽でも流してください。

私は水瀬いのりさんのファンなので、以下の動画を流してました。 www.youtube.com

1分ほど流したら十分だと思います。
以下のコマンドで、トレースを終了します。

 wpr.exe -stop BthTracing.etl

コマンドを実行したディレクトリに、BthTracing.etlというログファイルが出力されます。 これで、Blutoothのログの取得は完了です。

ログファイルを解析する

出力されたログファイルはイベントビューアー等で開けるのですが、非常に見にくい上にログの数が膨大なためフィルターにも時間がかかります。
事前にインストールしたWindows Performance Analyzerで簡単に解析ができるので、起動してみましょう。

起動したら、上部メニューの [File]→[Open] から、取得したログファイルBthTracing.etlを開きます。

f:id:fivestech:20210301004244p:plain

ファイルの読み込みをしばらく待つと、以下のような画面になります。

f:id:fivestech:20210301004934p:plain

System Activityのツリーを開き、Generic Eventsのグラフをダブルクリックし、ある程度解析された状態のログを表示します。

f:id:fivestech:20210301004949p:plain

ログウィンドウの左上にある検索アイコンでa2dpstreamingと入力し、Find Allをクリックします。

f:id:fivestech:20210301005005p:plain

しばらく待つと、A2dpStreamingというTask Nameのイベントログが見つかります。これが、解析対象のログとなります。

f:id:fivestech:20210301005017p:plain

対象のログをクリックし、右に隠れている以下の項目の値を確認します。また、それぞれの値を16進数に変換してください。
今回の検証だと以下のようになります。

A2dpStandardCodeId(Field 4) A2dpVendorId(Field 5) A2dpVendorCodeId(Field 6)
255 79 1
0xFF 0x004F 0x01

f:id:fivestech:20210301005033p:plain

コーデックを特定する

先ほど取得した3つの値はそれぞれ以下の意味となります。

A2dpStandardCodeId(Field 4) A2dpVendorId(Field 5) A2dpVendorCodeId(Field 6)
コーデック識別子 ベンダー識別子 ベンダーコーデック識別子

値の組み合わせを解析するためには各コーデックの仕様書を確認する必要があるのですが、海外のこちらの記事で、値の組み合わせと相対するコーデックがまとめられていたため、引用します。

コーデック識別子 ベンダー識別子 ベンダーコーデック識別子 コーデック名
0x00 SBC
0x01 MPEG-1,2 (aka MP3)
0x02 MPEG-2,4 (aka AAC)
0x04 ATRAC
0xFF 0x004F 0x01 aptX
0xFF 0x00D7 0x24 aptX HD
0xFF 0x000A 0x02 aptX Low Latency
0xFF 0x00D7 0x02 aptX Low Latency
0xFF 0x000A 0x01 FastStream
0xFF 0x012D 0xAA LDAC
0xFF 0x0075 0x0102 Samsung HD
0xFF 0x0075 0x0103 Samsung Scalable Codec
0xFF 0x053A 0x484C Savitech LHDC
0xFF 0x000A 0x0104 The CSR True Wireless Stereo v3 Codec ID for AAC
0xFF 0x000A 0x0105 The CSR True Wireless Stereo v3 Codec ID for MP3
0xFF 0x000A 0x0106 The CSR True Wireless Stereo v3 Codec ID for aptX

今回の検証では0xFF、0x004F、0x01という組み合わせだったため、使用されていたコーデックはaptXということになります。 Taotronics Duo Free +はaptXに対応していた!(でもなんでよく遅延したり途切れるんだろう...)

参考

helgeklein.com