[Windows] Bluetoothイヤホンが使用しているコーデックを確認する
Bluetoothイヤホンは、SBCやaptX、AACなどのコーデックを使用して音声データを伝送しています。
それぞれのコーデックは、対応している環境でないと使用ができません。
各コーデックの違いについてはこちらを参照ください。
Windows 10は、OSレベルでSBC、aptX、AACに対応していますが、実際にどのコーデックが使用されるかは、設定画面等で確認ができません。
Windowsに接続されたBluetoothイヤホンの使用コーデックは、以下の手順でログを採取することで確認ができます。
環境
OS | 検証Bluetoothイヤホン |
---|---|
Windows 10 Pro 64-bit | TaoTronics Duo Free + |
インストールしておくもの
WPRのBluetoothトレース用プロファイルをダウンロードする
Windows 10には、WPR(Windows Performance Recorder)というパフォーマンス記録ツールが標準で入っています。
docs.microsoft.com
このツールは、機能別にログを吐き出す便利な機能を持っているのですが、Bluetoothのログを取得するプロファイルを標準で持っていません。
MicrosoftがGitHubでプロファイルを公開しているので、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
を開きます。
ファイルの読み込みをしばらく待つと、以下のような画面になります。
System Activityのツリーを開き、Generic Eventsのグラフをダブルクリックし、ある程度解析された状態のログを表示します。
ログウィンドウの左上にある検索アイコンでa2dpstreaming
と入力し、Find All
をクリックします。
しばらく待つと、A2dpStreaming
というTask Nameのイベントログが見つかります。これが、解析対象のログとなります。
対象のログをクリックし、右に隠れている以下の項目の値を確認します。また、それぞれの値を16進数に変換してください。
今回の検証だと以下のようになります。
A2dpStandardCodeId(Field 4) | A2dpVendorId(Field 5) | A2dpVendorCodeId(Field 6) |
---|---|---|
255 | 79 | 1 |
0xFF | 0x004F | 0x01 |
コーデックを特定する
先ほど取得した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に対応していた!(でもなんでよく遅延したり途切れるんだろう...)