Orangepi PCでInternet Radioを構築する

MPD MPCのインストール


最近なぜかインターネットラジオにハマっています。
理由はこちらのラジオステーションです。
70年代のWest Coast Soundが中心ですが、夢中になって聞いていた時期なので、なじみのある曲が多く、
お〜〜なつかしぃ〜 と思いながら聞いています。

そこで、かなり世の中の流行とはずれていますが、SBCでインターネットラジオを構築する手順を紹介します。
インターネットラジオとしては以下の機能を持っています。
・ラジオステーションの選択やスピーカボリュームの変更を赤外線リモコンを使って行う
・再生中のアーティスト名と曲名をリアルタイムにLCDに表示する

SBC(Single Board Computer)でインターネットラジオを構築する方法としては、Raspberry Piが良く使われます。
今回、ラジオステーションの選択やスピーカボリュームの変更を赤外線リモコンを使って行います。
Raspbian StretchやRaspbian Busterでは赤外線リモコンの学習ができない不具合があり、
その結果、赤外線リモコンを使ったコマンド実行ができません。

詳細はこ ちらに詳し く記載されていますが、
オーバレイドライバーがlirc-rpiからgpio_irに変更になったために、赤外線パルスの受信形式が変わったことが原因です。

こ ちらによれば、 lircのソースをダウンロードし、
パッチを当ててビルドすれば赤外線リモコンの学習を行うことができます。

また、こ ちらで紹介さ れているように、RAWモードで学習する方法もありますが、受信したパルスをlircd.confに変換するのが面倒です。

そこで、特別な事をしなくても赤外線リモコンの学習ができるOrangePi PCを使うことにしました。

【Armbianのインストール】

OrangePi PCにはベンダー(Xunlong Software)が提供するOSもありますが、サポートがダメダメです。
そこで、OSとしてArmbianをインストールします。
Armbianは2015年ぐらいから使っていますが、非常に安定して動きます。
Armbianのインストールはこちらで紹介 しています。

【USB Wifiの設定】

OrangePi PCにはオンボードのWifiがありません。
逆に言えば、オンボードのWifiがないので、技適を通ったUSB Wifiモジュールが使えます。
USB Wifiの設定はこちらで 紹介しています。
今回はDownloadの性能が一番良かったMT7601U(150Mbps)を使いましたが、自宅のWiFiルーターが安物なので、
時々音が途切れます。
Ethernetでは安定して再生できるので、WiFi経由で使う場合、WiFiルーターはできるだけ高性能の物を使った方がいいです。
WiFiルーターの交換を予定しています。

【USBスピーカの確認】

RaspberryPiもOrangePiも3.5mmジャックが有りますが4極ジャックです。
普段WindowsPCで使っているスピーカーはどれも3極ジャックなので変換しないと使えません。
そこで、今回は余っていたJBL Pebbles(USBスピーカー)を使いました。
OrangePi PCの電源を切った状態でスピーカをUSBポートに接続します。
電源が入った状態でスピーカをUSBポートに接続すると、突入電流の関係でOrangePi PCが再起動します。
以下のコマンドでUSBスピーカーが認識されていることを確認します。
$ aplay -l
**** List of PLAYBACK Hardware Devices ****
card 0: Codec [H3 Audio Codec], device 0: CDC PCM Codec-0 []
  Subdevices: 1/1
  Subdevice #0: subdevice #0
card 1: Pebbles [JBL Pebbles], device 0: USB Audio [USB Audio]
  Subdevices: 1/1
  Subdevice #0: subdevice #0
card 2: allwinnerhdmi [allwinner,hdmi], device 0: 1c22800.i2s-i2s-hifi i2s-hifi-0 []
  Subdevices: 1/1
  Subdevice #0: subdevice #0

【mpd mpcのインストール】

インターネットラジオの再生ではMplayerが良く使われますが、今回、再生中のアーティスト名と曲名をリアルタイムに表示します。
インターネットラジオでは延々とMP3データが流れてきますが、Mplayerではどうやって曲が変わったことを判定できるのか分かりませんでし た。
mpdではpythonライブラリを使うことで、曲が変わったことを判定することができます。
mpd mpcのインストールは以下の手順です。
$ sudo apt update
$ sudo apt install mpd mpc

【mpd.confの変更】

/etc/mpd.confを一部変更します。
スマホやマイコンなど、他のマシンからもmpcが使えるようにします。
スマホ用のmpcは mpd で検索すると沢山出てきます。
$ sudo vi /etc/mpd.conf
##bind_to_address               "localhost"
bind_to_address         "0.0.0.0"

deviceを変更しUSBスピーカを出力先として指定します。
mixer_typeをsoftwareに変更しスピーカーのボリュームをmpcから変更できるようにします。
audio_output {
        type            "alsa"
        name            "My ALSA Device"
        device          "hw:0,0"        # optional
        mixer_type      "software"     # optional
##      mixer_device    "default"       # optional
##      mixer_control   "PCM"           # optional
##      mixer_index     "0"             # optional
}

/etc/mpd.confを変更したらmpdをデーモンで起動します。
# サービスの確認
$ sudo systemctl list-unit-files --type=service | grep mpd
mpd.service                                disabled        enabled

# サービスの有効化
$ sudo systemctl enable mpd
Synchronizing state of mpd.service with SysV service script with /lib/systemd/systemd-sysv-install.
Executing: /lib/systemd/systemd-sysv-install enable mpd

# サービスの開始
$ sudo systemctl start mpd

# サービスの確認
$ sudo systemctl list-unit-files --type=service | grep mpd
mpd.service                                enabled         enabled

$ sudo reboot

以下のコマンドでmpdがサービスとして起動していることを確認します。
$ sudo systemctl -l --no-pager status mpd
● mpd.service - Music Player Daemon
     Loaded: loaded (/lib/systemd/system/mpd.service; enabled; vendor preset: enabled)
     Active: active (running) since Thu 2024-12-05 20:00:00 JST; 30s ago
TriggeredBy: ● mpd.socket
       Docs: man:mpd(1)
             man:mpd.conf(5)
             file:///usr/share/doc/mpd/html/user.html
   Main PID: 1087 (mpd)
      Tasks: 6 (limit: 1005)
     Memory: 57.1M
        CPU: 2.116s
     CGroup: /system.slice/mpd.service
             mq1087 /usr/bin/mpd --no-daemon

12月 05 19:59:54 orangepioneplus systemd[1]: Starting Music Player Daemon...
12月 05 20:00:00 orangepioneplus systemd[1]: Started Music Player Daemon.

【動作確認】

MPDが音源を保存するデフォルトのディレクトリは/var/lib/mpd/musicです。
そこで、適当なMP3ファイルを/var/lib/mpd/musicにコピーします。
$ ls -l /var/lib/mpd/music
total 7676
-rw-r--r-- 1 root root 7857014 Nov  6 12:01 test.mp3

以下のコマンドでスピーカーから音が出ることを確認します。
この時点でボリュームも50に変更しておきます。
$ mpc ls

$ mpc update
Updating DB (#1) ...
volume:100%   repeat: off   random: off   single: off   consume: off

$ mpc ls
test.mp3

$ mpc add test.mp3

$ mpc playlist
Newmoon - Let It End

$ mpc play
Newmoon - Let It End
[playing] #1/1   0:00/3:16 (0%)
volume:100%   repeat: off   random: off   single: off   consume: off

$ mpc volume 50

【ラジオステーションの追加】

こちらこちらなどからラジオステーションのURLを調べ ます。
再生できるのはMP3でストリームされているラジオステーションです。
以下の手順でラジオステーションの追加を行います。
$ mpc add https://ice2.somafm.com/seventies-128-mp3
$ mpc add https://ice4.somafm.com/indiepop-128-mp3
$ mpc add http://185.33.21.112:80/70s_128

$ mpc playlist
Newmoon - Let It End
https://ice2.somafm.com/seventies-128-mp3
https://ice4.somafm.com/indiepop-128-mp3
http://185.33.21.112:80/70s_128

テスト用にコピーしたMP3ファイルは不要なのでplaylistから削除します。
$ mpc del 1

$ mpc playlist
https://ice2.somafm.com/seventies-128-mp3
https://ice4.somafm.com/indiepop-128-mp3
http://185.33.21.112:80/70s_128

mcp playでラジオステーションの再生が始まります。
ラジオステーションを再生するとplaylistの表示がURLからラジオ局の名称に変わり、さらに再生中のアーティスト名や曲名が表示されま す。
$ mpc playlist
https://ice2.somafm.com/seventies-128-mp3
https://ice4.somafm.com/indiepop-128-mp3
http://185.33.21.112:80/70s_128

$ mpc play
https://ice2.somafm.com/seventies-128-mp3

$ mpc playlist
Left Coast 70s: Mellow album rock from the Seventies. Yacht friendly. [SomaFM]: Heart - White Lightning And Wine
https://ice4.somafm.com/indiepop-128-mp3
http://185.33.21.112:80/70s_128

$ mpc next
https://ice4.somafm.com/indiepop-128-mp3

$ mpc playlist
Left Coast 70s: Mellow album rock from the Seventies. Yacht friendly. [SomaFM]: James Taylor - You've Got A Friend
SomaFM presents: Indie Pop Rocks! [SomaFM]: Incan Abraham - Tuolumne
http://185.33.21.112:80/70s_128

$ mpc next
http://185.33.21.112:80/70s_128

$ mpc playlist
Left Coast 70s: Mellow album rock from the Seventies. Yacht friendly. [SomaFM]: James Taylor - You've Got A Friend
SomaFM presents: Indie Pop Rocks! [SomaFM]: Radio Dept. - 1995
1.FM - Absolute 70's Pop Radio: Supertramp - Logical Song

続く...