Ubuntu で SBC/AAC/LDAC/Headset の別を切り替える備忘録です.
Ubuntu で Bluetooth 接続のイヤフォンやスピーカーをつなぐと,望んでいないプロファイルやコーデックで接続されることがあります.これを切り替える方法がよく分かっていなかったんですが,以下で良いみたいです.
まず,どんな接続に対応しているのかを調べるのは pacmd コマンドを使うようです.例として手持ちの SONY WF-1000XM3 の場合は以下の通り.
$ pacmd list-cards .... index: 3 name: <bluez_card.38_18_4C_AA_AA_AA> driver: <module-bluez5-device.c> owner module: 31 properties: device.description = "WF-1000XM3" device.string = "38:18:4C:AA:AA:AA" device.api = "bluez" device.class = "sound" device.bus = "bluetooth" device.form_factor = "headset" bluez.path = "/org/bluez/hci0/dev_38_18_4C_5E_C7_B1" bluez.class = "0x240404" bluez.alias = "WF-1000XM3" device.icon_name = "audio-headset-bluetooth" device.intended_roles = "phone" profiles: headset_head_unit: Headset Head Unit (HSP/HFP) (priority 30, available: unknown) a2dp_sink_sbc: High Fidelity Playback (A2DP Sink: SBC) (priority 40, available: no) a2dp_sink_aac: High Fidelity Playback (A2DP Sink: AAC) (priority 40, available: unknown) a2dp_sink_aptx: High Fidelity Playback (A2DP Sink: aptX) (priority 40, available: no) a2dp_sink_aptx_hd: High Fidelity Playback (A2DP Sink: aptX HD) (priority 40, available: no) a2dp_sink_ldac: High Fidelity Playback (A2DP Sink: LDAC) (priority 40, available: no) off: Off (priority 0, available: yes) active profile: <headset_head_unit> sinks: bluez_sink.38_18_4C_AA_AA_AA.headset_head_unit/#2: WF-1000XM3 sources: bluez_sink.38_18_4C_AA_AA_AA.headset_head_unit.monitor/#4: Monitor of WF-1000XM3 bluez_source.38_18_4C_AA_AA_AA.headset_head_unit/#5: WF-1000XM3 ports: headset-output: Headset (priority 0, latency offset 0 usec, available: unknown) properties: headset-input: Headset (priority 0, latency offset 0 usec, available: unknown) properties: ....
profiles の欄に選択可能なものが表示されます.もちろん available: no となっているものは使えません(SBC には対応しているはずなんですが……,なぜか no となっています).したがって,上のリストの場合,使える可能性があるのは,unknown か yes の
- HSP/HFP
- A2DP Sink: AAC
- Off
の3種類です.
切り替えは,index 番号 3 と,プロファイル名を指定して行います.
$ pacmd set-card-profile 3 a2dp_sink_aac
特に何もエラー等表示されなければ大丈夫です.
これ,実際に音を流している最中でも切り替えられます.実際,AAC から headset_head_unit に切り替えると明らかに音質が変わります.
なお,上にも書きましたが headset_had_unit プロファイルしか使えないとか,逆に a2dp_sink_aac しか使えないとかいう場合もありますが,この場合は何回か接続し直すと直ることが多いので,まだ bluez が不安定なんだと思います.
以上