Shokzのイヤホンを買ったのでLinuxで使えるようにする

Bluetooth接続の骨伝導イヤフォンを買ったのだが,これをLinuxで使えるようにする.

A2DPHFP/HSP

Bluetoothでイヤフォンを扱う場合には,プロファイルを選択する必要がある. A2DPHFP/HSPというのはそのプロファイルのことであり,

wiki.archlinux.org

この辺に書いてある.

大きく分けでA2DPは主に音楽を聞くためにステレオになるのだが,HFP/HSPは必ずモノラルになる.

で,大きな問題として普通Linuxで入れているPulseAudioはA2DPのプロファイルは用意しているのだが,HFP/HSPに対応していないということ. これの何が困るのかというと,HFP/HSPに対応していないとイヤフォン付属のマイクを入力として認識できないということだ. pavucontrolとかで入力デバイスを探しても,Bluetoothイヤフォンに付属するマイクは入力として認識されていない.

そして,PulseAudioはHFP/HSPに対応していないので,そもそもプロファイルを切り替えることができない.

PipeWireを使う

この解決策は,PipeWireを使うことだ.

wiki.archlinux.org

まず,pulseaudioっぽいパッケージをすべてアンインストールする.

$ sudo pacman -Rdd manjaro-pulse pulseaudio pulseaudio-alsa pulseaudio-equalizer pulseaudio-jack pulseaudio-lirc pulseaudio-rtp pulseaudio-zeroconf pulseaudio-bluetooth pulseaudio-ctl sof-firmware

で,pipewireを入れる.

$ sudo pacman -S manjaro-pipewire
$ systemctl --user enable pipewire
$ systemctl --user start pipewire

としておく.これでOSを再起動すると,

$ pactl info
...
Server Name: PulseAudio (on PipeWire 0.3.70)
Server Version: 15.0.0
...

となればOK.

これで,pavucontrolのデバイス一覧から,ShokzのプロファイルをHFP/HSPに変更することで,付属マイクを入力デバイスとして認識してくれる.

参考: https://blastoise.hashnode.dev/wireless-headset-microphone-issue-for-linux

Polybarでマイクのボリュームを表示する

今までは

github.com

これを使っていたんだけど,こいつは内部的にpacmdに依存している.

https://github.com/MarcDonald/polybar-mic-volume/blob/47fce14e39c709171c234e7aa713903ee53d9906/mic-volume/mic-volume.sh#L23

pacmdはPulseAudioと一緒にアンインストールされてしまったので,別の方法を探す必要がある.

面倒なので自分でスクリプトを書いて

#!/bin/sh

volume=$(wpctl get-volume @DEFAULT_AUDIO_SOURCE@ | awk -F '[:] ' '{print $2}')
percent=$(awk "BEGIN { print $volume*100 }")
echo "${percent}%"

とかやると現状デフォルトになっているマイクのボリュームを取得できる. pactlは使えるので,ボリュームを変更したい場合は,

$ pactl set-source-volume $DEFAULT_SOURCE_INDEX +7%

とかやれば良い.