Site Tools


hardwarerelated:headset:sony_wh-1000xm2

Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Both sides previous revisionPrevious revision
Next revision
Previous revision
hardwarerelated:headset:sony_wh-1000xm2 [2021/02/09 01:59] – [Errors & solutions] chrishardwarerelated:headset:sony_wh-1000xm2 [2024/03/03 06:44] (current) – [Bluetooth profiles] chris
Line 1: Line 1:
 +====== What? ======
 +Just some notes around the Sony WH-1000XM2
 +  * pro: wireless: bluetooth profiles for headset and High Fidelity playback (A2DP)
 +  * pro: quite good noise cancelling
 +  * pro: build in rechargable battery
 +  * con: when the cable is used, only headphone functionality is available. No microphone signal goes over the analog cable.
 +  * con: after 60min of wearing, I need to take the headset off
  
 +===== Links =====
 +  * [[https://www.youtube.com/watch?v=VnzIIhLNHqg|Queen - Bohemian Rhapsody - AUDIO 3DD]]
 +  * [[https://lineageos.org/engineering/Bluetooth-SBC-XQ/|LineageOS implements now SBC XQ, comparable to aptX and aptX HD]] 
 +  * https://wiki.archlinux.org/index.php/PipeWire -- Archlinux great PipeWire docs
 +  * [[/hardwarerelated/headset/sony_wh-1000xm2_pa|Sony WH-1000XM2 pulseaudio notes]] (newer distros have pipewire)
 +
 +====== Bluetooth profiles ======
 +As of Fedora34 with pipewire, following bluetooth profiles which are supported on Fedora34 can also be used with the Sony WH-1000XM2. First is the name as seen in 'pactl list cards', then a description.
 +
 +  * **These modes provide pure audio, and do not transport the microphone signal to the computer**
 +    * a2dp-sink: High Fidelity Playback (A2DP Sink), good audio quality
 +    * a2dp-sink-sbc: High Fidelity Playback (A2DP Sink, codec SBC), good audio quality
 +    * a2dp-sink-sbc_xq: High Fidelity Playback (A2DP Sink, codec SBC-XQ), better audio quality
 +    * a2dp-sink-aac: High Fidelity Playback (A2DP Sink, codec AAC), better audio quality
 +    * a2dp-sink-ldac: High Fidelity Playback (A2DP Sink, codec LDAC), best audio quality
 +  * **These modes provide audio + micro channel, so for example useful for chats and conferences**
 +    * headset-head-unit: Headset Head Unit (HSP/HFP), bad quality
 +    * headset-head-unit-cvsd: Headset Head Unit (HSP/HFP, codec CVSD), bad quality, 16KHz/16 bit
 +    * headset-head-unit-msbc: Headset Head Unit (HSP/HFP, codec mSBC), better quality, 48KHz/16 bit
 +
 +"Hands-Free Profile (HFP) Version 1.6 adds optional support for wide band speech with the mSBC codec, a 16 kHz monaural configuration of the SBC codec mandated by the A2DP profile." That is usable on Fedora34, it was implemented in Pulsaudio 15 and pipewire 0.3.23. For headset-head-unit-msbc, it might be required to modify a config file as follows:
 +<code>
 +$ mkdir -p /etc/pipewire/media-session.d/
 +$ cp /usr/share/pipewire/media-session.d/bluez-monitor.conf /etc/pipewire/media-session.d/
 +$ vi /etc/pipewire/media-session.d/bluez-monitor.conf
 +### set this:
 +bluez5.msbc-support   = true
 +bluez5.sbc-xq-support = true
 +</code>
 +===== Fedora 34 and later / pipewire based setups =====
 +<code>
 +### Let's install the required packages.
 +$ sudo dnf install -y pipewire-alsa pipewire-pulseaudio pipewire
 +  
 +### Now ensure dbus and pipewire are running as your user, and enabled.
 +$ systemctl --user restart dbus pipewire-pulse pipewire
 +$ systemctl --user enable dbus pipewire-pulse pipewire
 +$ systemctl --user status dbus pipewire-pulse pipewire
 +
 +$ sudo systemctl status bluetooth.service
 +
 +$ bluetoothctl 
 +Agent registered
 +[CHG] Controller XX:XX:XX:XX:XX:B7 Pairable: yes
 +[LE_WH-1000XM2]# scan on
 +Discovery started
 +[CHG] Controller XX:XX:XX:XX:XX:B7 Discovering: yes
 +[CHG] Device XX:XX:XX:XX:XX:85 RSSI: -48
 +[CHG] Device XX:XX:XX:XX:XX:85 TxPower: 4
 +[CHG] Device XX:XX:XX:XX:XX:85 Name: WH-1000XM2
 +[CHG] Device XX:XX:XX:XX:XX:85 Alias: WH-1000XM2
 +[NEW] Device XX:XX:XX:XX:XX:6D XX:XX:XX:XX:XX:6D
 +[LE_WH-1000XM2]#  trust XX:XX:XX:XX:XX:85
 +Changing XX:XX:XX:XX:XX:85 trust succeeded
 +[LE_WH-1000XM2]# connect XX:XX:XX:XX:XX:85
 +Attempting to connect to XX:XX:XX:XX:XX:85
 +Connection successful
 +[CHG] Device XX:XX:XX:XX:XX:85 RSSI: -59
 +[CHG] Device XX:XX:XX:XX:XX:85 Name: LE_WH-1000XM2
 +
 +$ sudo bluetoothctl
 +[bluetooth]# power on
 +[bluetooth]# agent on
 +[bluetooth]# default-agent
 +[bluetooth]# scan on
 +[NEW] Device XX:XX:XX:XX:XX:XX WH-1000XM2
 +[bluetooth]# scan off
 +[bluetooth]# trust XX:XX:XX:XX:XX:XX
 +[bluetooth]# pair XX:XX:XX:XX:XX:XX
 +Attempting to pair with XX:XX:XX:XX:XX:XX
 +[CHG] Device XX:XX:XX:XX:XX:XX Connected: yes
 +[CHG] Device XX:XX:XX:XX:XX:XX UUIDs: ... 
 +[CHG] Device XX:XX:XX:XX:XX:XX UUIDs: ... 
 +[CHG] Device XX:XX:XX:XX:XX:XX Paired: yes
 +Pairing successful
 +[CHG] Device XX:XX:XX:XX:XX:XX Connected: no
 +[bluetooth]# connect XX:XX:XX:XX:XX:XX
 +Attempting to connect to XX:XX:XX:XX:XX:XX
 +[CHG] Device XX:XX:XX:XX:XX:XX Connected: yes
 +Connection successful
 +[bluetooth]# quit
 +
 +### Which codec is currently active?
 +$ pactl info
 +$ pactl list sinks
 +[..]
 +Sink #199
 +[..]
 +        Description: WH-1000XM2
 +        Driver: PipeWire
 +        Sample Specification: s16le 2ch 48000Hz
 +[..]
 +        Properties:
 +                api.bluez5.transport = ""
 +                api.bluez5.profile = "a2dp-sink"
 +                api.bluez5.codec = "sbc"
 +[..]
 +OR
 +                api.bluez5.codec = "aac"  (aac codec, high quality)
 +OR
 +                api.bluez5.codec = "ldac" (for low latency)
 +OR
 +                api.bluez5.codec = "cvsd" (for headset use, with micro on)
 +
 +### Change profile, way 1
 +$ sudo dnf install -y pavucontrol
 +$ pavucontrol
 +
 +### Change profile, way 2
 +$ pactl list cards
 +Card #197
 +  Name: bluez_card.70_26_05_9D_31_85
 +  Driver: module-bluez5-device.c
 +  Owner Module: n/a
 +  Properties:
 +  [..]
 +  Profiles:
 +    off: Off (sinks: 0, sources: 0, priority: 0, available: yes)
 +    a2dp-sink: High Fidelity Playback (A2DP Sink) (sinks: 1, sources: 0, priority: 0, available: yes)
 +    headset-head-unit: Headset Head Unit (HSP/HFP) (sinks: 1, sources: 1, priority: 0, available: yes)
 +    a2dp-sink-sbc: High Fidelity Playback (A2DP Sink, codec SBC) (sinks: 1, sources: 0, priority: 0, available: yes)
 +    a2dp-sink-aac: High Fidelity Playback (A2DP Sink, codec AAC) (sinks: 1, sources: 0, priority: 0, available: yes)
 +    a2dp-sink-ldac: High Fidelity Playback (A2DP Sink, codec LDAC) (sinks: 1, sources: 0, priority: 0, available: yes)
 +    headset-head-unit-cvsd: Headset Head Unit (HSP/HFP, codec CVSD) (sinks: 1, sources: 1, priority: 0, available: yes)
 +    headset-head-unit-msbc: Headset Head Unit (HSP/HFP, codec mSBC) (sinks: 1, sources: 1, priority: 0, available: yes)
 +  Active Profile: a2dp-sink-ldac
 +  [..]
 +$ pactl set-card-profile bluez_card.70_26_05_9D_31_85 a2dp-sink-sbc
 +</code>
 +
 +===== Errors & solutions =====
 +== Problem ==
 +  * 'blueman-applet' says when trying to connect to the headset "protocol not available.
 +  * bluetoothctl reports this:
 +<code>
 +[chris@電脳 ~]$ bluetoothctl
 +Agent registered
 +[CHG] Controller 34:E1:2D:7C:61:B7 Pairable: yes
 +[bluetooth]# scan on
 +Discovery started
 +[CHG] Controller 34:E1:2D:7C:61:B7 Discovering: yes
 +[..]
 +[CHG] Device 70:26:05:9D:31:85 Name: LE_WH-1000XM2
 +[CHG] Device 70:26:05:9D:31:85 Alias: LE_WH-1000XM2
 +[bluetooth]# trust 70:26:05:9D:31:85
 +Changing 70:26:05:9D:31:85 trust succeeded
 +[NEW] Device 4D:E9:CA:BF:05:3B 4D-E9-CA-BF-05-3B
 +[bluetooth]# connect 70:26:05:9D:31:85
 +Attempting to connect to 70:26:05:9D:31:85
 +Failed to connect: org.bluez.Error.Failed
 +</code>
 +  * When trying to connect in 'blueman-applet', error "unknown protocol" appears, and "systemctl status bluetooth.service" reports:
 +<code>
 +bluetoothd[23]: src/service.c:btd_service_connect() a2dp-sink profile connect failed for 70:26:05:9D:31:85: Protocol not available
 +bluetoothd[23]: src/service.c:btd_service_connect() a2dp-sink profile connect failed for 70:26:05:9D:31:85: Protocol not available
 +</code>
 +== Solution 1 (pulseaudio based setups only) ==
 +  * Ensure package pulseaudio-module-bluetooth-freeworld or pulseaudio-module-bluetooth is installed.
 +  * If you installed the package after starting pulseaudio or your Xorg session, then do this as user:
 +<code>
 +killall pulseaudio
 +pulseaudio --start
 +</code>
 +== Solution 2 ==
 +Install package blueman and run 'blueman-manager', for me that frontend was able to connect when 'bluetoothctl' could not.