Pulseaudio + Pi4(Wifi) + pizeroで作るリモートスピーカー
結論
- BTの通信って近距離だったらいいんだけど部屋の中でも離れてるとブツブツ切れる
- Pizero(無印)今まであまりつかっていなかったけど初の有効活用
- WifiはBTよりも強し(通信の安定的に)
方針・前提条件
- Bluetoothで接続しているミュージックボックス代わりにしているMPDのVMとBTドングルとBTスピーカーで鳴らしているが時折音が途切れる。
- ざっくりポンチ絵でいえばこんな感じ
- 作業内容に関しては構築後、こんなことだったと思うをベースに書いてあるのでヌケモレあるかもです。
環境
- Debian(Bullseeye) on proxmox
- RaspberryPi4: raspibian(bullseye) 64bit
- RaspberryPiZero: raspbian(bullseye) 64bit
作業内容
PiZero
今回Pizeroではpulseaudioのみを実行する
- pulseaudioのインストール
- pulseaudioのユーザごとの起動を無効化
- pulseaudioの外部接続を許可
- pulseuadioのデーモン化
pulseaudioのインストール
sudo apt install pulseaudio
pulseaudioで外部接続を許可
以下のファイルで、module-native-protol-tcpで以下の行を追加(2行目に関して入らないかもしれない) /etc/pulse/default.pa
load-module module-native-protocol-tcp auth-ip-acl=127.0.0.1;192.168.11.0/24;10.0.0.0/8;
load-module module-native-protocol-tcp auth-anonymous=1
pulseaudioのデーモン化
cat /lib/systemd/system/pulseaudio.service
[Unit]
Description=Pulse Audio
[Service]
User=root
Type=simple
ExecStart=/usr/bin/pulseaudio --system --disallow-exit --disable-shm -F /etc/pulse/default.pa
[Install]
WantedBy=multi-user.target
sudo systemctl deamon-reload
sudo systemctl enable pulseaudio.service
sudo systemctl start pulseaudio
PizeroをPi4で作成したAPにアクセスさせる
ctrl_interface=DIR=/var/run/wpa_supplicant GROUP=netdev
update_config=1
country=JP
network={
ssid="thisis-ssid"
psk="raw password"
}
Pi4
Pi4側では今回
- vlan3へのbridge
- bridgeへのIP割当
- hostapdのインストールとセットアップ
を行う
vlan3へのbridge
/etc/network/interfaces.d/vlan
auto eth0.3
allow-hotplug eth0 wlan0
iface eth0.3 inet manual
vlan-raw-device eth0
auto br0
iface br0 inet manual
bridge_ports eth0.3 wlan0
bridge_stp off
bridgeへのIP割当
サーバーマシンに関してはstaticにIPを割り当てたいので、vlan3ではDHCPを動かしていないので、dhcpcdでstatic IPにした。
denyinterfaces eth0 wlan0 eth0.3
interface br0
static ip_address=192.168.xx.y/24
static routers=192.168.xx.1
static domain_name_servers=192.168.xx.1 8.8.8.8
hostapdのインストールとセットアップ
Raspberry Pi 3 Model B+でブリッジモードで動作するWifi APを構築する - Qiita
br0に対してbridgeの割あてするようにした。
interface=wlan0
driver=nl80211
bridge=br0
ssid=thisis-ssid
country_code=JP
hw_mode=g
channel=10
chanlist=1 2 3 4 5 6 7 8 9 10 11 12 13
macaddr_acl=0
auth_algs=1
ignore_broadcast_ssid=0
wmm_enabled=1
ieee80211n=1
ht_capab=[HT40][SHORT-GI-20][DSSS_CCK-40]
wpa=2
wpa_passphrase=password hogehoge
wpa_key_mgmt=WPA-PSK
wpa_pairwise=CCMP
VM側
VM側では、もともとmpdやpulseaudio, pulsemixerなどが入っていたのでセットアップはほぼ割愛
以下のような形でpizeroに構築したpulseaudioサーバーに向けて接続するように
mpd.conf
audio_output {
type "pulse"
name "pulse audio"
server "192.168.xx.y" # optional
sink "default sink" # optional
## media_role "media_role" #optional
}
default sinkの箇所はpizero側で
pacmd list | grep name:
した際に自分が接続したいであろうUSBオーディオのリストを見つけてそれを指定した気がします。
いろいろ適用するために
以下の順番で再起動をかけていきました
- Pi4(wifiのAPなので)
- Pizero(pulseaudioのサーバーとなるので)
- vm(mpdだけ再起動すればいいのかもしれないけど念の為)
接続後の音量確認
確かデフォルトは100%担っているはずなので、ここでmpdで再生ボタンを押してはいけない。
pulsemixerなどで音量を調整しつつ、paplayなどでファイルを再生していこう。
なお、私の環境では18%以上をマスター音量として指定しないと音がならなかった。
最後に
この構成にして一日で何度も途切れたりしていたBT通信とは違い、ずっと音が途切れない環境ができました。
このMPDでの再生は、Pi4本体だけでも構築可能ですが、Pi4の配置場所・VMで環境がすでに用意されてる・k3sのクラスターとしてPi4を参加せようとしているなどの理由で上記のような構成にしています。
これによりリモートワーク時の音楽に困らなくなりましたので、業務に集中していきたい所存です。