g00ceyの技術ブログ

Pulseaudio + Pi4(Wifi) + pizeroで作るリモートスピーカー

目次

結論

  • BTの通信って近距離だったらいいんだけど部屋の中でも離れてるとブツブツ切れる
  • Pizero(無印)今まであまりつかっていなかったけど初の有効活用
  • WifiはBTよりも強し(通信の安定的に)

方針・前提条件

  • Bluetoothで接続しているミュージックボックス代わりにしているMPDのVMとBTドングルとBTスピーカーで鳴らしているが時折音が途切れる。
  • ざっくりポンチ絵でいえばこんな感じ
  • 作業内容に関しては構築後、こんなことだったと思うをベースに書いてあるのでヌケモレあるかもです。

map

環境

  • Debian(Bullseeye) on proxmox
  • RaspberryPi4: raspibian(bullseye) 64bit
  • RaspberryPiZero: raspbian(bullseye) 64bit

作業内容

PiZero

今回Pizeroではpulseaudioのみを実行する

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を参加せようとしているなどの理由で上記のような構成にしています。
これによりリモートワーク時の音楽に困らなくなりましたので、業務に集中していきたい所存です。


Share

comments powered by Disqus