Raspberry Pi OS (32-bit) with desktop multimedia

通常ラジオや音楽はmoOde audioで再生しています。
音声関連は全てpulseaudioサーバーのmoOde audioに送っていましたがmoOde audioのメンテ時などは音がなくなってしまうのでもう一つの選択肢としてRaspberry Pi4のi2Sデバイスから必要があればいつでも音を出せるようにしたいと思います。

構成としてはmoOde audio同様にpulseaudioサーバーとしてほかのマシンからの音声も再生可能とします。
Zeroで作成した設定ファイルなどはできるだけ利用(コピー)
moOde Playerが無い以外はZero(moOde audio)とほぼ同じような仕様にしてみたいと思います。

I2Sデバイス

/boot/config.txtに追記変更

# Enable audio (loads snd_bcm2835)
dtparam=audio=off
dtoverlay=hifiberry-dac


内蔵音源をoff
I2Sデバイスを有効
I2Sデバイスは以前Zeroで作成したpcm5102aを使用
アンプへは3.5mmステレオジャックを差し替えます。
Zero(moOde audio)はスペック的にもまたmoOdeの仕様上安易に変更することは困難なことからマルチメディアの実験環境としても使用の予定です。

インストール

要点だけ記載(詳細は過去記事のどっかにあります)
player

# apt install mpv mplayer libxml2-utils rtmpdump swftools
# apt remove youtube-dl

youtube-dlは別途最新版をインストール
pulseaudio

# apt install pulseaudio

/etc/pulse/default.pa 末尾追記(ネットワーク帯は各自の環境)

load-module module-native-protocol-tcp auth-ip-acl=127.0.0.1;192.168.0.0/24 auth-anonymous=1
set-default-source alsa_output.platform-soc_sound.stereo-fallback.monitor
set-default-sink alsa_output.platform-soc_sound.stereo-fallback

mpd

# apt install mpd mpc ncmpcpp pavucontrol
# systemctl disable mpd

mpdはユーザーで起動しています。
~/.config/mpd/mpd.conf の出力はpulseaudio

---
audio_output {
    type  "pulse"
    name  "pulse audio"
}

www-data

Zeroと同様にローカルからpulseaudioをコントロールするためweb serverを建てます。
web serverはnginx-lightをインストール

# apt -y install nginx-light php7.3-fpm surf

Zeroのカードから/var/www/htmlをパーミッションを維持したままコピー
nginx.confも頂戴します。 nginx.conf
カードは/mntにマウント

# cp -Rp /mnt/var/www/html /var/www
# cp /mnt/etc/nginx/nginx.conf /etc/nginx

www-data設定

# visudo
www-data  ALL=(ALL) NOPASSWD: ALL 追記
# gpasswd -a www-data audio
ユーザ www-data をグループ audio に追加
# systemctl stop nginx php7.3-fpm
# usermod -s /bin/bash www-data -d /var/www/html/www-data
# systemctl start nginx php7.3-fpm

pulse/client.conf

~/.config/pulse/client.conf

autospawn = no
daemon-binary = /bin/true
default-server = 127.0.0.1

default-serverを設定することで現在のユーザー(pi)はpulseaudioをスタートできなくなります。
www-dataからスタート
今までsudo -u www-data pulseaudio –startを実行していましたが正解はこっちですね。(起動はする)変なエラーがなくなります。

$ sudo runuser -l www-data -c 'pulseaudio --start'

pulseaudioセレクトメニュー

音声の出力先を決めるのは~/.config/pulse/client.confのdefault-serverになります。
moOde audioと同様にpulseaudioがスタートしていないと(I2Sデバイス)自ホストからの再生は100%で出力します。
確実にpulseaudioサーバーを切り替えできるようpulseaudioセレクトメニューを作成

pulse-select.py
作成したpulse-select.pyを実行、チェックボタンで現在の設定を確認
client.confはmoOde audioに設定 pulseaudioは –kill
pavucontrolを起動するとclient.confに設定しているアドレスのマシン状態を表示
moOde audioはpulseaudioを–killしているので表示なし


白Piボタンを実行
client.confを自ホストに書き換えてpulseaudio –start
pavucontrolを起動、pulse.phpにアクセス
pulse.phpはpulseaudioが–startしていれば自ホストにアクセス
I2SデバイスがBuilt-in Audio Stereo、pulse.phpの音量コントロールで連動して動いていればOK


pavucontrolは常時起動しておく必要があります。
www-dataがスタートするpulseaudioはアクセスが無いと–killします。pavucontrolを起動しておくことでスタート状態を保持します。アンプに接続、再生確認
moOdeボタンは再度client.confを書き換えてmoOde audioに切り替え(pulseaudio –kill)


各マシンもclient.confのdefault-serverをPi4のアドレスに切り替えることでPi4で再生
Pi3もメニューを作成
赤Piボタンを実行


Pi4の/var/www/html/pulse.php
動画再生時もリモートで音量コントロールが可能です。