moOde audioとPeppyMeterの統合 (ver.10.0.0対応版)

RasPi Audio

以前、moOde audio ver9.4.2に対応した“moOde audioとPeppyMeterの統合(ver.9.4.0以降対応版)”を投稿しました。

moOde audioはver9.4.0からPeppyMeterに対応するようになりましたが、WebUIとは別のディスプレにPeppyMeterを表示するようになっているようです。単一ディスプレイに両方表示する上記投稿をmoOde audio最新版ver10.0.0用に以下に書き直しました。

以下にご紹介する方法は、最新版10.0.1でも動作を確認できました。

システムは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という解像度がある
ですので、ディスプレイを2つに分割して上部(高さ880)をmoOde audio、下部(高さ400)をPeppyMeterにすれば両方同時に表示できると考えました。以下に手順をご紹介いたします。
尚、試される方は以下の点に注意してください。

・ご紹介する手順ではいくつかのファイルを修正しています。
問題があったときに元に戻せるように必ずオリジナルのコピーを保存してください。
・下記手順はターミナルからsshでmoOdeにログインしrootユーザて行っています。
状況に合わせてご自身でご判断ください。

今回は執筆時点で最新版の moOde audio 10.0.0 にPeppyMeterを統合しています。
moOde audio 10.0.0をインストールしてローカルディスプレイを有効にすると以下のようなUIが起動します。

1.moOde audioをSetup Guideにしたがってインストールします。
ローカルディスプレイはまだ有効にしなくて良いです。

2.これまでは以下の3つの手順でpeppy-alsaをインストールしていましたが
moOde10.0.0にはpeppy-alsaがインストールされています。
以下の手順(1)でライブラリのビルドが失敗しますがライブラリは
/usr/lib/aarch64-linux-gnu
に元々インストールされていますのでこちらを使用します。

(1) Installation and configuration of PeppyAlsa
この部分は、
sudo apt install git
git clone https://github.com/project-owner/peppyalsa.git
を実行し、ライブラリのビルド、インストールはせずインストールされている
ライブラリを使用します。
(2) Modification of moOde の "moOde 7.2.0 and later."の部分
/etc/alsa/conf.d/_sndaloop.confの編集の
pcm_scope_type.peppyalsa {
lib /usr/local/lib/libpeppyalsa.so
}
の部分は
pcm_scope_type.peppyalsa {
lib /usr/lib/aarch64-linux-gnu/libpeppyalsa.so
}
とします。
(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しています。
9.4.0以降はPeppyMeterが/opt/peppymeterにインストールされていますので、cloneする必要
はなく、これを使用します。

6./opt/peppymeter/1280x400ディレクトリを/opt/peppymeter/1280x400-customという名前で
コピーします。(オリジナルを保存し1280x400-customを使用します。)

7./etc/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./opt/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が表示されます。
PeppyMeter統合前は以下のUIになります。
10.PeppyMeterの自動起動を設定します。
PeppyMeterをSystemdで起動するためサービス用の起動ファイル
/opt/peppymeter/peppymeter.sh
を以下の内容で作成します。
#!/bin/sh
DISPLAY=:0 python /opt/peppymeter/peppymeter.py
   以下のコマンドで実行権を与えます。
# chmod +111 /opt/peppymeter/peppymeter.sh
11.peppermeter.shを起動するサービスファイル
/etc/systemd/system/peppymeter.service
を以下の内容で作成します。
moOdeのローカルディスプレイは
/lib/systemd/system/localdisplay.service
で起動されます。ローカルディスプレイの後にPeppyMeterを起動するためAfter、Requiresを
指定します。
[Unit]
Description=Service to start PeppyMeter
After=localdisplay.service
Requires=localdisplay.service
[Service]
WorkingDirectory=/opt/peppymeter/
ExecStart=/opt/peppymeter/peppymeter.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

[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 の統合についてご紹介しました。
同様のことを検討されている方のご参考になれば幸いです。

コメント

タイトルとURLをコピーしました