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に集中することが出来ました。

moOdeaudio8.2.5 + Jwm

moodeaudio8.2.5を新規インストール。前回8.2.4で導入したJwmを少し修正してみました。

moOdeaudio8.2.5

初回の起動はパスワードファイルをコピーしている関連かmpdエラーが出ます。オーナー変更で正常動作

$ sudo chown mpd:audio /var/lib/mpd
$ sudo chown mpd:audio /var/lib/mpd/playlists

8.2.5ではmoodeメニューのUIが若干変更になっているようです。

Jwm

JwmはPi4で変更した.jwmrcを元にmoodeに適用しています。 .jwmrc jwm-menu
 

moodeではx11-appsがインストールされているのでJwmパネルの時刻をクリックするとxclockが起動します。
oclockに変更(カラーはx11色名称が使用可。タイトルバーはdevilspie2で外している)
.jwmrc

<Clock format="%H:%M"><Button mask="123">exec:oclock -fg Lime -bg SlateGray</Button></Clock>

さて8.2.4で導入したJwmですがやはりdevilspie2による自動整列が便利なことから継続して使用することにしました。

jwmメニューのSystem Menuをクリックするとワークスペース4に移動してシステムメニューを起動(xdotool)。moode(pi)ボタンクリックでワークスペース1に移動して必要なアプリケーション起動、devilspie2を再起動して定位置に配置(uim-toolbar-gtkは手作業)
ワークスペースへの配置はdevilspie2で可能ですが気が向いたらdwmも併用することを考慮してxdotoolでマウスポインタを移動
System Menuではfehから壁紙を貼り付けています。(適当な画像を用意 background.png)

~/.fehbg

#!/bin/sh
feh --no-fehbg --bg-scale '/home/pi/background.png'

system_menu.py (一部抜粋) system_menu.py

ラジオメニューのナチュレボタン(devilspie2)を修正しています。

# nature
def nature():
    wm = ("ps ax | grep dwm | grep -v grep | awk '{print($NF)}'")
    wm = (subprocess.Popen(wm, stdout=subprocess.PIPE, shell=True).communicate()[0]).decode('utf-8')
    wm = wm.strip()
    if wm == "/usr/local/bin/dwm":
        messagebox.showinfo('nature', 'Wm = DWM  Bye!')
        return
    #subprocess.run("mpc volume 10", shell=True)
    #subprocess.run("mpc clear", shell=True)
    subprocess.run("echo '' > /tmp/moode_id", shell=True)
    subprocess.run("echo '1' > /tmp/test_id", shell=True)
    proc = ("ps ax | grep -v grep | grep devilspie2 | grep Sl")
    proc = (subprocess.Popen(proc, stdout=subprocess.PIPE, shell=True).communicate()[0]).decode('utf-8')
    proc = proc.strip()
    if not proc:
        subprocess.run("devilspie2 &", shell=True)
    else:
        subprocess.run("killall -q devilspie2 && sleep 0.5 && devilspie2 &", shell=True)
icon1001 = PhotoImage(file=dir+'nature.png')
button1001 = ttk.Button(frame1,image=icon1001,command=nature)
button1001.grid(row=2,column=5)

ラジオデータ

moodeaudio8になってラジオマネージャーから登録したラジオ局のエクスポート、インポート機能が無くなっているようです。当サイトでは現在90サイトほどの登録があります。moodeのラジオデータはそれほど頻繁に更新があるわけでは無いのですが稀にURLの変更、また入れ替えがあったりします。国別制限などで最初から聴取不可のサイトなどもあったりしますができるだけ最新のデータに登録したラジオデータを取り込むようにしています。今回気がついたところではBBC RadioのURLが変更になっています。旧URLでも再生は可能ですがSimulラジオからはURLを変更しないとロゴ画像を表示しません。
以下当サイトで実行しているデータインポート(限りなく安全と思いますが自己責任)基本作業はsqlite3が使えれば必ずしもmoodeaudioで作業する必要は無いのですがmoodeaudioで実行したほうが効率がいいので新規インストールしたmoodeaudio8.2.5で実行。
例として8.2.4のユーザーデータを8.2.5に移行。基本作業はユーザー権限で実行、作成したmoode-sqlite3.dbを最後にroot権限でコピー実行。概略としてはユーザー登録したラジオデータは500番以降に記録されます。824のsqlite3.dbから500番以降のデータを取り出し825の最新データに追記。また登録したラジオサイトはplsファイル、ロゴ画像が作成されるので824のカードからコピー所定の位置に配置する必要があります。
ユーザー(home)にディレクトリを作成。824はカードを用意。moode-sqlite3.dbをそれぞれコピー

$ mkdir -p ~/sqlite3/moode824
$ cp /media/rootfs/var/local/www/db/moode-sqlite3.db ~/sqlite3/moode824
$ mkdir -p ~/sqlite3/moode825
$ cp /var/local/www/db/moode-sqlite3.db ~/sqlite3/moode825

エクスポート
~/sqlite3/moode824/radio-export.sh

#!/bin/sh
# radio-export.sh(this file)
# -- csv(old_ver)
sqlite3 -csv moode-sqlite3.db "SELECT * from cfg_radio ;" > cfg_radio.csv
# -- user_data(old_ver)
sleep 1
cat cfg_radio.csv | awk -F "," '$1 >= 500 {print}' > cfg_radio.csv.user_data

824のカードから500番以降のデータをエクスポート(cfg_radio.csv.user_data)

$ cd ~/sqlite3/moode824
$ sh radio-export.sh
$ mv cfg_radio.csv.user_data ../moode825

インポート
~/sqlite3/moode825/radio-import.sh

#!/bin/sh
# radio-import.sh(this file)
# -- csv(new_ver)
sqlite3 -csv moode-sqlite3.db "SELECT * from cfg_radio ;" > cfg_radio.csv
# -- add user_data(new_ver)
sleep 1
cat cfg_radio.csv.user_data >> cfg_radio.csv

user_dataをcfg_radio.csvに追記

$ cd ~/sqlite3/moode825
$ sh radio-import.sh

moode-sqlite3.db インポート(対話モード)

$ sqlite3 moode-sqlite3.db
#SQLite version 3.16.2 2017-01-06 16:32:41
#Enter ".help" for usage hints.
sqlite> .separator ,
sqlite> delete from cfg_radio;
sqlite> .mode csv
sqlite> .import cfg_radio.csv cfg_radio
sqlite> .exit
$ sudo cp -p /var/local/www/db/moode-sqlite3.db /var/local/www/db/moode-sqlite3.db.def
$ sudo cp ./moode-sqlite3.db /var/local/www/db


sqlite3を実行すると対話モードに入ります。上記の通り実行、エラーメッセージが無ければ成功しています。
最後にsudoでコピー実行。最初にバックアップを取っておくといいでしょう。
plsファイル /var/lib/mpd/music/RADIO
logo /var/local/www/imagesw/radio-logos
200×200 80×80
/var/local/www/imagesw/radio-logos/thumbs

Raspberry Pi 4 raspios + jwm

当サイトのRaspberry Pi 4はLXPanelの不具合がなかなか解決しないので前回moOde audioで採用したウィンドウマネージャーJWMをRaspberry Pi 4に適用してみました。

ウィンドウマネージャーJWM

ベースとなるraspiosは64bit 2022-09-06-raspios-bullseye-arm64を新規インストール。主なパッケージをインストール、環境を設定しています。
jwmをインストール (.jwmrc jwm-menu作成)

$ sudo apt install jwm
$ mkdir ~/jwm
$ cp -r /etc/jwm ~/
$ cp ~/jwm/system.jwmrc ~/.jwmrc
$ cp ~/jwm/debian-menu ~/jwm/jwm-menu

ウィンドウマネージャーを変更
/etc/xdg/lxsession/LXDE-pi/desktop.conf 2行目mutter -> jwm

[Session]
window_manager=jwm

オートログイン /etc/lightdm/lightdm.conf(126行目)

autologin-user=pi

Xは.xsessionから実行することにします。
~/.xsession (chmod 755 .xsession)

#!/bin/sh
xrdb ~/.Xresources
xmodmap ~/.Xmodmap
fcitx &
sleep 1
exec /usr/bin/jwm

再起動
パネルは下部に表示、シンプルな画面。デフォルトのLXDEはそのまま。アプリケーションがdockに対応していればパネルに格納してくれます。fcitx可能

JWM設定
raspiosにインストールされているパッケージはLXDEの一部を除いて利用可能ですがjwmではLxpanelのプラグインやメニューへのアプリケーション自動追加などは利用できません。bluetooth設定などは別途アプリケーションをインストールします。
jwmのパネルやメニューを設定。パネルは上部にロゴ変更、ページャは右側に11個配置、LXPnelのページャと比べると若干視認性が悪いので2個増やして予備に中9個を今まで同様割り当てます。


サイズはパネルに合わせて縮小してくれます。

当サイトではよく使うアプリケーションはpythonメニューに大体登録済みです。jwmメニューはカテゴリを用意して新規インストールしたものや気がついたものをサクッと登録するようにします。

設定例
.jwmrc
jwm-menu
メニューのスタートは上記画像の幅を広げて新たにファイルを作成アイコンのみとしています。
アプリケーション、カテゴリアイコンは.jwmrcのアイコンパスを追加

カテゴリアイコンは視認性の良いHighContrastを設定、メジャーなアプリケーションはlabel=とicon=を同一名にすることでヒットする確率が高くなります。拡張子も必要ありません。表示しない時は適当なアイコンファイルをパスの通ったところにコピーファイル名を指定
.xsession再編集
jwmは起動時のアプリケーションスタートアップが無いので.xsessionの最後にスクリプトを走らせます。xdotiil,devilspie2を利用、位置、サイズ、ワークスペースを振り分けます。適当にsleepを入れて起動します。必要であればスクリプトファイルを複数用意してメインのスクリプトから呼び出します。最後は終わりの無いアプリケーションを実行。当サイトは最後にhtopを実行しています。htopを終了するとjwmが強制終了、ログイン画面になるので注意が必要です。

#!/bin/sh
xrdb ~/.Xresources
xmodmap ~/.Xmodmap
xbindkeys &
devilspie2 &
fcitx &
/usr/bin/jwm &
sleep 1
exec ~/bin/startup/work.sh

スクリプトファイルは起動したいアプリケーションを並べて行きます
後述するideskもこのスクリプトから実行(.xsessionに直接書くと何故か壁紙を適用しない)
(例 $ chmod 755 work.sh)

#!/bin/sh
/usr/bin/chromium-browser &
sleep 10
# idesk
idesk &
sleep 1
# htop
xterm -geometry 72x14+85+31 -e htop

今まで寸足らずのパネルも幅いっぱいになりました。メニューも登録したものだけなので非常にスッキリしています。

デスクトップアイコン、壁紙

デスクトップアイコンや壁紙は必須では無いですが全く無いと若干さみしいですね。デスクトップアイコンはpcmanfmが普通に動くので設定も可能かもしれませんがここはシンプルなideskを使うことにします。ideskは壁紙も設定可能です。

$ sudo apt install idesk

idesk
設定ファイル.ideskrcをコピー、デスクトップアイコン設定ファイル用のディレクトリ.idesktopまたideskは隠しディレクトリ(.dir)はidesk再起動時ファイルを読みに行かないのでアイコンファイル用のディレクトリidesktop(dot無し)を作成

$ mkdir ~/.idesktop
$ mkdir ~/idesktop
$ cp /usr/share/idesk/dot.ideskrc ~/.ideskrc
$ cp /usr/share/idesk/default.lnk ~/.idesktop/

Background.SourceとBackground.FileがNoneになっているので適当なファイル名を記載します。Background.Fileが優先するようです。またマウスleftクリックはシングルクリック設定。

  Background.Source: /usr/share/rpd-wallpaper/balloon.jpg
  Background.File: /usr/share/rpd-wallpaper/bridge.jpg

  Execute[0]: left singleClk

idesk デスクトップアイコン
~/.idesktop/default.lnkをコピーしてchromium.lnkを作成。アイコンは48pixを使用、サイズは調整可能
jwmメニューのrestartを実行すると画面を再描写するせいか壁紙も終了してしまいます。default.lnkは後述する壁紙ツールを実行します。
またidesk自体の起動は.xsessionから実行するスクリプトから起動

default.lnk
table Icon
  Caption: Idesk
  Command: ~/bin/wallpaper.py
  Icon: /usr/share/idesk/folder_home.xpm
  Width: 40
  Height: 40
  X: 25
  Y: 45
end

chromium.lnk
table Icon
  Caption: Chromium
  Command: chromium-browser
  Icon: /home/pi/idesktop/chromium.png
  Width: 40
  Height: 40
  X: 25
  Y: 115
end

Wallpaper Select Tool

raspberry piの壁紙はDebian 7 (Wheezy)の頃からほとんど変わっていない記憶があります。そろそろ飽きも来ていることからウィンドウマネージャをjwmにしたことでLXDEの外観設定が不可になったこの機会に壁紙設定ツールを作成してみました。画像ファイルは安全と思われるサイトからダウンロードするようにします。

wallpaper.py_20230110
リストはraspiosのデフォルト画像ディレクトリ(/usr/share/rpd-wallpaper/)とHomeディレクトリ(/home/pi/画像/wallpaper/)を選択できます。リストから画像ファイルを選択GET Wallpaperボタンをクリック(./.ideskrc Background.File)を書き換えideskを再起動して適用します。rangerは選択しているディレクトリで起動、画像を確認(rangerは予め画像を表示出来るよう設定)
ブラウザからダウンロードしたファイルはReloadでリストに反映。
jwm restartで壁紙が終了したらRestartボタンでideskを再起動。
ディレクトリの移動可(多少画像ファイル数多くても整理可)



こういうのもありです!
jwm restartを繰り返しているとsurf(moode player)がいつの間にか終了していることがあります。再起動は問題無いので特に影響は無いと思います。LXDEの一部機能は使えませんが特に問題になることは無いと考えています。しばらくJwm環境で使ってみようと思います。

moOde audio8.2.4 ウィンドウマネージャ JWM

これまでmoOde audioにウィンドウマネージャDWMをインストールしていましたが新たにスタック型のJWMを追加してみました。vncのxstartupで選択することが出来ます。dwmは気に入っていて今後も使い続けるつもりですがもう一つの選択肢としてjwmを設定してみます。特に問題なければPi4のウィンドウマネージャにする予定。


moOde audio8.2.4をダウンロード。通常通りカードを作成インストール。

主な追加パッケージ(ファイルマネージャrangerは外しています。導入する際はpulseaudioの制御設定が必須です(過去記事どっか)

echo "--- update ---"
apt update

apt -y install lv vim xterm tree rename
apt -y install tigervnc-standalone-server xbindkeys xdotool feh
apt -y install pulseaudio pavucontrol ncmpcpp
apt -y install mpv mplayer streamlink
apt -y remove youtube-dl
curl -L https://yt-dl.org/downloads/latest/youtube-dl -o /usr/local/bin/youtube-dl
chmod a+rx /usr/local/bin/youtube-dl

echo "--- jp ---"
apt -y install fonts-ipafont fonts-ricty-diminished
apt -y install uim uim-anthy uim-mozc uim-xim uim-gtk2.0

echo "--- themes ---"
apt -y install lxappearance gnome-accessibility-themes gnome-themes-extra

echo "--- autoremove ---"
apt -y autoremove

pulseaudio /etc/pulse/default.paは適宜設定追加

今までのmoode8.2.2からコピー

/etcのパスワード関連(コピーすることでwww-dataの設定不要)
/var/www/html (cp -Rp /var/www/html コピー先)
/home/pi (設定済のユーザーディレクトリ)
/etc/init.d/vncboot (# systemctl enable vncboot)
/usr/local/bin/dwm (使う場合)
/etc/fonts (インストールしたipafontなどの設定(過去記事参照)

JWM(新たにインストール、ユーザーディレクトリに.jwmrcをコピー)

$ sudo apt install jwm
$ cp /etc/jwm/system.jwmrc ~/.jwmrc

~/.vnc/tigervnc.conf

$geometry     = "1800x840";
$depth        = 24;
$desktopName  = "moOde audio";
$localhost    = "no";

~/.vnc/xstartup

#!/bin/sh
xrdb $HOME/.Xresources
export GTK_IM_MODULE='uim'
export QT_IM_MODULE='uim'
uim-xim &
export XMODIFIERS='@im=uim'
xbindkeys &
devilspie2 &
sleep 1
sudo killall -q pulseaudio
echo "" > /tmp/moode_id
echo "1" > /tmp/test_id
sleep 1
~/bin/radio_menu.py &
sleep 1
uim-toolbar-gtk &
sleep 3
#exec /usr/local/bin/dwm
exec /usr/bin/jwm

末尾のjwm( or dwm)を有効にすることで切り替えます。
dwmを有効 Pi4から接続(パスワードはコピーしてリネーム)いつもの画面

$ vncviewer -passwd /home/db650/.vnc/moode moode:1

jwmを有効にして接続。ラジオメニュー起動(xstartupで指定)
jwmの初期設定はパネル下部、右クリックメニューのターミナルはルート(/)起点(vncserver?)になるのでパネル上部(好み)及びユーザーディレクトリに取り敢えず変更。Pi4から実行するsurfのmoOde playerもY軸を小さくするとボリューム表示が隠れるようです。正確なボリューム値はncmpcppの右上に常にリアルタイムで表示されます。Simulラジオから実行する際は混乱が無くていいですね。
~/.jwmrc

8行目 "cd ; を追記" <Program icon="terminal.png" label="Terminal">cd ; xterm</Program>
37行目 "y= -1を1" <Tray x="0" y="1" height="25" autohide="off">

ラジオメニューから各アプリケーションを実行するだけですがサイズ変更や並び替えが地味に面倒です。dwmのタグはXの仮想デスクトップとは違いますがjwmはxdotoolやdevilspie2が使えます。

$ sudo apt install devilspie2

~/.config/devilspie2/applications.lua (ファイル名は任意)

----------------------------------------------------
-- devilspie2 - Lua-based window matching utility --
----------------------------------------------------
-- get_window_name()
-- get_application_name()
-- get_class_instance_name()
-- pin_window()
-- shade()
-- minimize()
-- make_always_on_top()
-- set_window_workspace(1)
-- undecorate_window()
-----------------------------------------------------
-- Simul Radio menu
if (get_window_name()=="moOde audio Simul Radio") then
  set_window_geometry2 (0,10,460,160)
  -- pin_window()
  -- undecorate_window()
end

-- htop
if (get_window_name()=="htop") then
  set_window_geometry2 (550,20,607,145)
  undecorate_window()
end

-- Simul moOde Radio
if (get_window_name()=="Simul moOde Radio") then
  set_window_geometry2 (550,170,607,583)
  undecorate_window()
end

-- Simul mms Radio
if (get_window_name()=="Simul mms Radio") then
  set_window_geometry2 (3,198,460,308)
  undecorate_window()
end

-- Radiko Player
if (get_window_name()=="Radiko Player") then
  set_window_geometry2 (3,512,460,286)
  undecorate_window()
end

-- CD MPlayer
if (get_window_name()=="CD MPlayer") then
  set_window_geometry2 (1270,80,458,135)
  undecorate_window()
end

-- pavucontrol
if (get_application_name()=="pavucontrol") then
  set_window_geometry2 (1220,515,560,250)
end

-- ncmpcpp
if (get_application_name()=="ncmpcpp 0.9.2") then
  set_window_geometry2 (1220,240,560,250)
end

起動はxstartupに記載しています。サイズ、位置はxwininfoでも確認できます。メニューから実行すると記載した位置、サイズで起動しますが最初は微妙にずれています。ラジオメニューのナチュレボタンを実行するとdevilspie2を再起動、記載した位置にピタリと行くはずです。但しncmpcppだけは1回目は認識しません。またmpd再生中も認識しません。停止中(タイトルバー ncmpcpp 0.9.2) のときのみ正常に認識動作します。
ラジオメニュー radio_menu.py

jwmは軽量、シンプルなウィンドウマネージャです。moode audio + raspberry pi2では問題無く動作すると思います。メニューは編集が必要ですが今回の用途ではほとんど必要ないと思います。編集次第ではかなり雰囲気も変わりそうです。
操作感としてはdwmがキビキビ動作しますが基本タイル型また設定はコンパイルが必要とあって敬遠する向きがあるかもしれません。いずれも非力なSBCのX環境+vncの特定用途、実験環境にはベストな選択と言えそうです。

moOde8.2.2 Raspberry Pi 1B(Rev2) + TDA1543

スピーカーユニット(FE87)のチェック、サブシステム用としてRaspberry Pi 1B(Rev2)にmoOde8.2.2をインストール、I2S-DAC(TDA1543)を組んでみました。

I2S-DAC(TDA1543)

当サイトにあるTDA1543を見るとなんか刻印が違います。約10年前に購入したものですがweb上では偽物が流通しているという情報があります。現在は生産終了ということもあってか高価なところもありますが当サイトで購入した金額は5個200円と値段から言えば偽物決定と言えそうです。以前作成したDACは現在も時々入れ替えて使用していますが特に問題ありません。今回も前回同様超簡単回路で作成してみます。


カップリングコンデンサはNPコン(ノンポーラコンデンサ)を使用しています。リファレンス抵抗は決め打ちです。


以前作成したベース基板を再利用していますがP5ヘッダーに直接取り付けることでコンパクト、且つ簡単に作成できます。

moOde8.2.2


Raspberry Pi 1BにmoOde8.2.2をインストール。スペック的にX環境などは厳しいのでpulseaudioのみ追加。
mpdはmoodeplayer本来の使い方になります。
音量は能率の違いから高めに設定。メインのmoodeと区別するため/etc/hostnameをmoode1bに変更


pulseaudioは外部からの接続のみとします。使い途はそれぞれですが当サイトでは当面FE-87のチェックを想定しています。以前 Pi Zeroで確認した際はwifiネットワークがネックになっていたようです。

またいつからかは不明ですが現在のpulseaudio(/etc/pulse/default.pa)はネットワークの範囲指定だけでいいようです。(当サイトのデバイス)
例(192.168.0.0/24 = 192.168.0.0〜192.168.0.255)

/etc/pulse/default.pa
load-module module-native-protocol-tcp auth-ip-acl=127.0.0.1;192.168.0.0/24 auth-anonymous=1

Pi4から音声を送るためにはPi4の~/.config/pulse/client.conf defaultserverでPi2 or Pi1Bを指定します。

radiko playerのボタンを利用してsedで末行を書き換えています。
raspberry pi 2 192.168.0.113
raspberry pi 1B 192.168.0.13

radiko-streamlink.py

$ sed -i '$  s/192.168.*/192.168.0.13/g' ~/.config/pulse/client.conf


pulseaudioはアクセスが無いとオートキルしてしまいます。Pi2は内部でpavucontrolを起動していますがPi1Bは動かすことが出来ないのでclient.confを書き換えてからPi4からpavucontrolを起動します。ブラウザなどから動画などを切り替えながら見る際などに有効です。

本物のTDA1543は持ち合わせてないので真偽は不明ですがDACとして正常に認識、再生可能です。電源投入後最初のPLAYは比較的大きいポップ音が発生します。以降はほとんど気になりません。本物のTDA1543もオートミュート機能が無いため同様と思われます。

さて肝心のFE-87音質ですがエージングすると若干聞きやすくなりますがシ音が強調されるような傾向は変わりません。但し特定のラジオサイトまたはソースによってはかなり自然な再生音になります。やはりデジアンとSPユニットの関係と思われます。もうしばらくは遊べそうです。

GPIO7に接続しているLEDは/etc/rc.localから制御しています。点灯したら接続し頃です。

# raspi-gpio
raspi-gpio set 7 op ; sleep 45 ; raspi-gpio set 7 dh
exit 0

Top