noraworld / scraps

Just my scraps, like Zenn scraps feature
0 stars 0 forks source link

Bluetooth × PulseAudio (PipeWire) #51

Open noraworld opened 1 year ago

noraworld commented 1 year ago

https://www.google.com/search?q=usb%E3%83%AC%E3%82%B7%E3%83%BC%E3%83%90%E3%83%BC+bluetooth+Raspberry+Pi

noraworld commented 1 year ago

HSP というプロファイルがあるのか。

https://www.youtube.com/watch?v=zAa_DS6TkXE

これに対応しているデバイスなら A2DP と HFP の切り替えでなんかおかしなことになる問題は避けれそうだが、問題は要件を満たすデバイスが見つかるかどうか。

noraworld commented 1 year ago

WirePipe という PulseAudio に代わるものがあるらしいので試してみる。

https://unix.stackexchange.com/questions/672584/how-to-make-a-hsp-hfp-bluetooth-profile-work-with-pulseaudio

以下の記事のとおりにやったら簡単にインストールできた。

https://zenn.dev/moru3_48/articles/e50c4ef9b0a5c8

noraworld commented 1 year ago

PipeWire にしてからヘッドフォンを接続しようとしたら Failed to connect: org.bluez.Error.Failed br-connection-profile-unavailable と表示されて接続に失敗するけど、そもそも今まで (PulseAudio のとき) もヘッドフォンを接続したことなかったっけ。

noraworld commented 1 year ago

PulseAudio をネットワーク経由で使うこともできるらしい。

https://blog.3qe.us/entry/2022/10/16/234520

ちょっと今は情報過多なのでやらないけど一応メモしておく。


いや、これは音声を聴く側も Linux デバイスじゃなきゃダメな手法なのかな。

互いのマシンが音声デバイス基盤としてPulseAudioまたはPipeWireを使っていなければならない

noraworld commented 1 year ago

PipeWire 使用時の音声出力先変更方法が分からない。調べても全然出てこない。設定は PulseAudio 側と共有されているのかと思いそちらを変更してみたが効果なし。何か勘違いしているのか?

noraworld commented 1 year ago

ここにいろいろ載っているけどよく分からない。

https://wiki.archlinux.jp/index.php/PipeWire

noraworld commented 1 year ago

調べていると wpctl コマンドを実行する記事がちらほら出てくるのだが、このコマンドが見つからない。PipeWire はインストールしたはずなのに。

これを試したら wpctl が使えるようになった。どうやらインストールすべきパッケージが足りなかったようだ。

sudo apt install wireplumber

https://askubuntu.com/questions/1441732/pipewire-wireplumber-dont-work-on-ubuntu-22-10

noraworld commented 1 year ago

というか wireplumber をインストールして wpctl コマンドが使えるようになるまでは sourcesauto_null しかなかったり alsamixer に使えるデバイスがないと表示されて何もできなかったりしていてなんかおかしいなとは思っていた。

でも wireplumber をインストールしたらこれらの問題が解決した。しかし、まだ音は出力されず。

noraworld commented 1 year ago

Raspberry Pi 自身の音は出ることを確認した。しかし Mac → Raspberry Pi に Bluetooth で送った音声が聞こえない。

noraworld commented 1 year ago

PipeWire の設定ファイルを GitHub で管理し始めた。

https://github.com/noraworld/pulsewire-conf

新しいリポジトリを作ろうかとも思ったけど、PulseAudio と一緒に管理したほうが設定の調整が楽かなと思ったので一つのリポジトリにまとめることにした。

noraworld commented 1 year ago

PipeWire のデフォルトではサンプルレートが 48,000 Hz だったけどこれを 44,100 Hz に変更して Mac とペアリングしたら音声が聴けるようになった。でももしかしたらサンプルレート変えなくてもいけたかも。というのも音声を聴くためには現状だとトランスミッターの S/PDIF と AUX を切り替えないといけなくてめんどくさいので pactl list sink-inputs を実行したときのレイテンシーを見て判断していた。ずっと 0 ms だけどこれでもちゃんと音は表示されていた。しかし最初はここが 0 ms だったから、実際に音を聞いてもいないのに音が流れていないと思いこんでしまっていた。数値だけじゃなくてちゃんと実機確認しなきゃね。

noraworld commented 1 year ago

しかし iPhone も別の USB レシーバにつないだがこちらは音が流れない。pactl list sink-inputs にも表示されない。

noraworld commented 1 year ago

Raspberry Pi 自身からは Mac と同時に音が流れる。

noraworld commented 1 year ago

"Hey Siri" とかやってたら pactl list sink-inputs に iPhone も表示されるようになったけどしかし音は出ない。

noraworld commented 1 year ago

あ、なんか突然聞こえるようになった。ちょっと挙動がよく分からないな。

noraworld commented 1 year ago

ただやはり英語の音声は聞こえない。HSP/HFP との切り替えがうまくいっていない or 対応していないのかな。

noraworld commented 1 year ago

いったん音が出ないものを再生しちゃうと、そこからしばらくは今までに聞こえることを確認した音も聞こえなくなっちゃう。でもしばらくするとまた聞こえるようになる。

noraworld commented 1 year ago

アプリ再起動したら英語の音声も聞こえるようになった!

noraworld commented 1 year ago

ただマイクを使うとき (通話用音声を流すとき) は iPhone のスピーカーから出てしまう。そしてそこからまた A2DP の音声に戻そうとすると音が聞こえなくなる。アプリを再起動すると聞こえるようになる。ちょっと使いづらいかも。

だから "Hey Siri" をやったあととかもアプリ再起動など何かをしないと自動的にプロファイルが切り替わってくれないようだ。

noraworld commented 1 year ago

あと Mac と比べてちょっと iPhone 側の音声が小さい。どっちも最大音量に設定しているんだけど。まあこれは Bluetooth トランスミッターを使って試したときも iPhone のほうがなぜか音量が小さかったのでデバイスの仕様なのかも。

noraworld commented 1 year ago

Google Meet とかだと音声が聞こえなくなってしまう。設定でマイクをマイク、スピーカーを Raspberry Pi にしても音が聞こえなくなる。マイクを使うリソースだとやっぱり問題が起こるようだ。

noraworld commented 1 year ago

Mac 全体の音声出力をいったん別のソースに切り替えてからもう一度 Raspberry Pi を選択すると Google Meet 等でもマイクから音を拾いながら音を聴けるようになるけど、どうも安定しない。しばらくするとまた音が聞こえなくなったりする。

noraworld commented 1 year ago

ただ Bluetooth の接続次第は PulseAudio よりも圧倒的に安定している。ただ HSP/HFP との切り替えがうまくいっていないけどこれは PulseAudio でも一緒だった。PulseAudio のときは最悪 Bluetooth の接続自体切れてしまうこともあったが、ただ HSP/HFP の音声がうまく聴けるときもあった (PipeWire だと今のところ聴けない) のでどっちもどっち。

ちなみに特に明記していなかったけど今までのは PipeWire での動作確認の話だった。

noraworld commented 1 year ago

iPhone で一度音が出なくなるとどう直すのかの明確な答えがないので詰む。

noraworld commented 1 year ago

Mac と同様に iPhone でも音声出力先を切り替えると音が復活することが多い。しかしあくまで確率的な話で確実に直るわけではない。

noraworld commented 1 year ago

昨日 Mac と Raspberry Pi の接続を確立したあと、そのまま今日の昼過ぎまで放置していたが、なんとまだ Bluetooth の接続が切れておらずちゃんと音も流れるようになっていた。PulseAudio と比べると PipeWire のほうが Bluetooth 接続は明らかに安定しているようだ。これは素晴らしい 🎉

noraworld commented 1 year ago

最終的には以下の記事を参考にすることで安定稼働させることができた。oFono を無効化することで PipeWire のネイティブ実装の HFP を使うことができて安定した。

https://bbs.archlinux.org/viewtopic.php?id=269195