Bluetooth接続の骨伝導イヤフォンを買ったのだが,これをLinuxで使えるようにする.
A2DPとHFP/HSP
Bluetoothでイヤフォンを扱う場合には,プロファイルを選択する必要がある. A2DPやHFP/HSPというのはそのプロファイルのことであり,
この辺に書いてある.
大きく分けでA2DPは主に音楽を聞くためにステレオになるのだが,HFP/HSPは必ずモノラルになる.
で,大きな問題として普通Linuxで入れているPulseAudioはA2DPのプロファイルは用意しているのだが,HFP/HSPに対応していないということ. これの何が困るのかというと,HFP/HSPに対応していないとイヤフォン付属のマイクを入力として認識できないということだ. pavucontrolとかで入力デバイスを探しても,Bluetoothイヤフォンに付属するマイクは入力として認識されていない.
そして,PulseAudioはHFP/HSPに対応していないので,そもそもプロファイルを切り替えることができない.
PipeWireを使う
この解決策は,PipeWireを使うことだ.
まず,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でマイクのボリュームを表示する
今までは
これを使っていたんだけど,こいつは内部的にpacmdに依存している.
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%
とかやれば良い.