moOde audio + Podcast newsboat

ニュース系の番組(解説)やトーク番組などを聴くためにPodcast newsboatを導入してみました。Podcastというとスマホのアプリを利用することが多いと思いますがRaspberryPiからはウェブブラウザまたはそう多くは無いですがパッケージが利用出来ます。

スワップ領域を設定

RaspberryPiはzero2w(512M)で設定しています。本来のmoOdeaudio(moOdePlayer)以外にもサイマルラジオなどを起動しているため今回Podcastを走らせるとメモリを喰い潰してしまいます。デフォルトのmoOdeaudioはスワップ領域を設定していないためまずはスワップ領域を設定、スタートします。
/etc/dphys-swapfile デフォルトは100Mですが取り敢えず512M

CONF_SWAPSIZE=512

systemctl enable start

$ sudo systemctl enable dphys-swapfile && sudo systemctl start dphys-swapfile

newsboat

moOde audioから利用するためには確実にpulseaudioをコントロールする必要があるため利用できるアプリケーションは限られてきます。今回は超シンプルなCLIアプリケーションのnewsboatを選択してみました。マウスも利用できませんが基本の設定や操作は非常にわかりやすいです。

$ sudo update && sudo apt install newsboat

下記例は作業ディレクトリを設定、urlを登録して実行 オプション-r で新規エピソード取得

$ newsboat -r

作業ディレクトリの設定

$ newsboatを実行すると~/にディレクトリ~/.newsboatが作成されます。raspiosからインストールされるバージョンは2.21.0です。現時点の最新バージョンは2.30でウエブ情報では~/.config以下に設定している例もあります。今後変更になるかもしれません。

moode:~ $ newsboat
newsboat2.21.0を起動中…
設定を読み込み中…完了しました。
キャッシュを読み込み中…完了しました。
/home/pi/.newsboat/urlsからURLを読み込み中…完了しました。
Error: no URLs configured. Please fill the file /home/pi/.newsboat/urls with RSS feed URLs or import an OPML file.

~/.newsboat/urlsにRSS feed URLsを書き込めと言ってます。

RSS feed URLの取得

ポッドキャストランキング https://podcastranking.jp/

聴きたいコンテンツがあったらRSSで番組を購読するをクリックー>URLをコピー
~/.newsboat/urlsを新規作成、1行ずつ貼り付けていきます。
NHK TOKYOFMなどはxml形式になっています。

NHK ポッドキャスト https://www.nhk.or.jp/podcasts/

NHKのサイトからは’Podcastを登録’右クリック、リンクのアドレスをコピー
同様に~/.newsboat/urlsに貼り付け。

~/.newsboat/config

基本の設定は~/.newsboat/urlsを作成するだけですがbind-keyの追加とcolor設定を少し変更してみます。
サンプルは/usr/share/doc/newsboat以下にあります。
~/.newsboat/config

browser elinks %u
bind-key h quit
bind-key j next
bind-key k prev
bind-key l enqueue
bind-key SPACE open
bind-key u reload-all
color background         default   default
color listnormal         white     black
color listnormal_unread  default   default
color listfocus          white     magenta  bold
color listfocus_unread   white     magenta  bold
color info               default   black    bold
color article            default   default  bold

browserはテキストブラウザのelinksを指定。chromiumは不可、w3mもサイトによってはOS自体がハングアップしてしまいます。ブラウザで何かを閲覧するというよりもハングアップしないブラウザをインストール、適用します。

$ sudo apt install elinks


bind-keyはvi likeな設定を追加しています。
設定したbind-keyは下段のメニューバーにまたヘルプにも反映されます。
ディフォルトのキーもそのまま使えます。
使いたいキーやアクションは各モードのヘルプで確認
カラーはよりシンプルに。


選択したエピソードはこのモードからe(エンキュー)すると~/.newsboat/queueに記録されます。
s(保存)は~/にテキスト形式で保存。
直接プレーヤーを起動することは無いようなのでキュー(queue)を利用することにします。

Podcast mpv Player

Podcast mpv Playerはqueueに記録されたurlをプレイリストにして再生します。

起動時はキューを空にします。
複数のエピソードを連続して再生したい場合はキューを空にしてエンキュー。最後にエンキューしたエピソードのみ再生したい時はQueue_Sボタンでプレイ。

simul_podcast.py

pulseaudio


Podcast mpv Playerはpulseaudioの起動をチェックして再生します。ロゴ画像は再生に特に決まったパターンが無いようなのでxterm(geometry) + mpvでPodcast再生を判断しています。


画像は/vae/www/html/img/

/vae/www/html/pulse.php (一部抜粋)

  // radio Img logo
    $station = shell_exec("ps ax | grep radiko.jp | grep -v grep | awk '{print $(NF-1)}' | awk 'NR==1' | cut -c 26-");
    if ($station == NULL) {
        $station = shell_exec("ps ax | grep -v grep | grep mms:// | awk -F '/' '{print $(NF)}'");
    }
    if ($station == NULL) {
        $station = shell_exec("ps ax | grep -v grep | grep -m 1 cdda");
        if ($station == TRUE) {
            $station = "cdda";
        }
    }
    if ($station == NULL) {
        $station = shell_exec("ps ax | grep -v grep | grep 'xterm -g 81x17-0+198 -e mpv --no-video'");
        if ($station == TRUE) {
            $station = "podcast";
        }
    }
    if ($pulse == TRUE) {
        if ($station == NULL) {
            sleep(0.1);
            $station = ('pulse');
        }

起動


radio_menu.pyからの起動

# Podcast newsboat
def podcast():
    podcast = ("ps ax | grep -v grep | grep simul_podcast.py")
    podcast = (subprocess.Popen(podcast, stdout=subprocess.PIPE, shell=True).communicate()[0]).decode('utf-8')
    podcast = podcast.strip()
    if not podcast:
        subprocess.run("~/bin/simul_podcast.py &", shell=True)
        time.sleep(1)
    subprocess.run("xterm -g 100x40+490+145 -e newsboat -r &", shell=True)
icon413 = PhotoImage('~/.icons/radio/podcast.png')
button413 = ttk.Button(frame1,image=icon413,command=podcast)
button413.grid(row=1,column=4)

スワップ領域は現在240Mほど使われています。再起動のタイミングやもう少し増やしたほうがいいのかは様子を見ようと思います。

newsboatは基本RSSを登録、エンキューするだけの簡単操作でテレビのない当サイトにおいてPodcastは実に強力なツールと言えます。内容はまだまだ精査する必要がありますが音声系についてはほぼ全てmoOde audioに集中することが出来ました。