Open noraworld opened 1 year ago
HSP というプロファイルがあるのか。
https://www.youtube.com/watch?v=zAa_DS6TkXE
これに対応しているデバイスなら A2DP と HFP の切り替えでなんかおかしなことになる問題は避けれそうだが、問題は要件を満たすデバイスが見つかるかどうか。
WirePipe という PulseAudio に代わるものがあるらしいので試してみる。
以下の記事のとおりにやったら簡単にインストールできた。
PipeWire にしてからヘッドフォンを接続しようとしたら Failed to connect: org.bluez.Error.Failed br-connection-profile-unavailable
と表示されて接続に失敗するけど、そもそも今まで (PulseAudio のとき) もヘッドフォンを接続したことなかったっけ。
PulseAudio をネットワーク経由で使うこともできるらしい。
https://blog.3qe.us/entry/2022/10/16/234520
ちょっと今は情報過多なのでやらないけど一応メモしておく。
いや、これは音声を聴く側も Linux デバイスじゃなきゃダメな手法なのかな。
互いのマシンが音声デバイス基盤としてPulseAudioまたはPipeWireを使っていなければならない
PipeWire 使用時の音声出力先変更方法が分からない。調べても全然出てこない。設定は PulseAudio 側と共有されているのかと思いそちらを変更してみたが効果なし。何か勘違いしているのか?
ここにいろいろ載っているけどよく分からない。
調べていると wpctl
コマンドを実行する記事がちらほら出てくるのだが、このコマンドが見つからない。PipeWire はインストールしたはずなのに。
これを試したら wpctl
が使えるようになった。どうやらインストールすべきパッケージが足りなかったようだ。
sudo apt install wireplumber
https://askubuntu.com/questions/1441732/pipewire-wireplumber-dont-work-on-ubuntu-22-10
というか wireplumber
をインストールして wpctl
コマンドが使えるようになるまでは sources
に auto_null
しかなかったり alsamixer
に使えるデバイスがないと表示されて何もできなかったりしていてなんかおかしいなとは思っていた。
でも wireplumber
をインストールしたらこれらの問題が解決した。しかし、まだ音は出力されず。
Raspberry Pi 自身の音は出ることを確認した。しかし Mac → Raspberry Pi に Bluetooth で送った音声が聞こえない。
PipeWire の設定ファイルを GitHub で管理し始めた。
https://github.com/noraworld/pulsewire-conf
新しいリポジトリを作ろうかとも思ったけど、PulseAudio と一緒に管理したほうが設定の調整が楽かなと思ったので一つのリポジトリにまとめることにした。
PipeWire のデフォルトではサンプルレートが 48,000 Hz だったけどこれを 44,100 Hz に変更して Mac とペアリングしたら音声が聴けるようになった。でももしかしたらサンプルレート変えなくてもいけたかも。というのも音声を聴くためには現状だとトランスミッターの S/PDIF と AUX を切り替えないといけなくてめんどくさいので pactl list sink-inputs
を実行したときのレイテンシーを見て判断していた。ずっと 0 ms だけどこれでもちゃんと音は表示されていた。しかし最初はここが 0 ms だったから、実際に音を聞いてもいないのに音が流れていないと思いこんでしまっていた。数値だけじゃなくてちゃんと実機確認しなきゃね。
しかし iPhone も別の USB レシーバにつないだがこちらは音が流れない。pactl list sink-inputs
にも表示されない。
Raspberry Pi 自身からは Mac と同時に音が流れる。
"Hey Siri" とかやってたら pactl list sink-inputs
に iPhone も表示されるようになったけどしかし音は出ない。
あ、なんか突然聞こえるようになった。ちょっと挙動がよく分からないな。
ただやはり英語の音声は聞こえない。HSP/HFP との切り替えがうまくいっていない or 対応していないのかな。
いったん音が出ないものを再生しちゃうと、そこからしばらくは今までに聞こえることを確認した音も聞こえなくなっちゃう。でもしばらくするとまた聞こえるようになる。
アプリ再起動したら英語の音声も聞こえるようになった!
ただマイクを使うとき (通話用音声を流すとき) は iPhone のスピーカーから出てしまう。そしてそこからまた A2DP の音声に戻そうとすると音が聞こえなくなる。アプリを再起動すると聞こえるようになる。ちょっと使いづらいかも。
だから "Hey Siri" をやったあととかもアプリ再起動など何かをしないと自動的にプロファイルが切り替わってくれないようだ。
あと Mac と比べてちょっと iPhone 側の音声が小さい。どっちも最大音量に設定しているんだけど。まあこれは Bluetooth トランスミッターを使って試したときも iPhone のほうがなぜか音量が小さかったのでデバイスの仕様なのかも。
Google Meet とかだと音声が聞こえなくなってしまう。設定でマイクをマイク、スピーカーを Raspberry Pi にしても音が聞こえなくなる。マイクを使うリソースだとやっぱり問題が起こるようだ。
Mac 全体の音声出力をいったん別のソースに切り替えてからもう一度 Raspberry Pi を選択すると Google Meet 等でもマイクから音を拾いながら音を聴けるようになるけど、どうも安定しない。しばらくするとまた音が聞こえなくなったりする。
ただ Bluetooth の接続次第は PulseAudio よりも圧倒的に安定している。ただ HSP/HFP との切り替えがうまくいっていないけどこれは PulseAudio でも一緒だった。PulseAudio のときは最悪 Bluetooth の接続自体切れてしまうこともあったが、ただ HSP/HFP の音声がうまく聴けるときもあった (PipeWire だと今のところ聴けない) のでどっちもどっち。
ちなみに特に明記していなかったけど今までのは PipeWire での動作確認の話だった。
iPhone で一度音が出なくなるとどう直すのかの明確な答えがないので詰む。
Mac と同様に iPhone でも音声出力先を切り替えると音が復活することが多い。しかしあくまで確率的な話で確実に直るわけではない。
昨日 Mac と Raspberry Pi の接続を確立したあと、そのまま今日の昼過ぎまで放置していたが、なんとまだ Bluetooth の接続が切れておらずちゃんと音も流れるようになっていた。PulseAudio と比べると PipeWire のほうが Bluetooth 接続は明らかに安定しているようだ。これは素晴らしい 🎉
最終的には以下の記事を参考にすることで安定稼働させることができた。oFono を無効化することで PipeWire のネイティブ実装の HFP を使うことができて安定した。
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