前提
bluetooth機能のついてるスピーカーやヘッドセットをlinuxで使ってると、モノによってはちょっとの間再生止めてると、次に再生するときに音がぶつぶつこま切れになるよね。
対象BTスピーカー例
iLoud Micro Monitor
解決法
sudo systemctl restart bluetooth.service
根本的な解決法(昔)
PulseAudioの場合
根本的な解決法(いま)
pipewireの場合
-
wireplumberがない! => いれる
sudo apt install wireplumber
-
/etc/wireplumber/が空っぽ => いれる
sudo cp -a /usr/share/wireplumber/bluetooth.lua.d/50-bluez-config.lua /etc/wireplumber/bluetooth.lua.d/
-
50-bluez-config.luaをどうするの? => いじる
luaスクリプトの最後の数行から["session.suspend-timeout-seconds"]を探して=0する。
apply_properties = {
...
["session.suspend-timeout-seconds"] = 0,
},
- そんで? => サービス再起動
sudo systemctl --user restart wireplumber
何が問題だったの?
- サウンドサーバーが一度サスペンド状態になって次にアクティブになるときに、bluetooth機器も同様にアイドル状態からアクティブになるんだけど、そのタイミングで同期がずれちゃうみたい。pulseaudioの頃から起こってた。
- 解決方法をネットを探すと色々出てくるんだけど、微妙に違うトピックでこんな感じだった。
- サウンドカードがスリープしちゃって起きない件 => bluetooth関係なかった。
- bluetoothの再生がおかしいけど、レイテンシーの問題じゃね? => レイテンシー色々変えたけど大勢に影響なしだった。https://askubuntu.com/questions/475987/a2dp-on-pulseaudio-terrible-choppy-skipping-audio
- 結局ネット上では求めてた答えがみつけられず、なんとなく調べたことからの類推でサウンドカードへの対策方法をbluetoothにそのまま当てはめられないかと設定ファイルを全部見て、一番それっぽいbluetooth.lua.d/50-bluez-config.luaを同様に書き換えてみたらうまくいった。なのでこれが正当な正解ではないと思う。やってることは単にbluetoothスピーカーをアイドル状態にしないってだけだから。
- iOSとかMacOSだとちゃんと再生が止まるとbluetoothがアイドル状態になるんだけど、次の再生でコケないんだよね。一歩踏み込もうとすると急激に難しくなるのがbluetoothってイメージ、ある。
閑話
- ubuntu23.04にしたらgnomeのbluetooth設定にiLoudMicroMonitorが出てこなくて泣いた。bluetoothctlで探したらあっさり発見、登録できた。なにかしら、これ。
- bluez周りはあまりドキュメントない。最初はbluezが悪いと思ってた。(これは間違ってないのかもしれない)
- iLoudMicroMonitorは小さくても低音までかなりキレイに出るので、かわいい。でも最近、右チャンの3.5KHzあたりが元気がなくて、悲しい。ツイーターが死んだかと思ったけど生きてる。原因は謎。もしくは自分の耳かも。
- linux系列のサウンドシステムを解説したドキュメントの決定版ほしいなあ。一番デバイスに近い最後端がalsa程度しか理解できてない。pipewireとPulseAudioの立ち位置の違いなんかを知りたいけど、なかなかないなと思った。もしかして共存してる環境とかもありえるんかな。