(2022-01-17 初稿 - 2022-01-21 修正・追記 )
(2022-01-19 追記)
VLC media playerが、バックグランドにもなり、とても使い勝手が良いことがわかった。そこで、この記事もVLCを利用する方法に修正、追記した。
(追記終了)
サーバとして使っていたRaspberry Pi 3を、先日苦労してBusterからBullseyeにアップグレードした。実のところ、アップグレードは、この記事のBGMサーバにするための準備だった。
筆者以外にもPi 3を4に更新し、余っているPi 3がある方も多いのではないかと思う。筆者の手元には数台のPi 3があり、その有効活用のひとつとして、Pi 3を超ローテクでBGMサーバにしてしたみた。
前提条件
ラズパイをBGMにするために、この記事では以下の前提がある。前提が多くて申し訳ない。m(__)m
- ラスパイとSSH接続できるPCがあり、できればパスフレーズ無しで接続できることが望ましい
- ラズパイにはスピーカーをつないでBGMを流す
- BGMなので、曲は選ばずにプレイリスト内の曲をランダムに選択して流す
以上の前提があり、それでも使ってみるという方は、以降を読んでください。
ラズパイの設定
プレイヤーソフトの選択
余ったラズパイには、ディスプレイやキーボード、マウスを付けておきたくないので、ラズパイはX環境の無いCLIとし、操作はリモートPCからのSSH接続で行うこととする。
CLIで運用するので、もちろん音楽再生ソフトもCLIで動作させる必要がある。CLIで動作するプレイヤーソフトとして、筆者が試した以下の3つを挙げる。
- mpg123:軽量、今回の目的には必要十分
- mpg321:やや重い、romoteコントロールが使えるようになると面白い(調査中)
- mplayer:重量、今回の目的以外にも、ラジオなどの他のストリーム系も対応可
- VLC Media Player:cvlcでCLIに対応、かつ、バックグランド実行にも対応
今回の目的のためには、いずれのソフトも必要十分な機能なので、コメントを参考にインストールして欲しい。インストール方法は、以下のとおり。
$ sudo apt install mpg123 ( or mpg321 or mplayer or vlc)
以下では、すべてのソフトの設定を示すのは冗長なので、mpg123の設定を示し、場合によりmplayerの設定を示す。
バックグランドでの実行
筆者の望みとしては、これらのソフトをバックグランドで実行し、必要に応じてフォアグランドで操作することだった。が、残念ながらいずれのソフトも希望に叶わず、バックグランド実行ができなかった。
VLCのみが、バックグランド実行に対応していた。
しかし、この問題は、どのソフトでも後ほどSSH接続で解決できる。
蛇足だが、nohupを用いれば、いずれのソフトもバックグランド実行が可能である。
$ nohup mpg123 xxxx.mp3 & $ cvlc xxxx.mp3 &
fgコマンドでフォアグランドにできるが、残念ながらVLC(cvlc)以外は、再びバックグランドにすることができない。
さらに余談であるが、どのソフトもラズパイにtmuxやscreenを導入すれば解決する。しかし、今回は簡易なBGMサーバであるため、これらの導入は見送った(単に面倒 (^^ゞ)。
SSH接続での操作
ここでは、ローカルPCからリモートのラズパイにパスフレーズで接続することを想定しているが、まだ設定が済んでいない場合は、以下を参考に設定して欲しい。
ラズパイ本体では思うような動作が難しかったが、筆者がやりたかったSSHを用いてリモートPCでラズパイを操作する方法はnohupを用いなくても動作する。
$ ssh Server mpg123 xxxx.mp3
さらに、以下のようにバックグランドで動作させるとsshのPIDを削除してもBGMを流し続けてくれる。
$ ssh Server mpg123 xxxx.mp3 & $ pgrep mpg123 $ kill 上記で調べたPID
playlistファイルの作成
playlistファイルの作成は、以下のように行う。
$ ls ~/Music/folder/*.mp3 > ~/Music/playlist-sample.m3u
他にもいろいろ情報を書き込めるようだが、今回は省略するので、必要な方はWebで検索して欲しい。
スクリプトの作成
なお、mplayerを利用することを前提に作成したが、mpg123に変更する場合はコメントを参照して変更願う。
(2022-01-19 追記)
一応、以下のスクリプトも残しておくが、もうひとつ下のVLCを用いたスクリプトの利用をおすすめする。
(追記終了)
$ cat bin/bgm #/bin/bash # Written H.Yamada 2022-01-16 # ver0.03 2022-01-16 サーバ設定をコマンドライン引数に # Raspberry Pi 3をBGMサーバに # bgm Music Start/Stop Toggle # Global Variable USAGE="bgm BGM On/Off Program for Raspberry Pi ver0.03 Raspberry PiをBGMサーバに [Usage] bgm server On/Off togle switch program server:設定無しの場合は手元のPC " CMD="mplayer" # CMD="mpg123" OPTION="-quiet -shuffle -playlist" # OPTION="-q -Z -@"
M3UFILE="Music/playlist-sample.m3u" if [ $# -gt 2 ]; then echo "$USAGE" exit fi SERVER="$1" #echo $SERVER if [ $SERVER ]; then rt=$(ssh $SERVER pgrep $CMD) if [ $rt ]; then echo "BGM off" ssh $SERVER killall -9 $CMD else echo "BGM on" ssh pi@$SERVER $CMD $OPTION /home/pi/$M3UFILE & sleep 3 #echo $! # クライアント側プロセスを消してOK kill $! #直前のバックグランドjobのプロセスID fi else rt=$(pgrep $CMD) if [ $rt ]; then echo "BGM off" kill $rt else echo "BGM on" nohup $CMD $OPTION ~/$M3UFILE & fi fi
こちらのスクリプトがおすすめ。
(2022-01-19追記)
#/bin/bash # bgm Music Start/Stop Toggle # Written H.Yamada 2022-01-16 # ver0.05 2022-01-19 vlc(cvlc)に変更 # Raspberry Pi 3をBGMサーバに # Global Variable USAGE="bgm BGM On/Off Program for Raspberry Pi ver0.05 Raspberry PiをBGMサーバに [Usage] bgm [-u username] [-f m3u-file] server On/Off toggle switch program Options -u username default pi -f m3u-file default m3ufile.m3u server:設定無しの場合はローカルPC " CMD="vlc" # CMD="mpg123" or "mplayer" OPTION="-I dummy -Z" # cvlc nearly = vlc -I dummy M3UFILE="playlist-sample.m3u" usage_exit() { echo "$USAGE" exit 1 } if [ $# -gt 6 ]; then usage_exit fi USR="pi" # Default User SERVER="" while getopts :f:hu: OPT do case $OPT in f) M3UFILE=$OPTARG ;; h) usage_exit ;; u) USR=$OPTARG ;; \?) usage_exit ;; esac done shift $((OPTIND - 1)) SERVER="$1" #echo "USER="$USR "SERVER="$SERVER "M3UFILE="$M3UFILE if [ $SERVER ]; then rt=$(ssh $USR@$SERVER pgrep $CMD) if [ $rt ]; then echo "BGM off" ssh $USR@$SERVER killall -9 $CMD else echo "BGM on" ssh $USR@$SERVER PULSE_SERVER=localhost \ $CMD $OPTION /home/$USR/Music/$M3UFILE \ > /dev/null 2>&1 & sleep 3 #echo $! # クライアント側プロセスを消してOK kill $! #直前のバックグランドjobのプロセスID fi else rt=$(pgrep $CMD) if [ $rt ]; then echo "BGM off" kill $rt else echo "BGM on" $CMD $OPTION ~/Music/$M3UFILE & fi fi
(追記終了)
実際の実行は、ローカルPCの場合は、bgm コマンドのみをリモートPCで実行する場合は、オプションで-u ユーザ名 -f m3uファイル名の他、サーバ名を入力する。
$ bgm [-u Username -f M3ufile] (server) # serverをなしの場合ローカルPCで実行
再度同じコマンドを入力することにより、BGMをoffにできる。
音量調節
スクリプトでは、音量調節ができないので(<をい)、ラズパイに付けたスピーカーのボリュームで調節するか、以下のようにSSHでサーバに接続してalsamixerで調節してね。^^;
$ ssh Server $ alsamixer
おわりに
バックグランド実行で手間取ったが、なんとか思うようにラズパイをBGMサーバとして活用できそうだ。VLCやmplayerはサイマルラジオ等のネットストリームの再生もできるようなので、設定ができたらまたアップする。
なお、余談だが、この投稿がはてなブログの100個目の記事になる。
少し振り返ってみると、誤字や間違いが多くあるので、しばらくの間、新規を控えて修正と更新をしたいと考えている。
今後ともご愛顧お願いします。
関連ページ