ひゃまだのblog

ひゃまだ(id:hymd3a)の趣味のブログ

Raspberry Pi(ラズパイ)にラジオになってもらうよ

(2022-01-22 初稿 - )

はじめに

先日、Raspberry PiをBGMサーバにする記事をアップした。

BGMサーバとしても、とても役立つラズパイだけど、ついでにラジオも流してもらうことにした。

この記事では、ラズパイでNHKのラジオ、地域のコミュニティFMShoutcastのネットワーク上のラジオ局を聞く方法を記述する。

ちなみに、下の写真は、Raspberry Piに、ダイソーBluetoothスピーカーをペアリングしてラジオを流しているところ。とても可愛らしいスピーカーだったので、ついつい買ってしまった。^^;

f:id:hymd3a:20220121190048j:plain

ラズパイとダイソーのスピーカーでラジオを流しているところ

Raspberry Piには、ディスプレイ、キーボード、マウスを付けたくないので、原則操作はリモートPC(Debian)から行う。Raspberry PiSSH接続ができれば、どんなOSでもできるよ。

準備

まずは、Raspberry Pivlcをインストール。mplayerも試したけど、vlcの方がラジオの受信が安定してた。

sudo apt install vlc

HDMI、アナログ、Bluetoothなんでもいいから、Raspberry Pivlcから音が出るように設定。

また、Raspberry PiにはロカールPCからSSHで接続できるように設定をしておく。

わからなければ、以下を参照して。

面倒なのは各放送局のストリームURLを調べないといけないけど、筆者は以下のサイトを参照して調べた。

NHK

【地域コミュニティ】

Shoutcast

ShoutCastのストリームURLの取得は、下のスクリーンショットを参考に取得する。

  1. 聞きたいStationのダウンロードマークをクリック
  2. Any player (.m3u) を右クリック
  3. リンクのアドレスをコピー
  4. テキストエディタ等に貼り付け

f:id:hymd3a:20220121192244p:plain

ShoutCastのストリームURLの取得方法

ラジオを聞く

まずは、Raspberry Piで聞く方法。

$ cvlc http://yp.shoutcast.com/sbin/tunein-station.m3u?id=1760430
$ cvlc http://yp.shoutcast.com/sbin/tunein-station.m3u?id=1760430 & #バックグランド実行

vlcコマンドだとGUIVLCが起動してしまうので、ディスプレイがついてないラズパイではcvlcが便利。しばらくして、音楽が聞こえてきたら成功。簡単だね。

スクリプトの作成

1局だけ聞くのは簡単だけど、聞きたい局を変更したり、リモートのRaspberry Piに接続に行くのがいちいち面倒。

そこで、筆者お得意の超ローテクのbashスクリプトを作った。

$ cat lradi

#/bin/bash
# Listen Radio Program 
# ver 0.01 2022-01-20 started
# ver 0.02 2022-01-21 list配列変更

# Global Variable
# Station List ','で区切って列記
st_list=(
  "NHK-FM,https://nhkradioakfm-i.akamaihd.net/hls/live/512290/1-fm/1-fm-01.m3u8"
  "NHK-R1,https://nhkradioakr1-i.akamaihd.net/hls/live/511633/1-r1/1-r1-01.m3u8"
  "NHK-R2,https://nhkradioakr2-i.akamaihd.net/hls/live/511929/1-r2/1-r2-01.m3u8"
  "G-SKY,http://musicbird-hls.leanstream.co/musicbird/JCB036.stream/playlist.m3u8"
  "FM-HARO,http://musicbird-hls.leanstream.co/musicbird/JCB034.stream/playlist.m3u8"
  "America's_Best_Ballad,http://yp.shoutcast.com/sbin/tunein-station.m3u?id=1760430"
  "Bay_Smooth_Jaz,http://yp.shoutcast.com/sbin/tunein-station.m3u?id=1852944"
  "ADULT_CONTEMPORARY,http://yp.shoutcast.com/sbin/tunein-station.m3u?id=1592967"
)

USAGE="  lradi Ver0.02 Listen Radio Program
  [Usage] lradi -h   Display Usage and Exit
          lradi -l   List : Display Radio Station Number
          lradi n    n=Radio Station Number
          lradi -q   Quit lradi
          lradi -s   -s Servername
          lradi -u   -u Remote Uername"

#echo ${st_list[0]} ${st_list[0]%%,h*} ${st_list[0]#*,}

st_name=()
st_url=()
USR="pi"         # Default User
SERVER=""
qflag=0

# function
usage_exit() {
  echo "$USAGE"
  exit 1
}

prn_slist() {
  local n=0
  for i in ${st_name[@]}; do
    echo $n ":" "${i}"
    n=$((n+1))
  done
  exit 0
}

sl=""
for sl in ${st_list[@]}; do
  IFS=, st=(${sl})
  #echo "[name]"${st[0]}  ":" "[URL]"${st[1]}
  st_name+=(${st[0]})
  st_url+=(${st[1]})
done 

while getopts :lhqs:u: OPT
do
  case $OPT in
    l)  prn_slist
        ;;
    h)  usage_exit
        ;;
    q)  qflag=1
    ;;
    s)  SERVER=$OPTARG
    ;;
    u)  USR=$OPTARG
        ;;
    \?) usage_exit
        ;;
  esac
done

shift $((OPTIND - 1))

snum="$1"

if [ $SERVER ]; then
  #echo "SERVER="$SERVER "USER="$USR
  if [ $qflag -ne 0 ]; then
    ssh $USR@$SERVER killall vlc
    exit
  fi
  
  rt=""
  rt=$(ssh $USR@$SERVER /usr/bin/pgrep vlc)
  if [ $rt ]; then
    echo "change Station"
    ssh $USR@$SERVER killall vlc
  fi
  echo listening... ${st_name[$snum]}
  ssh $USR@$SERVER PULSE_SERVER=localhost cvlc \
    ${st_url[$snum]} > /dev/null 2>&1 &
  sleep 3
  #echo $!  # クライアント側プロセスを消してOK
  kill $!   #直前のバックグランドjobのプロセスID
else
  #echo ${st_url[$snum]}
  if [ $qflag  -ne 0 ]; then
    killall vlc
    exit
  fi
  
  rt=$(pgrep vlc)
  if [ $rt ]; then
    killall vlc
  fi
  echo listening... ${st_name[$snum]}
  cvlc ${st_url[$snum]} > /dev/null 2>&1 &
fi

exit 0

エディタに貼って、以下のとおり実行権を付与。

chmod +x lradi

使い方

$ lradi -u Username -s Server 聞きたいラジオ局
$ lradi -l    (このスクリプトに入っているラジオ局は以下のとおり。)
0 : NHK-FM
1 : NHK-R1
2 : NHK-R2
3 : G-SKY
4 : FM-HARO
5 : America's_Best_Ballad
6 : Bay_Smooth_Jaz
7 : ADULT_CONTEMPORARY
自分で好きな局を見つけて加えてね。

$ lradi -u Username -s Server 聞きたいラジオ局(ラジオ局の変更)
$ lradi -u Username -s Server -q   (終了)

なお、Usernameはデフォルトでpi、Serverをつけれければ、ローカルPCでvlcが起動する。

おわりに

新型コロナのオミクス株が猛威を奮っている今日この頃、ラジオでも聞いてのんびり過ごしましょう。

この記事では、ラジコ(radiko)で放送されている放送にもチャレンジしたが、うまく聞くことができなかった。(-_-;)

何か情報を持っている方は、教えてください。m(__)m

関連ページ