macOSからRaspberry Piにワンクリックでradiko ラジオ放送の再生を指示する “Automatorとparamikoを活用”
“Raspberry PiでBluetoothスピーカーが使えるのか格安スピーカー実践で検証してみる”
“Raspberry PiでBluetoothスピーカーでradikoを楽しむ、勿論 iPhoneと連携!”
“Raspberry PiでBluetoothスピーカーでradikoを楽しむ、Dropboxで iPhoneと連携!”の続きです。
先日の関連TALKで、”radikoをlinuxで聞いたりするやつ“で公開しているラズパイで”radiko“を聴けるスクリプト “radiko.sh”の活用例をいくつか紹介しました。
そのなかで、毎朝7時にNHKニュースを聴くためのシェルスクリプトをcronに登録したのに、音声が再生されないというトラブルに悩まされました。単体でスクリプトを実行した際には問題なく動作したのですが、残念ながらcronでは音が再生されませんでした。”mplayer“がcronあるいはバックグラウンドで動作しないことが原因のようです。いろいろ試行錯誤してみたのですが、どうもうまく行きません。ならば、別の再生アプリならと思い、”mpg321″や”aplay”などで試してみましたが、いずれも思うような結果は出ませんでした。
この件については引き続き課題としたものの、未解決のままでは気持ち悪いので、個人的な得意分野である”macOS“をメインにしたソリューションを考えてみました。
< iOSのショートカットでは問題ない理由 >
まずは冷静になって、これまでにやったことを整理してみます。そういえば、iOSの”シートカット“で”Raspberry Pi”上の “radiko.sh”をリモートで実行できたので、ラズパイ環境でうまく行かないんだったら、”macOS“で同じような仕組みを作ればいいんじゃない?と思ったわけです。
< macOSからラズパイにSSH接続するライブラリ paramiko >
“macOS”に限らず、”SSH“でログインするためにはパスワードの入力がマストです。でも、”ssh” コマンドにはパスワードを付ける文法がないため、一般的には”公開鍵認証“でリモート接続する仕組みを作っておく必要があるようです。でも、その手順を調べてみると、想像以上に面倒だし、何より”macOS”のセキュリティは手強いので、いつ何時利用できなくなるか分かりません。
そこで、もっと簡単な方法がないか調べてみた結果、”paramiko“、”fabric“、”sshtunel“といったpython ライブラリがあることが分かりました。今回は、個人的な感覚で一番敷居が低そうな”paramiko“を使ってみることにしました。
以下、”macOS”のターミナルで実行します。※ 一部ダークモードの”macOS”を使用しています。
まず始めに、”pip“というPythonパッケージのインストールなどを行うユーティリティをインストールします。
curl https://bootstrap.pypa.io/get-pip.py -o get-pip.py
python get-pip.py --user
インストールが終わったら、”pip” コマンドが利用できるようパスを通す。
export PATH="$HOME/Library/Python/2.7/bin:$PATH"
永続的にパスを通すよう .bash_profile に記述する。
echo 'export PATH="$HOME/Library/Python/2.7/bin:$PATH"' >> ~/.bash_profile
“pip“を使って”paramiko“をインストールします。
pip install paramiko --user python
< テスト用のPytonスクリプトを実行してみる >
今回は、”macOS”に標準で利用できる”Automator“を利用します。理由は、簡単にPythonスクリプトを実行でき、単独で実行可能なアプリケーションとして保存できるからです。
“Automator” (アプリケーションフォルダにあります。)を起動すると、作成する”Automator”の種類を選択する画面が表示されるので、今回は”アプリケーション”をダブルクリック。
“スクリプト”と検索すると、”シェルスクリプトを実行”というアクションが表示されるので、右側の白紙画面にドラッグ&ドロックします。
左上のシェル欄を”/user/bin/python”にセットし、下図のようにスクリプトを書きます。
末尾のラインが、実際にラズパイに発行するsshコマンドです。
ssh_command(‘接続先のIPアドレスまたはローカルドメイン名’, ‘ラズパイのユーザ名, ‘ラズパイのパスワード’, ‘実行したいシェルコマンド’)
シェルコマンドの返り値は、”結果”欄に表示されます。
画面右上の”実行”ボタンをクリックすると、スクリプトの内容を実行できます。
それでは、本命の”radiko.sh”を実行してみましょう。
ssh_command('接続先のIPアドレスまたはローカルドメイン名', 'ラズパイのユーザ名', 'ラズパイのパスワード', '/home/pi/radiko.sh -p -t 1 JOAK-FM')
残念なことに、”結果”欄には”MPlayer”のバージョン情報しか表示されません。
それでは、ターミナルがなくても実行できるよう” > /dev/null 2>&1″という呪文を追記してみましょう。
ssh_command('接続先のIPアドレスまたはローカルドメイン名', 'ラズパイのユーザ名', 'ラズパイのパスワード', '/home/pi/radiko.sh -p -t 1 JOAK-FM > /dev/null 2>&1')
“結果”欄には”アクションが実行中です。”というメッセージが表示され、見事にラズパイからラジオ放送が聴こえてきました。成功です!
完成したPythonスクリプトをアプリケーションとして保存しましょう。アプリケーションとして保存したスクリプトを編集したい場合は、”Automator”本体にスクリプトをドラッグ&ドロップして下さい。
< 毎朝7時に実行するイベントとしてカレンダーに登録 >
“macOS”に標準で利用できる”カレンダー”アプリで、毎朝7時にNHKニュースを聴く仕組みを作っていきます。
“カレンダー”アプリでは、新規にイベントを作成する際、”通知”欄に”ファイルを開く”というアクションを設定できるカスタム機能が用意されています。
“ファイルを開く”アクションで、先程作成した”Automator”版のアプリケーションを指定しておけば、毎朝7時にPythonスクリプトを実行することができます。
Pythonスクリプトでは、ローカルドメインでラズパイを指定しているので、自宅にいる時にだけPythonスクリプトが正常に実行でき、結果的にだれもいないのにラジオが流れるというシチュエーションを回避できます。(勿論、マックの電源を24時間入れっぱなしの場合は別ですが…)
朝7時になると、NHKニュースの再生が開始されました。
これで、めでたく、マックとラズパイ、そして今回買った千円のBluetoothスピーカーで、radikoの放送を再生、録音する仕組みが完成しました。今回は、低予算でとても楽しめました。満足です!
p.s>
“Automator”版のアプリケーションに可愛いアイコンを貼り付けて、こんな風にも利用しています。これもなかなか便利!
スクリプト実行中は、メニューバーに歯車アイコンが回転します。Xボタンをクリックすると、番組の再生中を途中でキャンセルすることができます。
p.s>
ラズパイを再起動したら、bluetoothスピーカーから音が聴こえなくなってしまった場合は、以下の対応が効果的なようです。
・ラズパイを起動後、bluetoothスピーカーの電源をオフ・オン。
・ラズパイのbluetoothメニューから”デバイス”でbluetoothスピーカーを選択し”オーディオシンク”を実行。そもそもbluetoothスピーカーが表示されない場合はbluetoothスピーカーの電源をオフ・オンし直してみる。
・ラズパイメニューの”サウンドとビデオ”->”PulseAudio 音量調整”を選択し”出力装置”にbluetoothスピーカーが表示されていることを確認。そもそも”PulseAudio 音量調整”項目がメニューに表示されていない場合はインストール作業に問題があるはずです。
上記の手順でうまく行かない場合は、そもそもbluetoothスピーカーが何らかの理由で認識できていない可能性があるので現状を確認してみましょう。
以下のコマンドで、現在再生可能なデバイスをリストアップできます。
pactl list sinks
今回の体験を通じて思ったことは、ラズパイのbluetooth機能の安定感がいまいちかなあという感じです。ラズパイに外部スピーカーを接続するのであれば、素直にAUXケーブルで物理的に接続した方がかなり無難だと思います。ま、ラズパイのbluetoothをいじってみるのは楽しいけどね。
|
|
|
ホームページ “THE POOH FILES”にも是非お立ち寄り下さい。
“Adobe Stock“でベストショットな写真素材を販売中です。是非ご覧下さい。