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 が不安定なんだと思います.
以上

