ubuntu 20.04 でSONY のヘッドホンWH-1000XM4 をLDAC で接続したい！！

こんにちは, まちゃです！
今回は2020年9月4日に発売したSony のヘッドホンWH-1000XM4 をLDAC で繋いだのでやったことを書いていきたいと思います！

デバイス情報
-
|OS|ubuntu 20.04|
|:-:|:-:|
|ウィンドウマネージャー|i3 wm|

※送信側がLDAC に対応していないとLDAC では接続できません.

bluetooth の接続
-
今回は`bluetoothctl`を使って接続しました.
早速やっていこう！

```
$ $ sudo apt install bluez # 今回使うbluetoothctl コマンドをインストール(既にあれば不要)
$ bluetoothctl # 対話コマンドを実行
[bluetooth]# power on # コントローラーの電源をオンにする(デフォルトではオフ)
[bluetooth]# scan on # デバイスのスキャンを開始(外でやるとすごいことになるw)
[new] Device MACアドレス ... # PCから認識可能のデバイスがズラーッと出てくる
[bluetooth]# pair MACアドレス # MACアドレスのデバイスに対してペアリングをする
Attempting to pair with MACアドレス # MACアドレスのデバイスにペアリングを試す
[CHG] Device MACアドレス Connected: yes
...
Pairing successful # これが表示されれば成功(既にペアリングしてるとFaild になる)
[bluetooth]# connect MACアドレス # ペアリングしたデバイスにコネクトする
[CHG] Device MACアドレス Connected: yes
Connection successful # これとコマンド入力の前の文字が[bluetooth]から[デバイス名]に変わったら成功
[デバイス名]# exit
```
WH_1000XM4 を接続したい方はデバイス名がWH-1000XM4 を選択肢て下さい！
もう一つLE_WH_1000XM4 を選択すると上手く行きません！注意して下さい！

接続は終了！
最後に僕がつまずいたところを書いておきますw

LDAC をインストール
-
以下のコマンドを実行するとインストールできるのでやっていこう！

```
$ sudo add-apt-repository ppa:berglh/pulseaudio-a2dp
$ sudo apt update
$ sudo apt install libldac pulseaudio-modules-bt
$ sudo apt install libavcodec-extra58 libfdk-aac1 bluez pulseaudio
$ sudo apt install blueman
$ pulseaudio -k
$ pulseaudio --start
```

[pulseaudioについて](https://wiki.archlinux.jp/index.php/PulseAudio)

LDAC での接続の設定
-

以下のコマンドで現在接続しているオーディオ機器の設定やらなんやらを確認できるのでやっていこう！

```
$ pacmd list-cards
...
    index: 2
        name: <bluez_card.94_DB_56_88_DA_AC>
        driver: <module-bluez5-device.c>
        owner module: 24
        properties:
                device.description = "WH-1000XM4"
                device.string = "94:DB:56:88:DA:AC"
                device.api = "bluez"
                device.class = "sound"
                device.bus = "bluetooth"
                device.form_factor = "headset"
                bluez.path = "/org/bluez/hci0/dev_94_DB_56_88_DA_AC"
                bluez.class = "0x240404"
                bluez.alias = "WH-1000XM4"
                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: unknown)
                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: yes)
                off: Off (priority 0, available: yes)
        active profile: <a2dp_sink_ldac>
        sinks:
                bluez_sink.94_DB_56_88_DA_AC.a2dp_sink/#2: WH-1000XM4
        sources:
                bluez_sink.94_DB_56_88_DA_AC.a2dp_sink.monitor/#4: Monitor of WH-1000XM4
        ports:
                headset-output: Headset (priority 0, latency offset 0 usec, available: yes)
                        properties:

                headset-input: Headset (priority 0, latency offset 0 usec, available: unknown)
                        properties:
```
このサンプルは僕の状態なのでそれぞれ変わってきます
この中の`profiles`にldac の欄がなければ上でインストールできていないので, もう一度やってみましょう！
もしあって`available`がno だった場合残念ながら使うことができません...
yes は確実に使えます. ただunknown は指定しないとわからないので使いたいのがunknown ならしたのコマンドで指定していこう！

```
$ pacmd set-card-profile 'index 番号' a2dp_sink_ldac
```

index 番号は'' を消して数字を指定します. 僕の場合だと2 になります！
`a2dp_sink_ldac`はprofiles 内にあるものなら指定可能です！
特にエラーがなければ成功です！

これで終わりです！！
お疲れ様でしたー！！
最後にハマったところを書いていきたいと思いますw

WH-1000XM4 に一日搾り取られた話
-
上の記事を見た方はお気づきかも知れませんがbluetoothctl で繋ぐときにLE_WH_1000XM を何かを知らず永遠と選択して一日とかしましたw
なぜこれで溶かしたかを解説していきたいと思います！

### 頭のLE って何？
このLE って何？って疑問を持つ方がたくさんいると思うので解説していきます！

これは`Bluetooth Low Energy`という無線PAN技術のことです.
これはBluetooth 4.0 から追加された低消費電力の通信モードで, Bluetooth Basic Rate/Enhanced Data Rate (BR/EDR) と Bluetooth Low Energy (LE) で構成されています.
通信速度はBluetooth 4 だと1Mbps, 5 だと2Mbps, 1Mbps, 500kbps, 125bps となっているが色々な制約により10kbps くらいになっている. `省電力`に主眼をおいているのでこの様な結果になっている. `通信速度を最低限にすれば消費電力は少ない`当たり前ですね！w
また, 到達距離についても30m 以上の距離を設定することができるが, 通信速度と同じ理由で実際には5m くらいになっています. 余談ですが, Bluetooth 5 で通信速度を125kbps にすると最大到達距離が400m と化物になるみたいですw

終わりに
-
今回はこんな感じで終わりです！
届いてそんなに日が経ってないんですけど, これ最高です！
QOL 爆上がり！！w
ちなみに8月半ばに予約して最速で入手しました！w

最後まで見てくださりありがとうございました！
時間があれば`ubuntu 20.04`でイコライザーの設定を書こうと思ってるので良かったらそっちも見ていって下さい！

参考文献
-
- https://wiki.archlinux.jp/index.php/Bluetooth
- https://wiki.archlinux.jp/index.php/PulseAudio
- http://kazunorisakai.com/posts/2020/%205/21/ubuntudeldac/
- https://www.labohyt.net/blog/gadget/post-4569/