Raspberry Pi Zero + moOde audio 6.4.2

moOde audio 6.4.2がリリースされています。
前回pulseaudioが若干コケたこともあり仕切り直しということでココと同じ方法で6.4.2をインストールしてみたいと思います。

moOde audio 6.4.2

環境はtightvncserver + dwm + pulseaudio + サイマルラジオ(ラジコ)
6.4.1で作成した設定ファイル、ホームディレクトリをコピー、必要なパッケージをインストール
当サイトの仕様(環境)で不要なアプリケーション、サービスを削除、停止しています。

moode-r642-config.txt

稼働中の641に書き込んだ新規カードをマウントしてコピー実行

#!/bin/sh
cp /etc/passwd ./etc
cp /etc/shadow ./etc
cp /etc/group ./etc
cp /etc/gshadow ./etc
cp /etc/sudoers ./etc

cp -Rp /var/www/html ./var/www
rm -r ./var/www/html/www-data/.config/pulse
cp /etc/dhcpcd.conf ./etc/dhcpcd.conf
#cp /etc/wpa_supplicant/wpa_supplicant.conf ./etc/wpa_supplicant
cp /etc/default/locale ./etc/default
cp /etc/locale.gen ./etc
cp /etc/pulse/default.pa ./etc/pulse
cp /etc/rc.local ./etc
cp /etc/init.d/vncboot ./etc/init.d
cp /usr/local/bin/dwm ./usr/local/bin
cp /etc/dphys-swapfile ./etc
cp -r /etc/mplayer ./etc
cp -r /etc/fonts ./etc

cp /root/.bashrc ./root
cp /root/.vimrc ./root

mv ./home/pi ./home/pi.def
cp -rp /home/pi ./home

moode-r642-setup.txt

新規カード(642)で起動して実行

#!/bin/sh
# ssh pi@moode
# moodeaudio

# locale
locale-gen
# Timazone
timedatectl set-timezone Asia/Tokyo

apt update
apt -y purge chromium-browser
apt -y purge make gcc rpi-eeprom
apt -y purge udisks udisks2 hostapd minidlna
apt -y purge bluez bluez-firmware libbluetooth-dev libbluetooth3
echo "--- autoremove ---"
apt -y autoremove

apt -y install tcsh lv vim
apt -y install tightvncserver autocutsel
apt -y install ranger highlight
apt -y install pulseaudio pavucontrol ncmpcpp
apt -y install xbindkeys python3-tk suckless-tools
apt -y install mpv mplayer swftools libxml2-utils rtmpdump
apt -y remove youtube-dl
curl -L https://yt-dl.org/downloads/latest/youtube-dl -o /usr/local/bin/youtube-dl
chmod a+rx /usr/local/bin/youtube-dl

echo "--- jp ---"
apt install -y fonts-ipafont fonts-ricty-diminished
apt install -y uim uim-anthy uim-xim uim-gtk2.0

# pulseaudio
rm -r /var/www/html/www-data/.config/pulse
sudo -u www-data pulseaudio --start
sleep 1
cp -p /var/www/html/www-data/.config/client.conf /var/www/html/www-data/.config/pulse
cp -p /var/www/html/www-data/.config/default.pa /var/www/html/www-data/.config/pulse

echo "--- systemctl ---"
systemctl enable vncboot
systemctl enable dphys-swapfile
systemctl disable wpa_supplicant
systemctl disable keyboard-setup

apt -y autoremove

sh -c 'echo -n "Hit Enter key to reboot..."; read x'
reboot

pulseaudioは稼働中の641で予めclient.confとdefault.paを~/.configにコピーしています。

# cp -p /var/www/html/www-data/.config/pulse/client.conf /var/www/html/www-data/.config
# cp -p /var/www/html/www-data/.config/pulse/default.pa /var/www/html/www-data/.config

新規カードで~/.config/pulseを削除 pulseaudio –startして再作成
~/.configからclient.confとdefault.paをpulseにコピー


pulseaudioの不具合は630辺りの手作業で設定の際www-data client.confとdefault.paの設定忘れが原因だったようです。
moOde playerからI2Sデバイスのファームウェアとミュージックソースを設定
クライアントからはssh-keygen -R moodeで鍵を作り直す以外は今までどおり接続が可能です。


pulse.phpはpavucontrolから見ると出力装置タブの値を表示コントロールします。アプリケーション、使い方によっては再生タブの値を変更します。通常は出力装置タブと再生タブの値を合わせることでpulse.phpからは同時に変化します。
当初と比べると現在(642)ではラジコの再生は5秒位でスタートします。(初回起動は少し時間掛かる)
Zeroでpavucontrolを動かしていますが安定しています。

Raspberry Pi サイマルラジオ

前回Raspberry Pi Zeroのpulseaudioも解決を見たのでローカルのマシンもサイマルラジオを更新してみようと思います。

環境はvncクライアントのPi3、Pi4(ヘッドレスvncserver)、OrangePi3(ファイルサーバー)の音声を全てRaspberry Pi Zeroのpulseaudioサーバーに送るものとします。
Pi4はRaspbian2020-02-05版を新規インストールしています。

moOde audioとpulseaudio

moOde audioのmpdは音質的な面でも劣化の可能性があるpulseaudioには対応していません。
pulseaudioを導入すること自体はここ数年常時運用してきた実績から基本問題ないものと思います。
(audioの世界では何かしらの影響があるのかもしれませんがそこまで追求しないことにします)
むしろpulseaudioを導入することでローカルの音をmoOde audioに集約、そして資源(アンプ、スピーカー)を有効に活用することができます。
問題はミキサーの持たないI2SデバイスをmoOde audio自身(内部)から再生(mpd以外)する際はpulseaudioがスタートしている必要があります。(キルで100%出力)
安全に運用する方法としてpulseaudioは接続を受けるだけとしてmoOde audioからはmpdの再生オンリーにするという方法もあります(設定作業時やらかしてしまうことがある)。リストからradiko,mms;//を外してmplayer,mpvをインストールしない(or remove)すれば心配は無くなります。OSに含まれるコマンドもありますがsimul.pyから以外は実行しない。
pulseaudioスタート時mpc playするとmpd errorを返しますがpause状態になっているのでキルして再度playすればほとんど通常通り再生開始します。pulseaudioがスタートしていなければ外部のマシンからの音は出ないだけです。

当サイトのZeroはwww-dataのclient.confにauto-connect-localhost = yesを加えることで解決しました。但し内部からの実行はpulseaudioをキルしてしまうのでpavucontrolの起動は安全のために必要です。(ここも何らかの設定(オプション)があるのかもしれません)

Raspberry Pi

Raspberry Piには以前と同じようにmpdをインストール、mpd.confのaudio_outputはpulseaudioに向けておきます。
SimulRadio(サイマルラジオ) – MPD(music player daemon)
各マシンのユーザー ~/.config/pulse/client.confはpulseサーバー(Zero)のアドレス指定

autospawn = no
daemon-binary = /bin/true
default-server = 192.168.xx.xxx

simul.py
simul-sub.py
simul-vol.py
killall.sh
エリアリストはほぼ1画面に収まるよう再編成しました。エリアファイル名を変更しています。
ボタンは1段増やして、mpc volumeをマウスで調節できます。
mpdの出力レベルはncmpcppに表示されているmpc volumeの値です。pulse.phpに表示されるpactl set-sink-volumeの値とは常に一致するとは限りません。Vol-DEFボタンはsimul-vol.pyを実行
mpd以外(radikoなど)はpulse.phpに表示されている値(再読込)が適用されます。
radiko volumeはdefault setのradiko_volで変更可
listboxの大きさはボタンサイズが決まったらdefault setのlb_h,lb_wで合わせる

Videoリスト


お気に入りのプロモーションビデオファイルなどを登録します。
default setのvideo_dir = “/home/pi/radio/video/”以下にアーティスト別にディレクトリがあると仮定しています。
ジャンルを含めてもいいと思います。
実行は拡張子(mp4)を検索しています。
ファイル名に空白や半角記号括弧()などあるとpythonからは読めません。
リストのファイル名は実ファイル名と合っている必要があります。

リスト例

"あいみょん/あいみょん-ハルノヒ_ライブ配信-ByLz5Hczdg8.mp4"

YouTubeの動画はすぐ削除されることがあります。(GET)

$ youtube-dl -f mp4 w4CgAl7CqKo # url末尾
$ youtube-dl -f mp4 "https://youtu.be/-4CgAl7CqKo"  # url末尾の最初にハイフォンがある

YouTubeリスト

YouTubeは直接見たほうが早いのですが再度途中から再開して見たいときのブックマーク代わり
url “youtube”を検索

HPリスト

リストの最初に”hp-“の3文字を付加してurlを記載しておくとwebブラウザを起動します。
ほかのタグ(workspace)にchromium-browserが起動してあれば新しいタブで表示します。
urlの前に半角空白を入れる
“hp-「NHKラジオニュース」 https://www.nhk.or.jp/radionews/”

ncnpcpp

music_directory     "/home/hda/hda4/music"


moOde playerで設定したmusic sourceをmpd.confに設定することで同様にplay listに追加することができます。左クリック追加、右クリック再生開始

Raspberry Pi3

pythonプログラムはPi3 Pi4 OPi3とも共通(違いはタイトルラベルの色)
radioディレクトリもファイルサーバーのOPi3にあり共通化しています。
同時に再生も可能ですがスペック不足のZeroではpulseaudioは乱れます。
RadikoはZero以外で再生したほうが早く快適です。

Raspberry Pi Zero

Zeroのcpu使用率が100%に掛かってくるとpulseaudioは乱れてきます。
pulseaudio使用時は70〜80%前後ですがpavucontrolをほかのマシンで起動しておくと40%前後に落ち着きます。
ほかにもネットワーク環境や混み合ってくると乱れてくることがあるようです。

当初サイマルラジオは簡単シンプル短編でいくつもりでしたが思わず長編小説になってしまいました。
まだまだ手直しするところはあるのですが取り敢えず初期の目標はクリアしたと思うのでヨシということにします。

moOde audio + pulseaudio(pulse.php)

最近になってpulseaudio(pulse.php)の動作が以前と変わってしまいました。
具体的な現象としては外部からの接続時に作成したpulse.phpの音量表示が消える(音は出ている)
ボタンから再度スタートすると表示するが音量コントロールが効かない(間もなくキル)
pulseaudioはスタートしていてpavucontrolからは正常にコントロールできる

原因は不明ですが設定ファイルは以前と同じファイルを使っており今後の展開を踏まえ現状でなんとか打開策を模索してみることにしました。
Raspberry Pi Zero moOde audio 630(PulseAudio)

追記 20-02-09
以下の対策は失敗でした。表示は消えないものの一定時間経過後、肝心の音量変更が不可になります。

過去の設定を見直して見たところやはりwww-dataの~/.config/pulseの中のdefault.pa client.confの設定が抜けていました。
/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

追記 20-02-11
client.confにauto-connect-localhost = yesを追記することで解決しました。

/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

変更したpulse.phpのtouch —client.conf 2行 rm —client.conf 1行を削除してpulseaudio –start
これで今までの設定になりますがchromium-browserで1〜2時間動画を視聴していると同じ現象が発生することがあります。取り敢えずpulse.phpのmoOdeボタンでpulseaudioキル、再度pulseaudioをスタートすると制御が戻ります。
復帰しないときはコマンドラインからnginx php7.3-fpm リスタート

$ sudo systemctl restart nginx php7.3-fpm

chromium-browserがwww-dataを制御しているようです。
これで様子を見ながら今後の課題とすることにします。

以下記事は無視

client.conf


moOde audio自身(内部)から実行するpulseaudioは特に問題なく再生する
外部からの接続時は30分〜1時間位で発生
現象発生時pulseaudioはwww-dataとしてスタートしている

$ ps aux | grep pulseaudio
www-data 15111  8.7  4.0 177528 18120 ?        Sl   09:53   0:01 pulseaudio --start
$ sudo -u www-data pactl list sinks | grep Volume
Invalid MIT-MAGIC-COOKIE-1 keyxcb_connection_has_error() は真を返しました
接続失敗 : 接続拒否
pa_context_connect() は失敗 : 接続拒否

/var/www/html/www-data/.config/pulse/client.confの空ファイルを置いておくと安定してpulseaudioを実行するがpulseaudio –killが効かない(再スタートする)

pulse.php

以上から外部からの接続時はclient.confをtouchしてpulseaudioをスタート、自身のmpdに切り替える際はclient.confをrmするようpulse.phpに追記してみました。

/var/www/html/pulse.php
/var/www/html/killall.sh

pulseボタン or 音量値ボタンでclient.confをtouch
default settingsにdefault volumeとplaylistを設定
moOdeボタンはmpc playとmpc pauseのトグル

simul.py

moOde audioのmpd再生はpulseaudioをキルしなければいけません。自身でのpulseaudio再生も特にclient.confは必要無いようなのでplay実行時client.confの有無をチェックしてrmしています。
再生開始はpulse.phpがpulseaudioモードでもsimul.pyが良きに計らってくれる筈です。(ボリューム値は再読込が必要)
~/bin/simul.py ~/bin/simul-sub.py

# play
def play_click():
    command = ("sudo ls /var/www/html/www-data/.config/pulse/client.conf")
    proc = (subprocess.Popen(command, stdout=subprocess.PIPE, shell=True).communicate()[0]).decode('utf-8')
    proc = proc[-12:]; proc=proc.strip()
    if proc == "client.conf":
        subprocess.run("sudo rm /var/www/html/www-data/.config/pulse/client.conf", shell=True)
    subprocess.run("~/bin/killall.sh", shell=True)
    play_selection()

当サイトではpulse.phpがpulseaudioの要になっています。以前と同じ動作になりました。
moOde audio(641)移行時必要なファイル(ライブラリ)を削除してしまったのかもしれません。

サイマルラジオ

以前作成したサイマルラジオリストに変更や新規開設した局など気がついた分を追加修正しています。

誤りなどがあれば勝手に修正して下さい。気が向いたら更新するかもしれません。

Good day good radio life

サイマルラジオリスト


CSRA.list 200205

ラジオカロスサッポロ/札幌市 ListenRadio休止 変更 mms://hdv2.nkansai.tv/radiokaros
エフエムしろいし/札幌市白石区 追記 mms://hdv5.nkansai.tv/shiroishi
すまいるエフエム -> クローバーラジオ 変更 ListenRadio 30026
八王子FM -> Tokyo Star Radio 変更 ListenRadio 30081
コマラジ|狛江エフエム/東京都狛江市 新規 ListenRadio 30051

JCBA.list 200205

FM サルース/横浜市 ListenRadio休止 JCBA加盟 JCB117
805たんば/兵庫県丹波市 新規 JCB118
FM鳥取 RADIO BIRD/鳥取県鳥取市 新規 JCB119

NHK.list


http://radiko.jp/

radikoはエリアによって聴取できる局が違います。ホームページにアクセス、ラジオ局urlの末尾にIDがあります。

その他

ON AIRリスト ListenRadio(CSRA) ListenRadio
ON AIRリスト JCB JCB
ON AIRリスト NHK.txt NHK.txt
ボリューム設定 vol vol
ボリューム設定 mms-pulse_vol.py(moode audio) mms-pulse_vol.py
ボリューム設定 mms-mpc_vol.py(raspberry pi) mms-mpc_vol.py

Raspberry Pi Zero + moOde audio(サイマルラジオ)

これまでスクロールバーはプログラム起動時以外は有効になっていませんでした。スクロールバーを有効にすると共に表示形式を1行にすることで表示及び選択範囲が格段に向上します。

またsimul.pyからもradikoを実行できるようにしました。
コンパクトなラジオを作成することができます。

simul-sub.py

デフォルトのsimul.pyと今回作成したsimul-sub.py
エリア別のリストを使うかまとまったリストを使うかの違いで基本プログラムは共通です。
同マシン内ではどちらからも操作可能ですが独立して鳴らすことはできません。

ラジオディレクトリ
default setでradioとFAVORITEディレクトリを設定しています。
radioディレクトリの変更や別ユーザーで作成する場合はdefault setを変更します。
FAVORITEディレクトリはdefault版とsub版で別にすることができます。
radioディレクトリはsimul-vol.pyでも設定、変更しています。

# --- default set ---
# default radio_dir
radio_dir = "/home/pi/radio/"
# default favorite_dir
favorite_dir = "/home/pi/radio/FAVORITE/simul-default/"
# default area
t = favorite_dir+"favorite1"

ラジオリスト
今まではラジオ局名とurlをそれぞれダブルコーテーションで括っていたものを半角空白を入れて一つに纏めます。
再生時はawkでurlを取り出して実行

"fmはな/標津郡中標津町 https://musicbird-hls.leanstream.co/musicbird/JCB001.stream/playlist.m3u8"

スクロールバー
Scrollbar x y を適当な位置に書いてスクロールバーを表示させたいリストに;x();y()を追記

# CSRA
def csra_click():
    global t; t=radio_dir+"CSRA/CSRA.list"; area_selection();x();y()
---
# Scrollbar x
def x():
    scrollbar = ttk.Scrollbar(frame1,orient=HORIZONTAL,command=lb.xview)
    lb['xscrollcommand'] = scrollbar.set
    scrollbar.grid(row=1,column=0,sticky=(E,W))
# Scrollbar y
def y():
    scrollbar = ttk.Scrollbar(frame1,orient=VERTICAL,command=lb.yview)
    lb['yscrollcommand'] = scrollbar.set
    scrollbar.grid(row=0,column=1,sticky=(N,S))

ラジコ

リスト先頭のradikoの文字列を検索末尾のラジオ局IDを適用してラジコスクリプトを実行します。
ラジコスクリプトと関連パッケージはこれまでインストールしたものを使います。

/home/pi/radio/RADIKO/radiko.list

" --- radiko(ラジコ) ---"
"radiko/TOKYO FM FMT"
"radiko/J-WAVE FMJ"
"radiko/Rani Music RN2"
"radiko/Bayfm78 BAYFM78"
"radiko/FM yokohama 84.7 YFM"
"radiko/Inter FM 897 INT"
"radiko/NACK5 NACK5"
"radiko/TBSラジオ TBS"
"radiko/文化放送 QRR"
"radiko/ニッポン放送 LFR"
"radiko/ラジオ日本 JORF"
"radiko/ラジオNIKKEI第1 RN1"
"radiko/放送大学 HOUSOU-DAIGAKU"


ラジオ局リストは全て1行形式で作成
タイトルのON AIRはボタンで同期します。


ディレクトリ、ファイルの位置関係
実行ファイル実行ファイル simul.py simul-sub.py simul-vol.pyは~/bin

参考
raspberry pi + moOde audio
ディレクトリ、ファイルに手を加えているので全ての動作を確認するまでは音量に注意
# 02/06 差し替え
simul.py
simul-sub.py
simul-vol.py
ラジオ局リストは若干の変更、新設があるようなので整理中です。
raspbian仕様は作業中

Top