moOde audio 4.3 pulseaudio Server (Radiko)

通常moOde audioにはアンプとスピーカーが接続されていると思います。当サイトではmoOde audioをpulseaudio Serverとして運用しています。
ピュアなオーディオ再生を目的とする場合にはpulseaudioは不要と思いますが一般の音楽(音声)再生、また技術的な興味に於いてもこれらを利用するメリットはあると思います。

moOde audioのmpdとpulseaudioは同じデバイスを同時に使用することはできないのでpulseaudio使用時はmpdを停止する必要があります。(逆も同様)

クライアント側はraspberry pi + raspbianで動作を確認しています。今回はできるだけシンプルに構成、検討してみたいと思います。

ロケールの設定

最初にraspi-configからロケールの設定をしておきます。(ja_JP.UTF-8追加)

# raspi-config
4 Localisation Options - I1 Change Locale
[*] ja_JP.UTF-8 UTF-8

Pulse Audioの導入

moOde audioにpulseaudioをインストール

# apt install pulseaudio

user(pi)でpulseaudioスタート

$ pulseaudio --start

~/.config/pulseが作成されます。client.conf新規作成

~/.config/pulse/client.conf
autospawn = no
daemon-binary = /bin/true

カードを調べる。PulseAudio/サンプル 当サイトのカード(ES9023-DAC)は次のように出力

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

$ pacmd list-sinks | grep -e 'name:' -e 'index:'
  * index: 0
        name: <alsa_output.platform-soc_sound.analog-stereo>

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

/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.analog-stereo.monitor
set-default-sink alsa_output.platform-soc_sound.analog-stereo

前回はユーザー(~/.config/pulse/default.pa)でpulse serverを設定していたのですがシステム(/etc/pulse/default.pa)に記述したほうが明らかに効率が良いようです。

pulseaudioコマンドはstartしたuserがkillすることができます。
unixコマンド($sudo killall pulseaudio)からは可能です。
rootでは基本(デフォルト)startすることができません。

クライアント(raspberry pi)の設定(raspbian desktop)

pavucontrolのインストール

# apt install pavucontrol

クライアント側にはサーバー(moode audio)のIPアドレスを指定

~/.config/pulse/client.conf
autospawn = no
daemon-binary = /bin/true
default-server = 192.168.0.111

再生する

クライアントのraspberry pi3はpavucontrolを起動しておきます。
pulseサーバー(moode audio)にログイン pulseaudioスタート

$ pulseaudio --kill
$ pulseaudio --start

デバイス(カード)が見えればOK
音量はpavucontrolで制御します。最初の音量に注意
pulseaudioはアクセスが無いと自動(約1分位か)でkillします。pavucontrolが起動していれば勝手にkillすることはありません。
GUIなアプリケーションはほとんどpulseaudioに対応していると思います。コマンドラインからはmplayer,mpvなどがOK

moode audioから再生する

radiko関連パッケージのインストール

# apt install mpv mplayer swftools libxml2-utils rtmpdump

moode audio自身からpulseaudio経由で再生するにはuserの~/.config/pulse/client.confに次の1行を追記します。

default-server = 127.0.0.1

但しこの設定を加えるとuser(pi)はpulseaudioをスタートできなくなります。

$ pulseaudio --start
N: [pulseaudio] main.c: ユーザーが設定したサーバー 127.0.0.1 は start/autospawn を拒否しています。

したがってrootからはpulseaudioをstartできないことからuser piでpulseaudioをスタート、rootに設定を加えて実行してみます。(コマンドラインでの実行はpulseaudioをstartしていないと音量100%で出力します。pi3からpavucontrolでモニタ、音量の確認が必要です)

実験には以前のとおりradikoスクリプト再生環境を構築してみます。
必要なパッケージをインストールradikoスクリプトを実行
radikoスクリプトの再生プレーヤーにmplayerを指定すると数分後にRTMP廻りでエラーが発生、停止してしまいます。

# ./radiko.sh -p FMT
--------
AO: [pulse] 48000Hz 2ch floatle (4 bytes per sample)
Video: no video
Starting playback...
292.083 kB / 47.96 sec (unknown) 18.2% 
Caught signal: 13, cleaning up, just a second...
ERROR: WriteN, RTMP send error 32 (42 bytes)
ERROR: RTMP_ReadPacket, failed to read RTMP packet header
316.538 kB / 51.92 sec
Download may be incomplete (downloaded about 0.00%), try resuming
A:  51.7 (51.7) of 0.0 (unknown) 18.2%

Exiting... (End of file)

これは以前より発生している現象で使っていると改善することもあります。Pi1B + moode audio特有の現象かもしれません。
いろいろ試してみるとmpvでは正常に再生することがわかりました。
欠点は再生開始までの時間がmplayerの8秒からmpvでは12秒ほどになります。(mplayerの8秒も長い)
安定して再生できればいいので以前のとおりmoode audio + pulseaudio + radiko(mpv)で環境を構築してみたいと思います。

#追記 20181117 —
/etc/mplayer.confにcacheを設定することで現在mplayerも安定して動作しています。

# cache = 8192
cache = 512

512KBで再生開始は10S位、1024KBだと20S位かかります。
らじるは途切れるのでmpvにしています。
——————-

#pulseaudioはデフォルト設定にネットワークとカード情報を設定しただけなので設定次第で挙動は違ってくると思います。

今回はできるだけシンプルにpulseaudioコントロール、radiko環境を構築してみたいと思います。

www-dataからpulseaudioをスタート

実用的にはユーザーwww-dataを利用してpulseaudioをコントロールするのが簡単そうです。

moode audioのwww-dataはデフォルトでsudoersに記載されています。(編集する際はvisudo)

www-data ALL=(ALL) NOPASSWD: ALL

www-dataにホームディレクトリを作成、ユーザーwww-dataでpulseaudio –start
~/.config/pulse/client.confを新規作成

# gpasswd -a www-data audio
ユーザ www-data をグループ audio に追加
# systemctl stop nginx php7.0-fpm
# mkdir /var/www-data
# usermod -s /bin/bash www-data -d /var/www-data
# cd /var
# chown www-data:www-data www-data
# su www-data
$ pulseaudio --start
$ cd ~/.config/pulse
/var/www-data/.config/pulse/client.conf
autospawn = no
daemon-binary = /bin/true
$ exit
# systemctl start nginx php7.0-fpm

# ユーザ www-dataからpulseaudioをスタートできますが同時に再生もwww-dataとして実行できます。pulseaudioの仕様なのかはわかっていません。

pulseaudioコントロール(radiko)

moode4.3では/var/wwwのsquashfsはoptionalとなっているためmoodeのwebサーバー(nginx)を利用します。
skyblue.cssの導入
SkyBlue CSS Frameworkをダウンロード、展開したskyblue-gh-pagesをhtmlにディレクトリ名変更

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

/var/www/htmlにメインのphpファイルを置きます。(radiko_s.php)

# mkdir /var/www/html/bin
# cd /var/www/html/bin
# touch broad.txt
# chown www-data:www-data broad.txt
# chmod 755 killall.sh
# chmod 755 moode.sh
# chmod 755 radiko.sh

/var/www/html/binに必要なスクリプトを置きました。(再生プレーヤーは使う可能性のあるものを書き込んでおきます)
/var/www/html/bin/killall.sh

#!/bin/sh
sudo killall -q mplayer
sudo killall -q mpv
sudo killall -q ffplay
mpc stop > /dev/null 2>&1

/var/www/html/bin/moode.sh

#!/bin/sh
sudo killall -q mplayer
sudo killall -q mpv
sudo killall -q ffplay
sudo killall -q pulseaudio

/var/www/html/bin

-rw-r--r-- 1 www-data www-data   17 10月 18 20:26 broad.txt
-rwxr-xr-x 1 root     root      103 10月 18 19:06 killall.sh
-rwxr-xr-x 1 root     root      104 10月 18 19:08 moode.sh
-rwxr-xr-x 1 root     root     7700 10月  9 22:46 radiko.sh

ブラウザから実行 http://moode/html/radiko_s.php

phpファイルは以前作成したものを手直ししています。
ボリューム値の取得についてはこちら
radiko_s.phpファイル
radiko.shスクリプトは頂戴したものを直しながら使用(radikoは聴取エリアがあります)
個別設定
30行目 デフォルト音量
61行目 mute
231行目 volume Limit


起動時の画面
当サイトでは以前ビルドしたsurf2ブラウザを340×100サイズで起動しています。
moodeボタン mpd再生開始(pulseaudio –kill)


STOPボタンまたは中央の音量表示ボタンクリックでpulseaudioスタート(mpd停止)
pulseaudioスタート後中央のボタンは音量デフォルト設定ボタンとして機能


選局はスクロールまたはウインドウを引き伸ばしてクリック
pulseaudioスタートしていない状態からもOK
mボタン mute

mpd〜pulseaudioは1クリックで切り替えが可能です。但しラジオの再生開始は10数秒を要します。(pi1B)
音量は基本出力装置タブ側に反映されます。再生タブ(入力)も適当に変化します。
pavucontrolで変更した値(出力装置タブ)はタイトル左の文字(moOde)をクリック(画面リロード)することで反映します。

サーバー自身(moode audio)からの再生(radiko)は必ずpulseaudioがスタートしている必要があります。
初期設定時はpavucontrolでモニタ、適切なデバイス及び音量を確認テスト後アンプのスイッチを入れるようにします。


moodeからradiko再生、クライアントからmp4再生、オーディオプレーヤー再生の出力はpulseaudioでミキシングして再生されます。(通常の音楽、映像再生用途ではこんな使い方はあまりしないと思いますが)
moode player以外にも音楽(音声)の中枢として活躍しています。