ネットワークプレーヤーでラジコが聴ける!🤭

このあいだネットワークプレーヤーでインターネットラジオが聴けなくなったが、なんやかんやあって聴けるようになったという記事を投稿しました。
めでたしめでたしなんですが――、実際のところ最近はもっぱらアマゾンミュージックやラジコを聴いてたので、「聴けない!」という掻痒感が無くなっただけでそれほどQOLが上がったわけではありませんでした。

YCASTをセットアップする中で思ったのが、「これを使えばネットワークプレーヤーでラジコも聴けるようになるんじゃないか?」ということ。
持ってるネットワークプレーヤーの後継機種(といってもとっくに生産終了してますがー)のパイオニアのN-50AEではラジコが聴けるので羨ましく思っていたんです。

最初の思い付きは単純に「インターネットラジオもラジコも同じラジオでしょ?」

つまりラジコにも他のインターネットラジオよろしくストリームURLがあり、それをYCASTに登録すれば聴けるようになるのではないかと考えたのです。
でリサーチしたところ、そうは問屋が卸さずでそんな単純な話ではありませんでした。

まず第一の関門はラジコのURLを開くためには認証が必要で、認証せずに開くとエラーとなり音声を聴くことができません。
第二にHLS形式ストリーミングという方式を採用していて、古典的なインターネットラジオのような固定的なストリームURLがあるわけではないということ。

N-50AEにはたぶん機器の中に上記の処理を行うプログラムが入ってるんでしょうが、N-50Aには入っておらず、今後も入ることはありません。(事業撤退しちゃったんで)
なので前回のお話し同様、外部で補ってやる必要があります。

その第一の難題を解決する今回のヒーロー(一人目)は彼ッ!

ヒーローというよりなんかADみたいですが…。
この人が認証を代行して、ラジコのサイトから各ラジオ局のプレイリストを取得してきてくれます。

この認証というのが何をやっているのかちょっと謎なんですが、ラジコはエリアによって聴ける局が変わるので、どのエリアに属しているのかという情報を取り交わしているんじゃないかと思います。

第二の問題を解決するのはこの人!

これはサーバー上で動く音楽プレイヤー(iTunesとかWindows Media Playerみたいな)なんですが、HLS形式ストリーミングの再生ができます。
パソコンと違ってサーバーには必ずしもスピーカーは付いてないので、再生している音楽をストリームURLに再放流するという機能も付いてます(これがミソ)

またサーバーには必ずしもディスプレイが付いてないので、スマホ越しに操作して聴きたい曲を選べるという機能が付いてます。

このRadioRelayServerとMusic Player Daemon、そして前回紹介したYCATを協調させることでN-50Aでもラジコが聴けるようになるんです。

マンガにするとこんな感じですね。
図にしてもサーバーのところがごちゃついてちょっとわかりずらいですが…。

  1. RadioRelayServerがラジコからプレイリストを取得
  2. Music Player Daemonがプレイリストを読込んでラジオを再生し、家のネットワークに再放流
  3. YCASTがネットワークプレーヤーに再放流してるURLを案内

という流れです。

番組の選択はM.A.L.Pというアプリで行えます。

ラジオ局の切替えを行うと数秒音声が途切れますが、まぁまぁ快適な操作感です。
それにしてもこのアプリの感じ、N-50Aの操作アプリに似てますな。
おそらくN-50Aの内部、に限らず各社が出しているネットワークプレーヤーの中身も、Music Player Daemonみたいなオープンソースのサーバー向け音楽プレーヤーを独自にカスタマイズしたものが動いてるんでしょうね。

ネットサービスのメニューを開くと、YCASTに追加したラジコの番組が見えます。
選択するとアプリで指定したラジオ局を聴くことができました😎

これまでパソコンを開いてブラウザを立ち上げ、番組を選択して聴いていたのでだいぶ簡便になりました。
ラジオを聴くためにわざわざパソコンを開けなくていいというのは大きいですね。
ただネットワークプレーヤーの画面上だと”Radiko”としか表示されないので、どの局を聴いてるのか分からないのが難点ですな。
あと、可能であればアートワークに番組画像が出れば良いですね。

以下は、備忘録も兼ねて技術的な内容になります。
自分もRadioRelayServerを入れたいんだよォ、という人には有益かも知れません。
興味のない方はここでお別れですね。

①Music Player Daemonのインストール&設定

下記コマンドでインストールします。
apt-get install mpd

/etc/mpd.conf を編集します。
チマチマ変えるところがありますが、大事なのは家のネットワークに再放流する箇所の設定ですね。
ひな形が載ってるので、必要に応じてコメントを外して設定します。


#
# An example of a httpd output (built-in HTTP streaming server):
#
audio_output {
    type                 "httpd"
    name                 "Radiko"
    encoder              "lame"
    port                 "8000"
    bind_to_address      "0.0.0.0"
    bitrate              "128"
    max_clients          "0"
}


②RadioRelayServerの設定

ZIPでダウンロードして、2か所変更しました。

<start>


#!/bin/bash

nohup python3 manage.py runserver 0.0.0.0:9000 > /dev/null 2>&1 &


これは単にターミナルからRadioRelayServerを起動した後、ターミナルを閉じても動き続けて欲しいので、死なないようにオマジナイですね。

<radiko.py>


186c186
<                 'http://f-radiko.smartstream.ne.jp/'
---
>                 'http://c-radiko.smartstream.ne.jp/'


たった一行の修正(f-radikoをc-radikoに変えただけ)ですが、けっこう大事な修正です。
今年の一月にラジコの仕様変更がありそれに対応したものです。
ラジコは時たまこういう仕様変更を行うそうで、そのたびに受信するアプリはちょくちょく改修しなければいけないみたいです。
ラジコが聴けることを羨ましがっていたN-50AEですが、もうファームウェアアップデートは行われていないと思うので、多分もう聴けなくなってるんじゃないかと思います…。

んで起動ですが、RadioRelayServerはPythonというプログラム言語で書かれていて、DjangoというWebサーバで動きます。
ただ七面倒臭いことに、仮想環境というものを作ってその中で動かすというお作法があります。

その辺りの操作を当時は色々調べてやったのですが、ちょっと時間が空いてしまったので詳らかには思い出せませぬ…。
多分Pythonを動かすうえではごく一般的な話だと思うので割愛します。

ポイントとして、プレイリストは下記に書き込まれるので、あらかじめ空ファイルを作成しておいて書き込み権限を与えておく必要があります。

/var/lib/mpd/playlists/00_radiko.m3u

③YCASTの設定

stations.ymlに下記を追記しました。


Radio:
  Radiko: http://192.168.0.20:8000


以上の設定でネットワークプレーヤーでラジコが聴けるようになりました。
次はAmazonミュージックが聴けるようになると良いなぁ…。

【解決済み】ネットワークプレーヤーでインターネットラジオが聴けなくなった話

8年くらいパイオニアのN-50Aというネットワークプレーヤーを使ってきたのですが、この頃インターネットラジオが聴けなくなってしまいとても困りました。
お気に入りに登録しているインターネットラジオ局を選んでも、↓のように「トラックが見つかりません。」と表示されてしまうんです。

気が付いたのは2月頭くらいですかね。
世間(?)は1月半ばくらいから騒いでいたようですが、近頃はもっぱらアマゾンミュージックを聴いているので気が付きませんでした。
蛇足ですが最近は「夏チルJ-POP」をよく聴いています。季節感無いですね……。

久し振りにインターネットラジオでも聴いてみようかーと選局するとエラーに。
その時はネットワークの一時的な不調かと思って放っておきました。
しかし数日空けて再びトライしても同じ結果となったので、何かがおかしいとググってみました。

すると出るわ…。インターネットラジオにつながらないという悲憤の嵐。
日本人は価格.comのクチコミ掲示板、外国人はHiFiオーディオのフォーラムなどで不満を呈していました。
それらをつぶさに読んでやっと問題の原因がわかりました。

上はネットワークプレーヤーがインターネットラジオを聴く仕組みをマンガにしたものです。
インターネット上にはラジオを配信している局が山のようにあるのですが、ネットワークプレーヤーから聴くときには最初に案内サイトにアクセスし、そこから聴きたいラジオ局を教えてもらってストリームを開きます。
案内サイトはいくつかありvTuner、TuneIn、airable radioなどがあります。
パイオニアのネットワークプレーヤーはvTunerを使っていたのですが、この度vTunerがパイオニア製品のサポートを打ち切ったのが原因のようです。

「何を勝手に打ち切りやがって?!」とブチ切れたくなりますが、実は地殻変動ははるか2020年頃から始まっていました――。
2010年代、パイオニアのみならずSONY、Denon、マランツ、ヤマハなど各社がネットワークプレーヤーを競って出荷していました。
それらの機器のインターネットラジオ再生はvTunerがサポートしてたのですが、2020年頃から順次サポートの打ち切りや有料化が行われてきていたようです。

見切りを付けたSONYはファームウェアを更新してvTunerからTuneInに、同じくヤマハもairable radioに乗り換え。
マランツは年間6ドル、Denonは4ドル(この差は何…)払うことで継続利用できることになりました。
そう言えば、BOSEのHomeSpeaker500はTuneInでしたね。

で、パイオニアはなぜかお目こぼしを受けてこれまで無料で聴けてきたのですが、この度サポート停止の止むなきに至ったようです。

わき道にそれますが、これ本当にダメ―――と思いますね…。
年間4~6ドルって、日本円にしたら600~900円で全然払える額だと思います。
なんですが、最初から徴収してたなら納得できるんですよ。
でも元々タダだったのに今になって払えというのが本当に気持ち悪くて受け付けられない。
お金払って聴くくらいならむしろ聴けなくて良いやと思ってしまいます。

パイオニアはオンキョーに吸収されて、そのオンキョーも2022年に倒産してしまったんですよね。
ブランド自体は外資に買われて生き残っているみたいですが、恐らく旧製品のサポートは望めないと思います。
それではN-50Aはどこかの外人が言っていた「クールな外観のゴミ」になってしまうのでしょうか……?

しかし! そこに一人のヒーローがッ!!

外人が盛り上がっているフォーラムで見つけました。貴重な情報をありがとう!

その名はYCAST!
またの名をインターネットラジオの自家案内サイト!!

つまりはこういうことですね。
死んでしまったvTunerの代わりに自分で案内サイトを立ち上げてインターネットラジオ局につながれるようにするんです。

前置きが長くなりましたが、今回はYCASTを家のサーバーにインストールして再びインターネットラジオが聴けるようになるまでの顛末を語ります。
ただここから技術的な内容が濃くなるので、興味ない人は「へぇ~YCASTを使えば聴けるんだ」くらいの話で了解いただいて良いかと思います。

まずはここでYCASTのソースをGETします。
う~ん、全部英語だなぁ(アタリマエ…)
今となってはけっこう親切に書いてあることが分かるのですが、最初はなんのこっちゃ全然わかりませんでした。

ごく大雑把に言うと、YCASTのインストール&起動とDNSの変更をせよということです。
しかしウチのサーバーはすでにWebサービスが動いてるのでYCASTと共存するためにちょっと工夫をする必要があります。
個人的に悩んだところを軸に解説して行こうと思います。
悩まなかったところはあまり触れないと思うので、「そこを詳しく聞きたいんだよォ――ッ!!」という方いらっしゃったらごめんなさい。

①YCASTのインストールとサービス登録

ダウンロードしたTARボールをサーバー上の適当な場所に展開。
インストールは、python3 setup.py installとやるだけですな。
途中ビルドがSegmentation faultで落ちたので焦りましたが、もう一度やり直してみたら上手くいきました。

サービス登録は、examplesフォルダにあるycast.service.exampleを/etc/systemd/system/ycast.serviceにコピー。
UserとGroupの行を既存のユーザー名に書き換えて、下記コマンドを実行でOKです。

systemctl enable ycast.service
systemctl start ycast.service

②Webサービスの設定変更

ウチはWebサービスにApacheを使っています。
これがNginxを使ってたら、examplesフォルダにNginxの設定サンプルがあるので楽だったのですが……。
Apacheの設定が今回一番苦しんだところですね。
昔はWebサービスと言ったらApacheがデファクトスタンダードだったんですが、時代は変わったんですね。

Apacheのリバースプロキシ機能を使って、HTTPリクエストをYCASTに転送するのでproxyモジュールを読み込みます。
/etc/apache2/mods-enabledフォルダに下記コマンドでシンボリックリンクを張ります。

ln -s ../mods-available/proxy.load .
ln -s ../mods-available/proxy_http.load .

/etc/apache2/sites-available配下にある、既存のコンフィグに下記の設定を追記します。


<VirtualHost *:80>
    ServerName pioneer.vtuner.com
    ProxyRequests Off
    ProxyPass / http://127.0.0.1:8010/
    ProxyPassReverse / http://127.0.0.1:8010/
    ProxyPreserveHost On
</VirtualHost>


さらっと書いてますが最初は上手く動かず、試行錯誤がありました。
Nginxの設定にあるproxy_set_headerの行をApacheでどう書くのかが分からなかった…。
色々調べて”ProxyPreserveHost On”で良いことが分かりました。

で、サービス再起動。

③DNSの変更

これは2枚目のマンガにあるように「vTunerはこちら⇒」という看板をぐいっと下に向ける作業ですね。
ネットワークプレーヤーはpioneer.vtuner.comというアドレスを頼りにインターネット上を探そうとします。
それを「pioneer.vtuner.comは家のネットワークにあるよ」とダマすんです。
これを犯罪に悪用したのがDNSポイズニング攻撃と言われますが、家の中でやる分には問題ありません。

家庭用のDNSサーバーを立てるため、bind9をインストールします。
それから/etc/bind/named.conf.default-zonesに以下を追加。


zone "vtuner.com" {
    type master;
    file "/etc/bind/db.vtuner.com";
};
zone "0.168.192.in-addr.arpa" {
    type master;
    file "/etc/bind/db.0.168.192";
};


db.vtuner.comとdb.0.168.192の2つのファイルを/etc/bind配下に追加します。

<db.vtuner.com>


$TTL    604800
@    IN    SOA    vtuner.com. root.localhost. (
             5        ; Serial
             604800        ; Refresh
             86400        ; Retry
            2419200        ; Expire
             604800 )    ; Negative Cache TTL
;
@    IN    NS    localhost.
pioneer    IN    A    192.168.0.20


<db.0.168.192>


$TTL    604800
@    IN    SOA    vtunner.com. root.localhost. (
             4        ; Serial
             604800        ; Refresh
             86400        ; Retry
            2419200        ; Expire
             604800 )    ; Negative Cache TTL
;
@    IN    NS    localhost.
20    IN    PTR    pioneer.vtuner.com


ちなみに家のサーバーアドレスは192.168.0.20の設定です。

それにしてもなんですが、どうしてこう各種サービスの設定ファイルの文法は千差万別で脈絡が無いんでしょう……。
bind9の設定ファイルは数あるサービスの中でも輪をかけて複雑に感じます。

最後にN-50A本体のネットワーク設定を変更します。
DHCPをOFFにして、プライマリDNSのアドレスに家のサーバー(192.168.0.20)、セカンダリDNSのアドレスにブロードバンドルーターを設定します。
これで「vTunerはこちら⇒」の看板が家のサーバーに向きました。

祈りつつ再起動…。

ーーーキタッ!!
「サーバーがありません。」となっていたネットサービスのメニューにRadiobrowserとMy Stationsの二つが出現しました。

まずRadiobrowserの方を開いてみます。

Genres配下を見てみると、前はRockとかJazz、Hip Hopという感じのジャンルで並んでたのですが、特に整頓されていないカオスなタグが膨大にエントリーされています。
これでは使いづらくてしょうがありません。
Most Popularも前はジャンル毎だったと思うのですが、今はすべてのジャンルが一緒くたにされていて、訳の分からない順番で並んでるのですごく残念な感じです。
たぶんこのメニューを今後使うことは無いでしょう。

次にMy Stationsの方を見てみます。
こちらはYCASTの設定ファイルに自前で登録したインターネットラジオ局を表示します。

Jazzのジャンルにお気に入りの1.FM – Bay Smooth Jazzを入れています。
ポチッと選択すると――。

やったッ! 再生できた!!
なんか苦労した甲斐があってのことか、音が一音一音粒だって聞こえましたね😎

お気に入りに入れていた他のラジオ局も登録し直して、以前のライブラリを復元しました。
アートワークが表示されないなど、以前に比べてデグレードしていますが、音楽再生自体はこれまで通り聴けるようになったので満足しています。

Debian9(stretch)

このサイトも動かしてる我が家のサーバーのOSはLinuxなのですが、Debianというディストリビューション(配布物)を使っています。
Debian以前は、FedraとかUbuntuとかとっかえひっかえ使ってましたが、だいぶ前に落ち着きました。
2年ごとに新しいバージョンが出るので、そのたびに入れ替えを行っています。

最初に使ったのはDebian6(squeeze)でした。
で、今回出たのはDebian9(stretch)
なので入れ替えは3回目になりますねー。
ちなみにカッコ内はニックネームで、トイストーリーのキャラの名前が付けられるそうです。
でも観たことないのでよく知りません…。

これまで大体4、5月にリリースされていたので、ゴールデンウイークの間に作業することが多かったです。
しかし今年はけっこう遅れて6月17日でした。
すぐにダウンロードして入れたのですが、やはりセットアップには色々障害があり、寝不足な日々を過ごしましたよ…。
まぁ私の設定ミスというのが多く、OSそのものは高い完成度なんじゃないかと思います。

でも、リモートデスクトップの設定が回を重ねるごとにすんなり行きにくくなっているように感じます。
リモートデスクトップはWindowsの入ってるパソコンから、離れた場所にあるサーバーを操作できるソフトです。
パソコンはリビング、サーバーは別の部屋のラックに置いているので、いちいち部屋を移動して操作するのはめんどくさい…。
そんな時に重宝します。
しかし設定に今回も悩まされた…。
どうにか動くようになったから良かったけど。

さて今回はOSの入れ替えのタイミングとともにRAIDを導入しようと考えていました。
RAIDというのはハードディスクの故障に備えた仕組みのことで、一つのデータを複数のハードディスクに分散して収めることで、どれか一台が故障してもデータを救うことができます。
RAIDにも色々種類があり、今回試したのはRAID1
これは同じデータを2台のハードディスクに書き込むもので、どちらか一台が故障しても片方が壊れてなければ大丈夫です。
RAIDとしては一番単純なものですねー。

前々からやろうと思っていたので、ハードディスクは事前に手配してストックしていました。
それでやっとDebian9が出たので、わーいと思ってサーバーにハードディスクを増設しようとしたところ、なんと電源のコネクターが足りなかった…。
サーバーの電源は省電力のものを買ったので、最小限のコネクターしか付いてなかったのです。
周到に準備したつもりがまったくフシ穴でした。
ただファン用のコネクターは余っていて、それをハードディスク用のコネクターに変換するアタッチメントが売っていたので、それを使ってどうにか追加したハードディスクを筐体内に収めることに成功しました。

で、設定の方は難しいのかな~と構えていたら、コマンド一発でRAIDが構成できてしまいました。
簡単すぎて拍子抜け。
今回はソフトよりハードのほうに難ありのアップグレードでしたね。

stretchには2019年まで頑張ってもらいたいです。
できればハードディスクが故障することなしに。

VMware

 念願のVMware playerをインストールしました。これは仮想マシンと言って、ウィンドウの中に別のコンピュータの挙動をまるごと再現するソフトです。まるごとですから、なんとBIOSから立ち上がります。そしてその仮想DOS/VマシンにWindowsなりLinuxなりをインストールしてゲストOSを構築していくわけです。
 最初はWinXP上でWin98を立ち上げてみました。最初の試みだったので結構苦労しましたが、動かすことができました。仮想マシンは実際のマシンよりかなり遅いのですが、後からWMware Toolsというものを(ゲストOSに)インストールして、チューンナップすることで実用的なところまでパフォーマンスを上げる事ができます。少なくとも以前使っていたPenⅡマシンよりはさくさく動作しています。
 WinXPに乗り換えたために使えなくなってしまって、諦めていたソフトが、仮想マシンの上で動いているのを眺めるのはなかなか感動的です。
 しかしながら、Windowsの上でWindowsを動かしたからと言って誇るべきことではありません! Windowsの上でLinuxを、Linuxの上でWindowsをブートさせてこそWMwareの真価が発揮されたと言うべきでしょう。
 そこでUbuntu上でのWinXPのブートにトライしてみました。
 これがあっさり過ぎるほどうまく行き、見事XPを動かすことができました。Wineでもうまく動かなかったWindowsアプリケーションも、これでLinux上で確実に動かすことができます。素晴らしい! これでさらにもう一歩脱Windowsに近づきました。

xubuntu導入

 手元にあるメビウスにubuntu(ウブントゥ)の派生ディストリビューションである、xubuntuを入れてみました。
 このPCは、もともとはWin98SEが入っていたもので、中古で手に入れたのですが、多分99年製だと思います。PenⅡ400MHz 128MBというレガシーなスペックです。
 WinXPに入れ替えていままで使ってきたのですが、ほとんど使わなくなっていたので、Linuxでも入れて遊んでみようと思ったわけです。
 ubuntuは使いやすく、マルチメディア対応が充実した人気のパッケージです。さらにハードウェアの認識にも優れているそうです。xubuntuはその軽量版にあたります。
 インストールは何の障害も無く完了しました。これはLinuxではちょっと特筆すべきことかもしれません。実は以前にFedoraCore6を入れようとしたことがあったのですが、その時はインストールでつまずいてしまったのでした。
 さて、操作感はといいますと。これが結構重いです。たぶんXPより重いんじゃないかと思います。最近ではLinuxもGUIがリッチになってきていて、リソースを喰うようです。まあ、ネットくらいなんとかなります。