How to Check Which Bluetooth A2DP Audio Codec Is Used on Windows
- Windows General
- Published Sep 9, 2020 Updated Sep 16, 2020
This is a follow-up to my earlier article Bluetooth Audio Quality & aptX on Windows 10, based on a comment by reader eluxe.
Windows makes it unnecessarily hard to identify the audio codec used by the Bluetooth A2DP profile, but there is a way. This post shows how to check if your connection makes use of aptX, LDAC, or some other more advanced codec, or if it falls back to SBC.
 by Joe Haupt under [CC](https://creativecommons.org/licenses/by-sa/2.0/)](/images/2020/09/generated/Vintage-Zenith-Royal-755LG-Portable-Transistor-Radio@2x_400w.289baa5e91011be6b9f44489ea55542712dfb0c116e695f7b993628838148281.webp)
The Procedure
The process only involves two steps:
- Collecting ETL logs with Windows Performance Recorder (WPR)
- Processing the logs with Windows Performance Analyzer (WPA)
Collecting Bluetooth ETL Logs With WPR
Open an elevated PowerShell prompt (i.e., with admin rights)
Navigate to a temporary directory
Download Microsoft’s custom Bluetooth tracing recording profile for WPR:
wget https://github.com/Microsoft/busiotools/raw/master/bluetooth/tracing/BluetoothStack.wprp -outfile .\BluetoothStack.wprpStart the trace:
wpr.exe -start BluetoothStack.wprp!BluetoothStack -filemodeStart playing audio via your Bluetooth device
Stop the trace:
wpr.exe -stop BthTracing.etlYou should now have a file called
BthTracing.etl
Source and more information: Microsoft’s busiotools GitHub repository
Processing Bluetooth ETL Logs With WPA
Double-click the trace file BthTracing.etl to open it in Windows Performance Analyzer (WPA). You should see a window that looks similar to this:

Close all the default charts and tables in the main area by clicking the x in the upper right corner. Then double click the preview chart below System Activity in the upper left corner. The window should now look like this:

Click the loupe symbol and enter a2dpstreaming:

After clicking Find all you should see two events highlighted in the table:

We are only interested in the second event with the task name A2dpStreaming. Unfortunately, the default columns do not have any meaningful information for us, and WPA makes it really quite hard to get to the interesting fields.
Right-click the column header and select Open View Editor:

De-select the fields Id, Process, Cpu, and ThreadId. From the left column drag and drop the fields 4 through 6 (Field 4, Field 5, Field 6) to the main area below the golden bar. It should look like this:

Rearranging the columns a bit for readability we finally see the information we need:

Interpreting the Result
All the fiddling around with WPA had the sole purpose of revealing the data of three fields:
A2dpStandardCodecId(field 4)A2dpVendorId(field 5)A2dpVendorCodecId(field 6)
The following table shows the values from my Bluetooth connection, both in decimal (as displayed by WPA) and in hexadecimal:
| Field | Value (dec) | Value (hex) |
|---|---|---|
| A2dpStandardCodecId | 255 | 0xFF |
| A2dpVendorId | 79 | 0x004F |
| A2dpVendorCodecId | 1 | 0x01 |
A complete list of Bluetooth vendor IDs can be found on the website of the Bluetooth SIG. We should not need it, though, because, luckily, an author called ValdikSS already compiled the relevant information in their excellent article Audio over Bluetooth: most detailed information about profiles, codecs, and devices. I’ll copy just the information required to interpret the data we collected.
A2DP has three types of codecs: mandatory, optional, and vendor-specific.
Mandatory A2DP Codecs
| Standard codec ID | Vendor ID | Vendor codec ID | Codec name |
|---|---|---|---|
| 0x00 | [empty] | [empty] | SBC |
Optional A2DP Codecs
| Standard codec ID | Vendor ID | Vendor codec ID | Codec name |
|---|---|---|---|
| 0x01 | [empty] | [empty] | MPEG-1,2 (aka MP3) |
| 0x02 | [empty] | [empty] | MPEG-2,4 (aka AAC) |
| 0x04 | [empty] | [empty] | ATRAC |
Vendor-Specific A2DP Codecs
| Standard codec ID | Vendor ID | Vendor codec ID | Codec name |
|---|---|---|---|
| 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 |
Conclusion
Looking once again at my values, we see in the tables above that a standard codec ID of 0xFF indicates a vendor-specific code. We can learn from the corresponding table that the vendor ID 0x004F and the vendor codec ID 0x01 stand for the aptX codec. This proves what I had suspected in my original article: Windows 10 supports aptX.








Comments