Raspberry Pi Zero moOde audio 630(PulseAudio)

ローカル内にアンプ、スピーカーのあるマシンをpulseaudioサーバーにしておくと便利です。
moOde audioには通常アンプ、スピーカーを接続することになると思いますがHiFi再生を主眼とするmoOde audioではpulseaudioの導入は考慮されていません。mpdもpulseaudio経由の再生は不可です。
当サイトのmoode playerは通常通りダイレクトに再生、mpd以外はpulseaudio経由で再生しています。

pulseaudioは設定次第でいろいろな動作が可能ですが下記は当サイトの設定、実行例です。
Raspberry Pi ZeroにはmoOde audioをインストール、正常に再生しているものとします。

設定の過程では100%で出力します。
動作が確認できるまではアンプのボリュームを充分絞っておくか電源を切っておくようにします。

pulseaudioサーバー

前回Xを導入したmoode audioにpulseaudioをインストール

# apt install pulseaudio pavucontrol

デフォルトの入力ソース、出力ソースを設定 PulseAudio/サンプル

$ pulseaudio --start

$ pacmd list-sources | grep -e 'index:' -e device.string -e 'name:'
  * index: 0
        name: <alsa_output.platform-soc_sound.stereo-fallback.monitor>
                device.string = "0"
$ pacmd list-sinks | grep -e 'name:' -e 'index:'
  * index: 0
        name: <alsa_output.platform-soc_sound.stereo-fallback>

値はPi1B(ES9023DAC),Pi Zero(TDA1543DAC)とも同じnameを出力しています。

/etc/pulse/default.paの末尾に自ネットワーク帯と上記の得られたname値を追記

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

一応再起動してpulseaudioをスタート

$ pulseaudio --start
$ alsamixer


カードはPulseAudioになります。
出力は100%になっているので充分音量を下げます。
pavucontrolを起動して音量を下げてもOK

ここでLan内にpulseaudioをインストールしてあるマシンで~/.config/pulse/client.confにmoode audioのIPを記載することで音声を飛ばすことができます。
~/.config/pulse/client.conf

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

# 補足
pulseaudioサーバーでpulseaudio –startします。
pulseaudioをインストールしているクライアントでpulseaudio –startすると~/.config/pulseが作成されます。
pulseaudio –killして上記のclient.confを作成(以降クライアントはpulseaudio –startは特に必要ない)
pulseaudio対応のプレーヤー(mpv,mplayerなど)で再生すると音声はpulseaudioサーバーに送ります。
mpv,mplayerはサーバー側でpulseaudioがstartしていない且つクライアントにアンプ、スピーカーが接続してあればクライアント側で再生します。

pulseaudioのスタート

moode audioのMPDはダイレクトに再生する必要があります。
上記の通りpulseaudioサーバーにすることは比較的簡単なのですが誰かがログインしてpulseaudioをスタート及びストップする必要があります。(基本root権限ではpulseaudioをスタートすることはできない)
当サイトでは使い勝手の良いwww-dataからpulseaudioを制御しています。
skyblue css

# cd /var/www
# wget https://github.com/Stanko/skyblue/archive/gh-pages.zip
# unzip gh-pages.zip
# mv skyblue-gh-pages html
# rm gh-pages.zip

www-data
sudersに追加(末尾に追記)

# visudo
www-data ALL=(ALL) NOPASSWD: ALL

pulseaudioがcookieを作成できるようwww-dataにホームディレクトリを作成
(パスワードは設定していないのでログインは不可)
ホームディレクトリはmoodeのバージョンアップを考慮して/var/www/html/以下に作成

# gpasswd -a www-data audio
ユーザ www-data をグループ audio に追加
# systemctl stop nginx php7.3-fpm
# mkdir -p /var/www/html/www-data
# chown -R www-data:www-data /var/www/html/www-data
# usermod -s /bin/bash www-data -d /var/www/html/www-data
# systemctl start nginx php7.3-fpm

# 追記 —
/var/www/html/www-data/.config/pulse/default.pa
.include /etc/pulse/default.paを書いて/etc/pulse/default.paに追記した3行(ネットワーク帯は各自環境)を加えます。

.include /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

/var/www/html/www-data/.config/pulse/client.conf

autospawn = no
daemon-binary = /bin/true
auto-connect-localhost = yes

user:groupはwww-data

# chown www-data:www-data default.pa
# chown www-data:www-data client.conf

pulseaudio –startしてcookieを確認
Xからpulseaudio –startするとエラー(authorized — error)が出るので.Xauthorityをコピー
(エラーがあってもスタート、実行は可)

# cp /home/pi/.Xauthority /var/www/html/www-data
# chown www-data:www-data /var/www/html/www-data/.Xauthority

# sudo -u www-data pulseaudio --start
# ls -la /var/www/html/www-data/.config/pulse
---
-rw------- 1 www-data www-data   256 11#  25 15:23 cookie

ユーザーが変わるとやはり100%で出力するので音量を下げておきます。

# sudo -u www-data alsamixer

pulse.php

/var/www/html/pulse.phpを作成してPi3からアクセス

surf_340x100 http://moode/html/pulse.php


surfブラウザは340×100でコンパイルして起動しています。
参考 pulse.php
作成するのはpulse.phpとkillall.sh
/var/www/html以下に置きます。

/var/www/html/killall.sh

#!/bin/sh
sudo killall -q mplayer
sudo killall -q mpv
sudo killall -q ffplay
mpc stop > /dev/null 2>&1
# chmod 755 /var/www/html/killall.sh

追記 client.conf

音量コントロールなど1本化するため内部からwww-dataが起動したpulseaudioに接続するようにします。この設定をすることでuser piはpulseaudioを起動することができなくなります。
user piがコマンドラインから実行する場合は必ずwww-dataからpulseaudioをスタートしておきます。
mixerを持っていないDACは100%で出力します。(設定後はコマンドラインから実行しない)
/home/pi/.config/pulse/client.conf

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


ボリューム値は$ pactl list sinksから取得しています。
I2S接続の汎用ドライバーならこのまま取得できると思っています。


パッケージからsurfをインストールして自身のweb serverに接続
外部からは問題なく接続できますが内部のsurfブラウザの起動は多少時間が掛かってしまいます。
radikoの再生は開始までやはり少し時間が掛かりますが再生自体は特に問題無いようです。


外部から接続するmoode playerは問題ないですね。
MPD(simul.py)も起動してしまえば軽快に動作します。

simul.pyのタイトル(ラベル)を利用してON AIR情報を再生時自動表示するようにしました。
moode playerとsimul.pyそしてradikoの連携もうまくいっています。
プログラムについてはまた次回で!