Raspberry Pi ZERO(stretch-lite)で作るRadiko Player(運用)

前回ではwebサーバーの設定まで済みました。引き続きwebサーバーのチェックをしながら進めていきたいと思います。

当サイトの環境はディスクトップにRaspberry Pi3そしてZERO(radiko)はmoode audioのpulseサーバーから再生した音を出すものとします。
ZEROのhostnameはpiz0、IPアドレスは192.168.0.115に設定してあるのでPi3の/etc/hostsに登録しておきます。

192.168.0.115   piz0

pi3からzeroにブラウザからアクセス

http://piz0/


webサーバーは正常に起動しています。

chromiumブラウザではホスト名だけでアクセスできます。名前解決できない時はIPアドレスでアクセスしましょう。

次に/var/www/htmlにphpinfo.phpを作成してアクセスしてみます。

<?php
  phpinfo();
?>

http://piz0/phpinfo.php

php7.0-fpmもOK

次はSkyBlue CSSを導入します。zeroにsshログインしてダウンロードはホームディレクトリでいいでしょう。

$ wget https://github.com/Stanko/skyblue/archive/gh-pages.zip
$ unzip gh-pages.zip
drwxr-xr-x 6 pi   pi     4096  4月  8  2015 skyblue-gh-pages
$ sudo mv skyblue-gh-pages/* /var/www/html

再度ブラウザからアクセスしてみます。
http://piz0/

今見えているページはダウンロードしたindex.htmlになります。このページにあることがskyblue cssにできることの全てです。試しにindex.html23行目bg-darkの部分をbg-errorに変更するとタイトル背景は赤に変わります。使えるボタンや色は限られていますが軽量、且つ比較的簡単に扱えることが特徴です。AboutにあるようにBootstrapなどを使えばもっと凝ったUIを構築することも可能です。(当サイトは才能がないのでやめておきます)

以上まで正常に確認できればベースとなる部分は終了なのでindex.html,index.nginx-debian.html,phpinfo.phpは適当なディレクトリを作成して退避させておきます。

ラヂオのベースとなるindex.phpを作成していきますが整理しやすいようにスクリプト関係を/var/www/html/bin以下に置くようにしました。またこのディレクトリには再生中の放送局を書き出したファイル(broad.txt)が保存されます。

# mkdir /var/www/html/bin
# chown www-data:www-data /var/www/html/bin

radikoスクリプトも/var/www/html/bin以下においておきます。
/var/www/html/bin/killall.shの作成

#!/bin/sh
killall mplayer > /dev/null 2>&1
killall ffplay > /dev/null 2>&1
killall mpv > /dev/null 2>&1 #必要に応じて
作成したら
# chmod 755 killall.sh

index.phpの作成


sampleは/var/www/htmlにindex.phpのファイル名で置きます。
radikoは聴取制限があるので地域に合わせってリストを作成して下さい。
らじるやCSRA.fmなどは下記のページにまとまっています。
らじる★らじるを録音するWSHです

index.phpは主に前半がphp実行部、後半がhtml部分になっています。
html部でボタンを作成、idを適当に割当て(任意)php部分のcase文で適用します。

編集をする際はphpの記述を間違うと画面は真っ白になるため常にバックアップを取りながら実行していきます。

ボリュームコントロール

デフォルトのボリューム値は環境に合わせて変更します。カードが複数存在する時は下記のようになります。

case "def":
    exec("pactl -- set-sink-volume 0 25% > /dev/null 2>&1");
    exec("pactl -- set-sink-volume 1 25% > /dev/null 2>&1");
break;

ボリューム値の取得(Volume Control)

$ pactl list sinks | grep VolumVolume: front-left: 16384 /  25% / -36.12 dB,   front-right: 16384 /  25% / -36.12 dB
Base Volume: 65536 / 100% / 0.00 dB

上記のコマンドから25%の値を拾っています。
当サイトのカードでは以上の値を出力しますがボリューム値をうまく取得できない時は以下を試して下さい。

<!-- Volume Control -->
    }
    $vol = explode(' ',$vol,10); // スペースごとに10ブロック取得
//print_r($vol); // コメントを外す
    $vol = $vol[5]; // 5番目の値を取得
    $vol = substr($vol,0,3);
    $vol = str_replace('%', '', $vol);
    // VR Limit ボリュームリミット
    if ($vol >= 50) {
        exec("pactl -- set-sink-volume 0 25% > /dev/null 2>&1");
    }


print_r($vol);コメントを外して再読込すると画像のように表示します。
最終的に数値のみ取り出しています。

VR Limitは50以上になったらデフォルト値を設定しています。
表示は一旦50以上を示しますが値はデフォルト値にセットされています。再読込時に正しい値が表示されます。こちらも適当に変更します。

ラジオサイトの表示
選択したラジオサイトは/var/www/html/bin以下のbroad.txtに保存されます。このファイルは勝手に作成されますがbinのパーミッションはwww-dataになっている必要があります。phpのビルトインサーバーを実行しているとroot所有になっている場合があります。この場合は削除してあげます。
アクセス時はこのファイルを読み込むため他の端末からアクセスしても現在実行中のサイトを表示します。

/var/www/html/
drwxr-xr-x 2 www-data www-data 4096  3月 11 21:24 bin/
/var/www/html/bin/
-rw-r--r-- 1 www-data www-data    8  3月 17 12:15 broad.txt

ウインドウを複数開いている時は同期をしていないため即時反映されません。ラジオサイトの隣のZERO文字をクリックすることにより再読込します。
またブラウザのリロードを設定しています。300s(5分)をしてしていますが適当に!

<!-- Refresh -->
<meta http-equiv="Refresh" content="300;URL=./index.php?id=top>"

背景の変更(適当に!)

<!-- bg color -->
    <style type="text/css">
    <!--
    <body{
        background-color:#333333;
        color:#ffffff;
        }
    -->
    </style>

Radiko Mini


surf2を利用して340×100サイズで起動するRadiko Miniタイプを作成してみました。
radiko_s.php

radiko_s.phpも/var/www/htmlにおいておきます。呼ぶ時はradiko_s.phpを指定するだけです。
別ファイルになりますがindex.phpから余計なものを取り除いてラジオサイトも厳選しています。選局もスクロールバーでこのサイズのまま簡単にできます。
通常はMiniで起動しておいて引き伸ばしてグリーンのZEROボタンで通常版を同じウインドウ内で簡単に呼ぶことができます。同じサーバー内なのでどちらのウインドウから操作してもOK

クライアントは基本pavucontrolは起動しておきます。起動しておくことによってpulseサーバーは勝手にkillすることはしません。
pulse audioをkillするとRadikoも音は出なくなりますがRadikoは自動で停止しないので必ずstopする必要があります。/var/tmpにはゴミファイルが残ってRadikoは起動できなくなることがあるので/var/tmp以下のファイルを一切削除してやります。

当サイトのmoode4.0は以前の手法でwww-dataにログインシェルを与えてwww-dataでpulseをスタート、キルしています。但し4.0からは/var/wwwは読み込み専用のsquashfsが採用されているので別の場所にwebサーバーを立てなければいけません。こちらはまた別の機会に!

では快適なラジオライフを!!