~~結論から言うとうまくいってません。~~結構いいところまでいきました。
- Raspberry Pi Zero 2ではブツブツ切れてしまいまともに再生できない(同時に動かしているソフトシンセは問題なく鳴っているのでCPUパワーが足りないということではない)。Pi4ではこの問題は起きない。
-
iPhoneから再生した場合に音量のコントロールができない←できるようになった。
参考にしたサイト等
必要パッケージのインストール
既に入っているものもあるが念のため。
$ sudo apt-get install -y bluez pulseaudio-module-bluetooth python-gobject python-gobject-2 pulseaudio-module-jack
Pulse Audioの設定
$ sudo nano /etc/pulse/default.pa
末尾に下記を追加。最後の1行はJack経由で鳴らすための設定。
load-module module-jack-sink
load-module module-jack-source
set-default-sink jack_out
Bluetoothの設定
$ bluetoothctl show
Controller XX:XX:XX:XX:XX:XX (public)
Name: XXXXXXXX
Alias: XXXXXXXX
Class: 0x000c0000
Powered: yes
Discoverable: no
Pairable: yes
UUID: Headset AG (XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX)
UUID: Generic Attribute Profile (XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX)
UUID: A/V Remote Control (XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX)
UUID: Generic Access Profile (XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX)
UUID: PnP Information (XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX)
UUID: A/V Remote Control Target (XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX)
UUID: Audio Source (XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX)
UUID: Audio Sink (XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX)
UUID: Headset (XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX)
Modalias: usb:xxxxxxxxxxxxxxx
Discovering: no
ペアリング
$ bluetoothctl
# power on
# agent on
# default-agent
# discoverable on
ここでiPhoneからBluetooth接続を行う。ペアリングの途中で許可するか聞かれるのでyesとタイプして、その後iPhone側でOKして再度聞かれるのでyesとタイプ。これで繋がった。繋がった後はiPhone側で何か再生したらラズパイ側で鳴る。
再生の安定性の問題
Pi4では正常に再生されたがPi Zero 2ではブチブチ切れてしまい実用にならなかった。何が原因かは良くわからない。Alsaに直結すると直るらしいが、Jackで鳴らしたいのでなんとも。バッファサイズの調整でかなり改善することがわかった。
$sudo nano /etc/pulse/daemon.conf
バッファは64サンプルで動かしているので
default-sample-rate = 44100
default-fragments = 256
default-fragment-size-msec = 371
とか設定するとかなり安定する。ただ、それでもPi Zero 2では厳しい。topで調べるとkworker/u8:5-events_unboundというのが2つCPUを使いまくっているのが気になるのでこれが原因かもしれない。
最新のBlueZをビルドしてインストール
下記を参考に最新版 (これを書いている時点では5.62) を入れてみたが状況は変わらず。
音量の変更
これを走らせておくと、再生側の機器で音量のコントロールするとそれが効くようになる。
音量コントロールの信号はちゃんときてて、それをPulseAudioのモジュールでは対応できてないのだけど、このプログラムではPulseAudioのMaster Volumeを動かすことで対処してる。Jackに直接流しているシンセの音量は影響を受けないところがいい。