彡(゜)(゜) Linuxでラジオ実況したいんやが

2024.08.04追記: AndroidにTermuxをインストールして使うことができます。コメント欄のakaさんに感謝します。
彡(゜)(゜) 原ちゃん、遊びに来たで
(´・ω・`) やあおにいちゃん。いらっしゃい
彡(゜)(゜) 前はLinux Mintで実況する方法を教えてくれてありがとうな。ワイの実況ライフも捗っとるわ。
(´・ω・`) それはよかった
彡(゜)(゜) せやけどな、ワイは常にテレビだけ実況しとるわけちゃうねん
(´・ω・`) テレビだけじゃない…?
彡(゜)(゜) せや。ワイはラジオも聴くんや。radikoでな。
(´・ω・`) そうか。ラジオを聴きながら実況もしたいって言いたいんだね?
彡(゜)(゜) せや。その方法とかあったりするか?
(´・ω・`) あるよ。でもね、おにいちゃん。radikoはブラウザで聴けるよ。だからWindowsでもLinuxでもやり方は全く同じはずだよ。
彡(゜)(゜) まあ、そうなんやけど、原ちゃんやったら何か他の方法とか知っとるかもしれんやん。もしそういうのあったら聞いとこうかなって思ったんや。
(´・ω・`) あるけど……普通とは違う方法の代わりに、ちょっとだけ嬉しい機能があるよ。やってみる?
彡(^)(^) おおっ、嬉しい機能って何や?やり方を教えてクレメンス

下準備をしよう

(´・ω・`) じゃあ早速だけど、今からRadikoSimulatorのインストールをするよ。
彡(゜)(゜) RadikoSimulator?なんやそれ
(´・ω・`) これはBashというスクリプトで書かれたRadikoを再生するためのプログラムだよ。これでリアルタイムでラジオを楽しめる。
彡(゜)(゜) はえーどうするんや?
(´・ω・`) 早速だけど、今から書くコマンドをそのまま打ってほしいんだ。
彡(゜)(゜) ワイにもできるんか?ワイはついさっきLinuxを始めたばかりのど素人やで
(´・ω・`) できるよ。ものは試しっていうじゃない。やってみて。

ffmpegをインストールする
(´・ω・`) じゃあまずはターミナルを起動しよう。
彡(゜)(゜) ターミナル?なんやそれ。
(´・ω・`) Windowsでいうところのコマンドプロンプトに相当するよ。見たことない?
彡(゜)(゜) ああ、あの真っ黒な画面に白い文字が無機質に表示されとるやつか。ワイはようつかわん。ちんぷんかんぷんやねん。
(´・ω・`) 確かに、自分でコマンドを組み合わせてやろうとすると、どうすればいいのかわからなくなるよね。でもその反面、コマンドは誰かが作ったものをそのままコピペすることで誰でも簡単に同じことができるんだよ。コマンドの意味を1つ1つ理解する必要はない。それが利点でもある。
彡(゜)(゜) ようはなんも知らんワイでも脳死で使えるっていうことか。
(´・ω・`) そういうこと。じゃあ必要なものをインストールするよ。ターミナルを開くには、Alt+Tを押して。
彡(゜)(゜) おう。起動したで。こんな画面が出たが

ターミナル起動直後

(´・ω・`) じゃあ次のコマンドを実行して。実行するには、ちゃんとEnterキーを押してね。
sudo apt install -y ffmpeg
彡(゜)(゜) なんかごちゃごちゃ英語のメッセージが表示されとるが。ええんか?
(´・ω・`) うん。そのまま1分するかしないかでインストールは終わるよ。インストールされたかどうか確認するための次のコマンドを入力してね。
which ffmpeg
彡(゜)(゜) なんか出てきたで。これや。
/usr/bin/ffmpeg
(´・ω・`) これはwhichコマンドといって、インストールされたプログラムの場所を確認するコマンドなんだよ。何も表示されなかったら、インストールされていないってことになる。じゃあ、次のコマンドも実行して。
which ffplay
彡(゜)(゜) コマンドの結果がこれやで。
/usr/bin/ffplay

(´・ω・`) はい。まずは必要なものをインストールし終えたよ。
彡(゜)(゜) はやっ!たったこれだけしかやっとらんで。
(´・ω・`) あと必要なものはwgetとかcurlとかあるんだけど、この手のものはほとんどのLinuxディストリビューションに最初から入っている。Mintにも最初から入っているから、それらをインストールする作業は要らない。
(´・ω・`) じゃあ次はgitをインストールしよう。
彡(゜)(゜) git?あれか、チャゲアスの言ってたギフハブとかいうやつか。
(´・ω・`) …まあ、そうだね。githubでRadikoSimulatorが公開されているから、それを引っ張ってくるために使うよ。次のコマンドを実行してね。
sudo apt install -y git
彡(゜)(゜) 例によって、またwhichコマンド使うわけやな?
(´・ω・`) おにいちゃんも少しコマンドをわかってきたね。そうだよ。次のコマンドを実行してね。
which git
彡(゜)(゜) こんなん出たで。これでええか?
/usr/bin/git
(´・ω・`) うん。これで必要なものは揃った。早速RadikoSimulatorを引っ張ってこよう。次のコマンドを実行してね。1行ずつコピペしてね。
git clone https://github.com/Migoreng/RadikoSimulator
cd
 RadikoSimulator
ls -l
彡(゜)(゜) おっ、なんかぞろぞろ出てきたで。これが引っ張ってきたやつか。
onichan@:~/RadikoSimulator$ ls -l
合計 56
drwxrwxr-x 2 onichan onichan 4096 5月 25 21:35 PartialKey
-rw-rw-r-- 1 onichan onichan 2106 5月 25 21:35 README.md
-rwxrwxr-x 1 onichan onichan 4423 5月 25 21:35 cussion
-rwxrwxr-x 1 onichan onichan 9556 5月 25 21:35 general.sh
-rwxrwxr-x 1 onichan onichan 7064 5月 25 21:35 radikopast.sh
-rwxrwxr-x 1 onichan onichan 5744 5月 25 21:35 radikoplay.sh
-rwxrwxr-x 1 onichan onichan 6930 5月 25 21:35 radikoreco.sh
-rw-rw-r-- 1 onichan onichan 1030 5月 25 21:35 settings
(´・ω・`) 下準備はこれで終わり。じゃあ、早速リアルタイムで聴いてみようか。画面はこのままにしておいてね。
彡(゜)(゜) おう。ちょっと休憩しようや。タバコ吸ってくるで

リアルタイムで聴こう

彡(゜)(゜) おまたせやで。
(´・ω・`) うん。じゃあ、おにいちゃん。とりあえずテストということで、TokyoFMを聴いてみようか。
彡(゜)(゜) おう。どうするんや?
(´・ω・`) 次のコマンドを実行してね。
bash radikoplay.sh FMT Tokyo
彡(゜)(゜) お!なんかヒストグラムの画面が表示されて音が出たで。これが今聴いているラジオか。

再生中の画面(ffplay)


(´・ω・`) 画面を閉じたら再生は終了するよ。
・音量を下げる時はキーボードの"9"か"/"(スラッシュ)を押す
・音量を上げる時はキーボードの"0"か"*"(アスタリスク)を押す
一応コマンドを説明しておくね。他の放送局を聴きたいってこともあるだろうし。

bash radikoplay.sh #Bashスクリプトradikoplay.shを叩く
FMT # 放送局のID
Tokyo # 都道府県を指定

彡(゜)(゜) じゃあ例えばTBSを聴きたい時はこうすればええんか。
bash radikoplay.sh TBS Tokyo
(´・ω・`) そのとおり。放送局のIDはここには載せないよ。ググればいくらでもそれを書いたページが見つかる。詳しく調べた方のページを紹介しておくよ。
https://gist.github.com/rneloso/65e29803cda17630dd8698e7b1d335d1

(´・ω・`) ここを参考にしてエイリアスを~/.bashrcに追記しておくと便利。
そうしておくと、たとえば、ターミナルを起動してから
listen_TBS
と打つだけでTBSを聴くといった、コマンドの簡略化ができるよ。
この方法は今回書かないよ。

(´・ω・`) おにいちゃん、もう薄々気づいていると思うけど、わざわざTokyoってつけているのは何のためだと思う?
彡(゜)(゜) そらあれやろ。TokyoFMとTBSは東京とか神奈川のエリアでしか聴くことができんやろ。沖縄とか指定したら聴くことができんやろ。
(´・ω・`) そのとおり。そのとおりなんだ……わざわざ自分で都道府県を指定できるということはどういうことなのか、わかるかな?
彡(゜)(゜) ……まさか、自分でエリアを自由に変えられるってことか?
(´・ω・`) そう。実質エリアフリーなんだよ。47都道府県全てのエリアを聴くことができる。沖縄でインターネットを使っている人が東京エリアにしてTBSを聴くことができるし、逆に東京で使っている人が沖縄エリアにすることもできる。
彡(゜)(゜) うせやろ……エリアフリーは金払わんと聴くことができんはずや。本来は月額300円かかるはずやで。これじゃタダでエリアフリーやん。
(´・ω・`) おにいちゃんは日本全国どこにいても日本全国全ての放送を聴くことができる。実況にはうってつけでしょ?
彡(゜)(゜) 嬉しい機能って言うてたのはそういうことか。これ合法なんか?どういう仕組みやねん。
(´・ω・`) 合法とも違法とも言えない。これはandroidのradikoアプリとそっくりそのままの挙動を模倣しているだけだから。androidでradikoのアプリを起動すると、その端末のGPS情報を送る。それをサーバーが受けて都道府県を判定している。RadikoSimulatorはそのGPS情報を偽装しているんだ。だから、おにいちゃんが沖縄にいてRadikoSimulatorを使って東京エリアを指定すると、サーバーからしてみれば東京からアクセスしているのと区別できない。ようは、サーバーに幻を見せているんだよ。
彡(゜)(゜) ほーん。なるほどな。偽装か。radikoを聴いたり録音するアプリはandroidとかWindowsでも見かけるけど、エリアフリーにできるようにしとらんよな。技術的には可能やろ?なんでやらんのやろか?
(´・ω・`) そんなことができたら、radikoの運営元にとって面白くないでしょ。運営元から圧力がかかって、アプリがストアから消されるよ。しかも、アプリの開発者がそれで広告収入を得ていたら、ますます大変なことになると思う。お金が絡んでいるから運営元に訴訟を起こされるかもしれない。
彡(゜)(゜) なるほどな。どおりで、そういうアプリは公になっとらんわけや。運営元に忖度しとるわけやな。
(´・ω・`) RadikoSimulatorは一個人が自分で楽しむためだけに作られたものだし、Linuxでしか使えないわけだから、知名度はほとんどない。これはLinuxを使う人だけの特権だよ。
彡(゜)(゜) ほーん。質問してええか?
(´・ω・`) なに?
彡(゜)(゜) なんでそんな知名度のクソ低いやつを原ちゃんは知っとるんや?わざわざ使い方まで詳しく教えてくれて。まるでおまえが開発者みたいやんけ。
(´・ω・`) ……
彡(゜)(゜) なんか言えや
(´・ω・`) 何を隠そう、僕がRadikoSimulatorの開発者だからだよ。
彡(゜)(゜) コマ!?原ちゃんが作ったんか!
(´・ω・`) ここからは少し暗い話になるよ。そういうのが嫌いな人は読むのを止めてね。
彡(゜)(゜) ええで。聞いたる。ワイは聞くに徹するのは得意や。何がきっかけやったんや?
(´・ω・`) 僕は学校を卒業した後、ある会社に新卒で入社した。そこではLinuxが使われていて、僕はそこで初めてその存在を知った。それまではLinuxのことは何もわからなかった。マニュアルにかかれていたとおりにコマンドを叩いて仕事をしていた。新卒だったからね。大したことはできなかった。
彡(゜)(゜) そうか。働き始めてからLinuxを知ったんか。
(´・ω・`) 僕は病気になって、半年で休職になった。それから復職を果たすために治療に専念することになった。でも、それはできなかった。病状はかなり深刻だったんだ。とっても辛かった。
彡(゜)(゜) ……
(´・ω・`) 僕が休職している間の唯一の娯楽がradikoでラジオを聴くことだった。ラジオを聴いている間はその辛い気持ちが紛れた。そして、Linuxに興味を持って自分なりに勉強してみたんだ。そこから、Linuxを使ってBashで何かを作ろうと決めたんだよ。
彡(゜)(゜) ……
(´・ω・`) 一冊の白紙のノートを広げて、radikoのアプリを解析し始めた。時間はたっぷりあったから、じっくり解析した。そしてandroidと同じ挙動をするBashスクリプトを1週間かけて作った。作っては検証して、それを何度も何度も繰り返した。せっかくできたので、GitHubとブログに残すことにした。
彡(゜)(゜) ……
(´・ω・`) 僕はその頃東京に住んでいたけど、地方のラジオを聴くのが好きでね。そこで、長崎の学生がパーソナリティーを努めている番組を聴くのがとても楽しかった。誰も知らないだろうね。『じげらナイトキャンラジ』という、NBCで放送されていたやつだよ。
彡(゜)(゜) 東京に住んでても他の地域のラジオを聴きたかった、それが開発に至った経緯やな?
(´・ω・`) そうだよ。地方から東京のラジオを聴くのはわりと簡単。だけど僕は地方のラジオが聴きたかった。そのために位置偽装ができるようにRadikoSimulatorを作ったんだ。いつの間にかLinuxの知識はメキメキと身についたよ。ビギナーズラックだね。闘病生活は結果的に僕をここまで育てた。病気をしなかったら今でもLinuxのことは何もわからなかったかもしれないし、RadikoSimulatorが生まれることもなかったと思う。
彡(゜)(゜) なるほどなあ……ニートのワイには想像もつかんかったわ。辛かったんやなあ。
(´・ω・`) それから僕は貪欲になった。RadikoSimulatorに更に機能を加えた。エリアフリーでリアルタイム視聴ができるだけではつまらないから、録音することもできるようにしたんだ。
彡(゜)(゜) ファッ!?録音もできるんか!
(´・ω・`) radikoは1週間限定であとでタイムシフト視聴できるでしょ?でもその頃のradikoはタイムシフト視聴にも制約があって、1日あたり何時間までしか再生できないというのがあった。そういう制約を突破したかった。それに、期限を過ぎても後で聴けるように保存する機能が欲しかった。僕の目的はこうだ。
・エリアフリー
・リアルタイム
・タイムシフトをダウンロード保存
・予約録音
彡(゜)(゜) ということは、RadikoSimulatorの使い方はまだあるんやな!?
(´・ω・`) うん。30分の番組なら10秒足らずでダウンロードできるよ。その使い方をまた書こうと思うけど……あまりその気はないんだ。
彡(゜)(゜) もったいないな。どうしてや?
(´・ω・`) まあ、ただタイムシフトを保存するだけなら他にたくさんのアプリとかあるし、YouTubeで公式配信する番組も増えたから、今更改良しようという気はなくなった。録音したい番組も今はNHKの英会話番組ばかりで、それはradikoで配信されていないから。
彡(゜)(゜) なるほどなあ。もう目的は過去に達成されたから開発を止めたということか。
(´・ω・`) うん。でもRadikoSimulatorに興味を持つ人がいると思うから、細かい使い方は他のブログに書いておいた。

彡(゜)(゜) ワイは実況できればええから、リアルタイムで聴けるだけでありがたいわ。使い方もクソシンプルやし。今日はもうここまででええで。
(´・ω・`) うん。この記事を見てくれた人、よかったら好きにフォークしたり、スクリプトを改造してみてください。
彡(゜)(゜)ノシ では皆さん、良い実況ライフを!

Androidで使えるの?

彡(゜)(゜) なあ、原ちゃん。質問あるんやがええか?
(´・ω・`) うん。なあに?
彡(゜)(゜) Androidで使うことってできへんのか?あれって実質Linuxやて聞いたんやけど
(´・ω・`) できるよ。簡単に言うと、F-Droidっていうアプリストアからtermuxをインストールして、その中でRadikoSimulatorを動かせばいいよ。
彡(゜)(゜) やっぱりラジオは出先でも聴くもんやからそうしたい。まとめたのはないんか?
(´・ω・`) 英語で書いたけど、用意しました。F-Droidとtermuxのインストール方法はぐぐってほしい。

彡(゜)(゜) ほー。書いたんか。
(´・ω・`) コメント欄のakaさんって方から有用な情報を得られたので、自分でも実際にtermuxで再生できるかを検証したんだ。akaさん、ありがとうございます。
彡(゜)(゜) 英語で書かれたらわからんやんけ
(´・ω・`) といっても、そこに書かれてあるとおりのコマンドを打ち込むだけだよ。初回だけやることがあるよ。nanoというテキストエディタでradikoplay.shを開く。そしたら、ffplayで始まる行をコメントアウトして、vlcで始まる行のコメントを外して上書き保存。あとは、やり方は全く同じ。英語で書いたのは単純に英語のほうが多くの人に見てもらえるから、というのと英語の練習になるから。それだけが理由。
彡(゜)(゜) ほーん、そういうことか。まあ開発者が何の言語を使うかどうかなんて利用者が決めることやないしな。黙ってコマンドを打っておけばそれでええんや。
(´・ω・`) さらに検証を重ねたよ。音量調整のこととかを下記に追記したので、読んでね。
彡(゜)(゜) おかのした。……そうか、電話がかかってきてもラジオの再生は止まらんのやな。自分で止める必要がある。
(´・ω・`) あるいはラジオを聴きながら電話をする。僕はいちいち止めるのが面倒だからそうしている。ラジオを再生しながら電話をしていても大して問題にならない。相手から「よく聞こえない」とか言われたりすることはなかったよ。慌てて止める必要はなかった。

追記 2024.08.14
ラジオの音量調整について

termuxでRadikoSimulatorを実行し、vlcにm3u8ファイルを渡すことで再生します。termuxの画面上では音量操作のボタンが効かないので、termuxから何か別の画面に移動することで音量調整が可能です。
元の音量が小さいまたは大きい場合はvlcでvolumeコマンドを使うことで調整できます。

元の音量を100にする時
volume 100

元の音量を50にする時
volume 50

また、volmeupコマンドやvolumedownコマンドでも操作できますが、何度も同じコマンドを打つのは面倒だと思うので、volumeコマンドで適当な値にするといいでしょう。

注意点
A) 電話中の音声
vlcで再生中の音声は、電話がかかってきても止まりません。そのため、RadikoSimulatorでラジオを聴いているまま電話に出ると、電話とラジオの音声が混ざってしまいます。それで電話をしていても特に問題がなければよいのですが、ラジオの音声が邪魔になる場合は手動で停止させる必要があります。電話がかかってきた時にvlcをquitコマンドで停止します。あるいはtermuxそのものを終了します。

 B) インターネット回線
RadikoSimulatorを使う時は日本国内のインターネットを使うようにしてください。radikoのサーバーは外国のIPアドレスからのアクセスを拒否しているため、使えません。その場合、プロキシサーバーまたはVPNを使って日本国内のIPアドレスからアクセスすればRadikoSimulatorを使うことができます。日本国内であればどの地域からのアクセスでも問題ありません。

外国からでも使えるの?

彡(゜)(゜) ふむふむ……なんや、日本のIPアドレスからやないと使えないんか。海外からじゃ使えんのか?
(´・ω・`) 使えるよ。プロキシサーバーかVPNを使ってIPアドレスを日本のものに変えればいいよ。そこらへんにあるものを使ってもいいし、筑波VPNを使ってもいい。とにかく日本からのアクセスにしてしまえばRadikoSimulatorは使える。面白いことに、Tor経由で出口ノードを日本にしてしまってもいい。もっと面白いことにも気づいた。認証の段階で日本のIPアドレスからである必要があるんだけど、認証さえ済ませた後に再生が始まれば、外国からのIPアドレスで通信しても再生に問題ない。
彡(゜)(゜) つまり、RadikoSimulatorを使う最初の時だけIPアドレスを日本にしとけば後は通信を切り替えてドイツからでもアメリカからでも問題なくデータを引っ張ってきて再生し続けられるってことか。
(´・ω・`) そういうこと。
彡(゜)(゜) 現実的な世界で例えるとどういうふうになるんや?
(´・ω・`) そうだね。今、ドアの前に警備員が立っています。警備員は日本国籍を持っている人にだけそのドアを開けて通してくれます。ドアは施錠されています。外国籍の人には開けてくれません。
彡(゜)(゜) 民間の分際でえらい人種差別な部屋やな
(´・ω・`) 今、日本国籍の人がやってきて、警備員にドアを開けるように言いました。ドアは開きました。その人は入っていきます。でも、その人の後ろには外国籍の人だけがずらーっと並んでいて、一緒に入っていきます。でも警備員は何もしません。ドアを開けてあげることだけがその人の仕事だから。
彡(゜)(゜) 共連れ可能ってわけやな。誰でもええから1人日本人だけまず通しておけば後は外人だらけでもええ、と。警備がガバガバやんけ。
(´・ω・`) 本来なら外国からのアクセスをファイアウォールとかで根本的に拒否しておくべきなんだけど、それをしていないから成り立つ。ソフトウェアレベルでGeoIPでも使っているんだろうね。だから、認証フェーズのみ日本のIPアドレスから可能とすることで、実質外国からのアクセスをはじいている……つもりなんだ。不完全なアクセス制限。ガバガバアクセスコントロール。
彡(゜)(゜) それって、あえてそういう余裕を設けているんとちゃうか?たとえばradikoプレミアムっていうやつがあるやん。あれを使こうとるやつは外国からradikoが使えるとかそういう仕組みがあるんやないか?
(´・ω・`) 調べてみたところ、radikoプレミアムを使っても外国で使うことはできないんだってさ。だから日本国内のユーザーだけ限定するならファイアウォールでしっかり弾いておけばいいんだけど、ネットワークレベルでそれをやろうとすると骨が折れるんだろうね。
彡(゜)(゜) ほんならほんまにただのガバガバアクセスコントロールってだけやないか。
(´・ω・`) それがRadikoSimulatorを作っていて気づいたことだね。同様にradikoのアプリを使っていても同じことが起きる。東京にいて、国内のインターネットにつないでradikoアプリを起動すると、東京エリアのラジオが聴けるはず。再生をしたままアクセスをオランダに切り替えても再生は続いた。民放ラジオが提供する無料サービスのアクセス制限なんて、そんなもんでいいんだよ。ガチガチに固めたところでセキュリティにコストがかかって誰も得しないんだから。どうせ抜け道を作る人はいるわけだし、そんなことにいちいち運営者もかまってられない。別にサーバーにクラッキングするわけじゃないんだし、いいでしょこれくらいのこと。
彡(゜)(゜) ……ワイが言うのもなんやが、原ちゃんの倫理観はそれでええんか?
(´・ω・`) 開発する人も解析する人も、「やれるもんならやってみろ」っていうスタンスは重要だよ、おにいちゃん。

この記事が気に入ったらサポートをしてみませんか?