ここ数年、オーディオ再生はRaspberry Piに搭載したmoOde audioを使用しています。Volumioなどいくつか試してmoOde audioに落ち着きました。
Raspberry Pi 3 Model Bで使い始めたmoOde audioも3B+、4Bを経て、現在はRaspberry Pi 5を中心とした以下の機器構成で使用しています。

当初、ヘッドレスで使用していましたが、公式タッチディスプレイを接続してmoOde UIを表示するようにしました。スマホやPCの画面に慣れていると公式タッチディスプレイの画面は荒く感じ、高解像度にしたくなり上記のタッチディスプレイに変更して使用しています。
moOde audioのインストールはSetup Guideがしっかりしているので特に問題なく進められると思います。以下に注意すれば良いでしょう。
・起動メディアは“Raspberry Pi Imager”で作成する
・作成の際にhostname、userid、passwordなどを設定する
最近、PeppyMeterというPythonで書かれたソフトウェアVUメータがありmoOde audioでも利用可能と知りました。PeppyMeterについては以下をご参照ください。
moOde audioとPeppyMeterを統合する方法は以下をご参照ください。
上記の方法で統合できるのですが、ローカルディスプレイにmoOde audioのUIとPeppyMeterを同時に表示したくて方法を模索していました。
使用ディスプレイは1920×1280です。
・moOde audioには1920×540というUltra-wide attached displayというモードがある
・PeppyMeterには1280×400という解像度がある
ですので、ディスプレイの上部(高さ880)をmoOde audio、下部(高さ400)をPeppyMeterにすれば両方同時に表示できると考えました。以下に手順をご紹介いたします。
尚、試される方は以下の点に注意してください。
・ご紹介する手順ではいくつかのファイルを修正しています。
問題があったときに元に戻せるように必ずオリジナルのコピーを保存してください。
・下記手順はターミナルからsshでmoOdeにログインしrootユーザて行っています。
状況に合わせてご自身でご判断ください。
今回は執筆時点で最新版の moOde audio 9.3.7 にPeppyMeterを統合しています。
moOde audio 9.3.7をインストールしてローカルディスプレイを有効にすると以下のようなUIが起動します。

1.moOde audioをSetup Guideにしたがってインストールします。
ローカルディスプレイはまだ有効にしなくて良いです。
2.上記"PeppyMeter_and_moOde"にしたがってpeppyalsaを準備していきます。
具体的には以下のURLの3つのステップになります。
(1) Installation and configuration of PeppyAlsa
(2) Modification of moOde の "moOde 7.2.0 and later."の部分
(3) Modification of moOde のreboot以降
(3)の最後にあるようにターミナルでpeppyalsa-clientを起動すると再生音楽に合わせて
バーが動きます。バーが動けばALSAのループバック機能は正常に動作しています。

次の手順からPeppyMeterを準備していきますが、上記"PeppyMeter_and_moOde"の手順とは内容が
異なっていますのでご注意ください。
3.moOde audioのローカルUIはchromium上で実行されます。
moOdeをインストールするときに設定したユーザ(ここではhogeとします)の
/home/hoge/.xinitrc
の以下の部分に
"SCREEN_RES="1920x880"
を加筆してchromiumのサイズを1920x880に設定します。
(chromiumの下端に1280x400のPeppyMeterを表示するため)
尚、.xinitrcファイルの所有者はrootユーザなので、hogeユーザでは編集できないので
ご注意ください。
#/home/hoge/.xinitrc
# Capture native screen size
fgrep "#dtoverlay=vc4-kms-v3d" /boot/firmware/config.txt
if [ $? -ne 0 ]; then
SCREEN_RES=$(kmsprint | awk '$1 == "FB" {print $3}' | awk -F"x" '{print $1","$2}')
else
SCREEN_RES=$(fbset -s | awk '$1 == "geometry" {print $2","$3}')
fi
##########
#add this line.
SCREEN_RES="1920,880"
##########
# Set HDMI/DSI screen orientation
HDMI_SCN_ORIENT=$(moodeutl -q "SELECT value FROM cfg_system WHERE param='hdmi_scn_orient'")
4.moOdeの画面レイアウトをUltra-wide displayにするために
/var/www/css/styles.min.css
の以下の部分に
,(height:880px) and (width:1920px)
を追加します。
styles.min.cssはGulpによって縮小されているようで追加箇所が分かりにくいですが、
以下の部分を参考にしてください。
((width:1559px)の後に追記します。ファイル中に"1559px"は1箇所と思います。)
@media (max-height:549px) and (width:1919px),(max-height:599px) and (width:1599px),(max-height:719px) and (width:1559px),(height:880px) and (width:1920px)
5.上記"PeppyMeter_and_moOde"ではPeppyMeterをユーザディレクトリに git cloneしています。
ここでは、ユーザディレクトリにcloneしたPeppyMeterディレクトリを/usr/localにコピー
します。
6./usr/local/PeppyMeter/1280x400ディレクトリを/usr/local/PeppyMeter/1280x400-customと
いう名前でコピーします。(オリジナルを保存し1280x400-customを使用します。)
7./usr/local/PeppyMeter/config.txtの該当部分を以下のように修正します。
1280x400-custom内のblueというメータを指定しています。
下4行は、
https://github.com/FdeAlexa/PeppyMeter_and_moOde/blob/main/3_PeppyMeter.md
に記載の内容です。
meter = blue
meter.folder = 1280x400-custom
framebuffer.device = /dev/fb0
mouse.device = /dev/input/event0
double.buffer = False
pipe.name = /var/tmp/peppyfifo
8./usr/local/PeppyMeter/peppymeter.pyの該当箇所に以下を加筆します。
ここで1280x400のメータをディスプレイ下部中央に配置する座標を設定しています。
行頭はタブではなく空白としてください。
pygame.init()
pygame.display.set_caption("Peppy Meter")
pygame.font.init()
################################
# add below lines.
d = pygame.display.get_desktop_sizes()[0]
x = (d[0] - screen_w) / 2
y = d[1] - screen_h
os.environ['SDL_VIDEO_WINDOW_POS'] = "%d,%d" % (x,y)
################################
if self.util.meter_config[SDL_ENV][DOUBLE_BUFFER]:
if self.util.meter_config[SDL_ENV][NO_FRAME]:
9.ここでmoOdeのローカルディスプレイを有効にして、以下のコマンドを実行します。
$ DISPLAY=:0 python peppymeter.py
PeppyMeterが起動するのでレイアウトを確認してください。
設定に問題なければ、下図のようにディスプレイ上部にUltra-wide displayのmoOde UI、
下部中央にPeppyMeterが表示されます。
ただし、
libpng warning: iCCP: known incorrect sRGB profile
という警告メッセージが表示されると思います。
これは以下の手順で解消できるそうです。
# apt install imagemagick
# cd /usr/local/PeppyMeter
# mogrify **/*.png
参考URL : https://moodeaudio.org/forum/showthread.php?tid=3484&pid=54719#pid54719

PeppyMeter統合前は以下のUIになります。

10.PeppyMeterの自動起動を設定します。
PeppyMeterをSystemdで起動するためサービス用の起動ファイル
/usr/local/PeppyMeter/peppymeter.sh
を以下の内容で作成します。
#!/bin/sh
DISPLAY=:0 python /usr/local/PeppyMeter/peppymeter.py
以下のコマンドで実行権を与えます。
# chmod +111 /usr/local/PeppyMeter/PeppyService.sh
11.peppermeter.shを起動するサービスファイルを以下の内容で作成します。
moOdeのローカルディスプレイは
/lib/systemd/system/localdisplay.service
で起動されます。ローカルディスプレイの後にPeppyMeterを起動するためAfter、Requiresを
指定します。
[Unit]
Description=FdA Service to start PeppyMeter at PLAY
After=localdisplay.service
Requires=localdisplay.service
[Service]
WorkingDirectory=/usr/local/PeppyMeter/
ExecStart=/usr/local/PeppyMeter/PeppyService.sh
[Install]
WantedBy=multi-user.target
12./lib/systemd/system/localdisplay.serviceにWantsを追記します。
[Unit]
Description=Start Local Display
After=nginx.service php8.2-fpm.service mpd.service
Wants=PeppyMeter.service
#Wants=fda_autopeppy.service
[Service]
Type=simple
# Start xserver
User=taku
ExecStart=/usr/bin/xinit -- -nocursor
[Install]
WantedBy=multi-user.target
13.以下のコマンドでサービスを有効にします。
# systemctl daemon-reload
# systemctl enable PeppyMeter.service
上記でlocaldisplayの後にPeppyMeterが起動し、localdisplayを終了するとPeppyMeterも
終了します。
システムを再起動して"systemd-analyze"コマンドで起動時のプロセス実行履歴をグラフで
確認すると以下のようになり、localdisplay.serviceの後にPeppyMeter.serviceが
起動していることがわかります。(この2つのサービスのみを表示しています。)

以上、moOde audio と PeppyMeter の統合についてご紹介しました。
同様のことを検討されている方のご参考になれば幸いです。
コメント