SimulRadio – 音量設定(3) – (mpc volume)

CSRA関連にはmms://で配信しているラジオ局をリストに登録しています。これまでは見て聴かぬ振りをしていたのですがほぼ希望通りの動作をすることができたのでmms://も簡単に音量設定をしてみました。

mms://で登録しているラジオ局は10数局と数も少ないし決まったパターンも無いことから簡単なpythonファイル(mms.py)にして読み込んでいます。
simul-vol.pyとsimul.pyのplay_selectionを変更しています。

simul-vol.py

simul-vol.pyではJCBA – ListenRadio – NHKの順に検索しています。どれにも該当しないものをmms.pyで検索します。

        # other
        if not (proc):
            command = ("mpc playlist | grep -oP 'nhk.{0,5}' | grep -v {")
            proc = (subprocess.Popen(command, stdout=subprocess.PIPE, shell=True).communicate()[0]).decode('utf-8')
            proc = proc.strip()
            # NHK
            if proc == 'nhkradio':
                subprocess.run("mpc volume +4", shell=True)
            # mms
            else:
                subprocess.run("/home/pi/bin/mms.py", shell=True)

mms.pyでは直接urlを検索してmpc volumeの値を設定します。

command = ("mpc playlist")
proc = (subprocess.Popen(command, stdout=subprocess.PIPE, shell=True).communicate()[0]).decode('utf-8')
proc = proc.strip()
if proc == 'mms://hdv2.nkansai.tv/radiokaros':
    subprocess.run("mpc volume +5", shell=True)

simul.py

simul.pyのplay_selectionではsleepの値を調整するため検索順を少し変更して更に詰めてみました。
当サイトの環境では以下の設定値で問題なく設定した音量を変更することができました。
simul.pyを変更したらプログラムの再起動が必要です。
# ListenRadio time.sleep(0.2)
# JCBA time.sleep(4)
# NHK mms time.sleep(2.5)

# selection
def play_selection():
    for i in lb.curselection():
        a = (lb.get(i))
        subprocess.run("mpc add " + (a), shell=True)
        command = ("mpc playlist | grep -oP 'www.youtube.{0,4}' | grep -v {")
        proc = (subprocess.Popen(command, stdout=subprocess.PIPE, shell=True).communicate()[0]).decode('utf-8')
        proc = proc.strip()
        if proc == 'www.youtube.com':
            command = ((("mpv ") + (a)) + (" &"))
        else:
            command = ("mpc play")
        subprocess.run(command, shell=True)
        # simul-vol.py
        command = ("mpc playlist | grep -oP 'JCB.{0,3}' | grep -v {")
        proc = (subprocess.Popen(command, stdout=subprocess.PIPE, shell=True).communicate()[0]).decode('utf-8')
        if not (proc):
            command = ("mpc playlist | grep -oP 'smartstream.{0,6}'")
            proc = (subprocess.Popen(command, stdout=subprocess.PIPE, shell=True).communicate()[0]).decode('utf-8')
            proc = proc.strip()
            # ListenRadio
            if proc == 'smartstream.ne.jp':
                time.sleep(0.2)
            # NHK mms
            else:
                time.sleep(2.5)
        # JCBA
        else:
            time.sleep(4)
        subprocess.run(("~/bin/simul-vol.py"), shell=True)

ON AIR

NHK mms://については基本urlを表示しますが# ON AIRの項に直接urlを記述することで表示できます。

# ON AIR
def button7_click():
---
        # NHK mms
        if not (proc):
            command = ("mpc playlist")
            proc = (subprocess.Popen(command, stdout=subprocess.PIPE, shell=True).communicate()[0]).decode('utf-8')
            proc = proc.strip()
            if proc == 'https://nhkradiohkfm-i.akamaihd.net/hls/live/512076/1-fm/1-fm-01.m3u8':
                proc = 'NHK FM 仙台'
            if proc == 'mms://hdv2.nkansai.tv/radiokaros':
                proc = 'ラジオカロスサッポロ/札幌市'


ラジオカロスサッポロはListenRadioを休止してCSRAのサーバーに変更されています。

"ラジオカロスサッポロ/札幌市"     "mms://hdv2.nkansai.tv/radiokaros"

リストに登録したラジオ局は全て音量の設定ができるようになりました。ラジオ局側の対応が結構適当なのでほどほどがいいと思います。
接続、再生開始はネットワーク環境、回線状態、マシンパワーなどによると思います。

参考

当サイトの現在のpythonプログラムです。(無保証)
pythonプログラムは~/bin/以下に置いて$ chmod 755 xxx.pyしています。
mms.py ボリューム設定値は変更
simul.py
simul-vol.py

Raspberry Piでは Font “Helvetica” にすると見やすくなるかもしれません。

SimulRadio – 音量設定(2) - (mpc volume)

前回までラジオ局別にボリュームリストを作成、音量を揃えてだいぶ使いやすくなったのですが再生を開始してからボリュームボタンを押す必要がありました。

やはり使ってみると再度ボタンを押すことは手間なので(欲が出ます)オートボリュームぽい仕様にしてみました。

simul.py

simul-vol.pyを設置、正常に機能している環境で設定します。
mpc volumeはmpc playの状態で有効になるのでsleepを設定してsimul-vol.pyを実行するようにします。

# simul-vol.py以降を追記します。
再生開始は当サイトのOrangePi3環境ではListenRadioはplayとほぼ同時にJCBAは5秒ほど待つ必要があります。
+1秒を加えてtime.sleepを設定します。
(環境によって変更)

~/bin/simul.py

# selection
def play_selection():
    for i in lb.curselection():
        a = (lb.get(i))
        subprocess.run("mpc add " + (a), shell=True)
        command = ("mpc playlist | grep -oP 'www.youtube.{0,4}' | grep -v {")
        proc = (subprocess.Popen(command, stdout=subprocess.PIPE, shell=True).communicate()[0]).decode('utf-8')
        proc = proc.strip()
        if proc == 'www.youtube.com':
            command = ((("mpv ") + (a)) + (" &"))
        else:
            command = ("mpc play")
        subprocess.run(command, shell=True)
        # simul-vol.py
        command = ("mpc playlist | grep -oP 'JCB.{0,3}' | grep -v {")
        proc = (subprocess.Popen(command, stdout=subprocess.PIPE, shell=True).communicate()[0]).decode('utf-8')
        if not (proc):
            command = ("mpc playlist | grep -oP 'nhk.{0,5}' | grep -v {")
            proc = (subprocess.Popen(command, stdout=subprocess.PIPE, shell=True).communicate()[0]).decode('utf-8')
            proc = proc.strip()
            # NHK
            if proc == 'nhkradio':
                time.sleep(3)
            # ListenRadio
            else:
                time.sleep(1)
        # JCBA
        else:
            time.sleep(6)
        subprocess.run(("~/bin/simul-vol.py"), shell=True)

simul.pyプログラムON AIRボタンクリック時simul-vol.pyをチェックするようにしました。(1行追記します)

# ON AIR
def button7_click():
    subprocess.run(("~/bin/simul-vol.py"), shell=True)
    command = ("mpc playlist | grep -oP 'JCB.{0,3}' | grep -v {")

ボリューム値が適用されていなければ適用してON AIR表示します。


playボタンを押すと接続、再生開始して約1秒後にボリュームリストに記載した設定値を適用します。
ボリュームリストの値はラジオ局の番組、時間帯などによってかなり違う場合があります。
また起動時の初回はOSに保存されているmpc volume値が使われます。

これで当サイトとしてはほぼ満足の行く仕様に仕上がりました。

Raspberry Pi

現在のraspbianはやはりデフォルトでpulseaudioが有効になると思います。
~/.config/pulseを作成する必要があるかもしれません。通常は$ pulseaudio –startで作成されます。
確認、モニターするにはpavucontrolをインストール

# apt install pavucontrol


pulseaudioの基本はユーザーとして実行します。
simulradioでは再生タブ(mpd)の音量はボリュームリストによって変化します。
スピーカー、アンプのある環境ではマスターボリュームで出力装置の音量をコントロールしますがmpdの音量は同時に一定の比率で変化します。
再生開始時や終了時はマスターボリュームとmpdの値が同じのほうが使いやすいと思います。

pulseaudioの出力装置の音量をコントロールするには次のコマンドを使います。

$ pactl -- set-sink-volume 0 20%

このコマンドをkillall.shに追記します。(default 20 適宜変更)

#!/bin/sh
mpc pause 1>/dev/null 2>/dev/null
pactl -- set-sink-volume 0 20%
mpc volume 20 1>/dev/null 2>/dev/null
sleep 0.1 
mpc clear 1>/dev/null 2>/dev/null
killall -q mpv
killall -q mplayer
killall -q ffplay

mpc volumeの前に記述することでラジオ局の切り替え時や終了時はデフォルト値でマスターボリュームの値を設定することができます。
mpdの音量を大きくするとマスターボリュームも同時に大きくなります。

SimulRadio – 音量設定(mpc volume)

サイマルラジオはMPDによる接続も安定してずいぶん使い勝手も良くなりました。(数日前musicbirdのサーバーが怪しいときがありましたが…)

残る問題はラジオ局によって音量の違いがかなりあることだと思います。
流石にradikoはほとんど音量が揃っています。(NHKは若干低め)
サイマルラジオ局の音量はradikoと比較すると低めのところが多いようです。

自動化は無理としてもなんとか音量の違いをカバーする方法を考えてみたいと思います。
手順としてはpythonで外部プログラム(simul-vol.py)を作成
ラジオ局固有のボリューム情報を作成(vol)
操作しやすいように適当なメニューにボリュームボタンを配置
ラジオの再生を開始したらボリュームボタンを1回押すという想定をします。

作業にあたってpulseaudioの挙動を確認してみます。

Orange Pi 3


通常radikoの再生音量は20%で利用しています。このときpavucontrolの再生タブ(アプリケーション)と出力装置タブは同じ20%になります。SimulRadioを再生してmpd(mpc)の音量を上げていくと再生タブと出力タブは同じ値で上昇しますがそこから音量を下げていくと再生タブのみ追従します。実際の音量は再生タブの値ですね。再生タブ側はアプリケーションでコントロールする仕様と思います。新たにradikoなどを再生すると出力タブの音量で再生するので気をつけなければいけません。

Raspberry Pi 3

RaspberryPiのalsa環境を確認しようと切り替えたらいつの間にかpulseaudioが動いていますね。物心(pulse heart)付いた頃から常に~/.config/pulseにはclient.confを入れていたためいつどの時点で変更になったのか全く気が付きませんでした。lxsessionのpulseaudioのチェックは外れています。

確認手順としてはpulse server(moode)を停止、~/.config/mpd/mpd.confのaudio_outputをpulseからalsaに変更してmpd再起動、~/.config/pulse/client.confを削除した時点で切り替わりました。
pavucontrolをインストールしていないと通常はalsaと変わらないので気が付かないかもしれません。

mpc volume


音量の制御はmpc volumeコマンドを利用しています。
mpc playの状態でmpc volumeが適用されます。

ボリュームリスト(vol)の作成

サンプルはradikoの音量とほぼ同じかつしかFMを基準に実際に聴取して±の値を決めています。変更なしは+0を記載
最初は大雑把に決めていいと思います。またテスト用のIDだけでもいいです。
ファイルは一つにしていますが分けることも可能です。
/home/pi/radio/vol

JCB001 +3
JCB002 +3
JCB003 +6
JCB004 +0
---
30001 +2
30002 +10
30003 +10

simul-vol.py

default volumeの設定箇所はこのファイルと下のkillall.shの2箇所あります。環境に合わせて変更します。
最初にmpc volumeからボリューム値を取得しています。(vol_level)
値は0〜99を取得していますがここで使っているのはn/a以外を判断しています。
取得した値をなにかに利用する場合は文字列になっているのでint(vol_level)で数値にする必要があります。
プログラムの基本はON AIRの動作と全く一緒でmpc playlistからIDを取得、作成したボリュームリスト(vol)のIDを検索して設定値を取得、その値でmpc volume +nします。
NHKもurlを検索して少しUPしています。
~/bin/simul-vol.py

#!/usr/bin/python3
import subprocess
import re

# default volume
vol = "mpc volume 20"

# mpc volume
command = ("mpc volume | grep -oP 'volume.{4}'")
vol_level = (subprocess.Popen(command, stdout=subprocess.PIPE, shell=True).communicate()[0]).decode('utf-8')
vol_level = vol_level[8:]
vol_level = vol_level.strip()
#print(vol_level)
if vol_level != 'n/':
    subprocess.run(vol, shell=True)
    command = ("mpc playlist | grep -oP 'JCB.{0,3}' | grep -v {")
    proc = (subprocess.Popen(command, stdout=subprocess.PIPE, shell=True).communicate()[0]).decode('utf-8')
    if not (proc):
        command = ("mpc playlist | grep -oP 'jp/3.{0,4}' | grep -v {")
        proc = (subprocess.Popen(command, stdout=subprocess.PIPE, shell=True).communicate()[0]).decode('utf-8')
        # other
        if not (proc):
            command = ("mpc playlist | grep -oP 'nhk.{0,5}' | grep -v {")
            proc = (subprocess.Popen(command, stdout=subprocess.PIPE, shell=True).communicate()[0]).decode('utf-8')
            proc = proc.strip()
            # NHK
            if proc == 'nhkradio':
                subprocess.run("mpc volume +4", shell=True)
            else:
                subprocess.run("mpc volume +0", shell=True)

        # ListenRadio
        else:
            proc = proc.strip()
            proc = proc[3:]
            with open("/home/pi/radio/vol", 'r') as f:
                for id in f:
                    if re.search((proc), id):
                        v = id[5:]
                        command = ("mpc volume" + (v))
                        subprocess.run(command, shell=True)
    # JCBA
    else:
        proc = proc.strip()
        with open("/home/pi/radio/vol", 'r') as f:
            for id in f:
                if re.search((proc), id):
                    v = id[6:]
                    command = ("mpc volume" + (v))
                    subprocess.run(command, shell=True)
else:
    quit

killall.sh

ラジオ局の切り替えや終了時は一旦ポーズしてデフォルトボリューム値を設定、mpc clearを実行。clearするとstopも実行します。
simul.py起動時はmpc playしていないのでmpc volume はn/aになっています。起動時はOSに保存されているmpc volumeの値が使われるためここで保存します。(必ずしもここの設定だけが保存されるとは限りません)
またラジオ局の切替時もデフォルトボリューム値を再設定します。
~/bin/killall.sh

#!/bin/sh
mpc pause 1>/dev/null 2>/dev/null
# デフォルトボリューム値を設定
mpc volume 20 1>/dev/null 2>/dev/null
sleep 0.1 
mpc clear 1>/dev/null 2>/dev/null
killall -q mpv 
killall -q mplayer
killall -q ffplay


volumeの値はncmpcppにリアルタイムに表示されます。
ボタンはncmpcpp下のスピーカーアイコンを使っています。
デフォルトボリューム値からncmpcppで音量を変更確認してID volume値を編集保存、ボタンを押すと即座に反映します。

サイマルラジオの音量は番組やCMによってもかなりアバウトに感じます。修正を加えながらリストを育てると使いやすくなると思います。

これまで10%以上開きがあると聴く気にならなかったのですが今は普通に聴くことができます。音質の悪いラジオ局はNGですが。

作成したsimul-vol.pyは実行権限を付けてメニューボタンから実行します。

$ chmod 755 simul-vol.py

参考 無責任 無保証です。ボリュームリスト(vol)は環境によってデフォルトボリュームが違うと思うので勝手に作成してください。
app.py サンプルメニュー
simul-vol.py
simul.py ID Editはボリュームリスト(Vol Edit)に変更しました。
ListboxはOS,fontなどによって見え方が違ってくると思います。
font sizeやwidthなど適当にいじってください。

radikoは放送大学を除いて無料で受信できるラジオ局を全て登録しました。
radikoのホームページにアクセスするとエリアが表示されます。これプロバイダの接続点ですね。放送局をクリックするとurlの末尾にradikoスクリプトに指定するIDが見えます。

だいぶラジオ環境が充実してきました。

Orange Pi 3 radiko SimulRadio

これまでradiko SimulRadioはOrangePi3上のubuntuコンテナを中心に設定、構成していたのですがその経緯にはdebianにswftools(ARM64)パッケージが無かったことから始まっています。(ubuntuリポジトリは利用できるのかな?)
このことは前回busterコンテナに再設定するまで忘れていたのですがなんとかradikoも動作するようになりました。
忘れていたことは忘れて改めてOrangePi3本体に設定してみました。

radiko

raspbianのswftoolsパッケージ情報を見ると依存するパッケージとインストールされるファイル情報が読み取れます。パッケージ自体は古いのでdebian系arm(64bit)でコンパイル済ならば流用できる可能性が高いと想像できます。

$ apt show swftools
Package: swftools
Version: 0.9.2+git20130725-4.1
Priority: extra
Section: utils
Maintainer: Christian Welzel <gawain@camlann.de>
Installed-Size: 5,043 kB
Depends: gsfonts, libc6 (>= 2.7), libfreetype6 (>= 2.2.1), libgif7 (>= 5.1), libjpeg62-turbo (>= 1.3.1), libmp3lame0, libzzip-0-13 (>= 0.13.56), zlib1g (>= 1:1.1.4)
Suggests: gs-common
Homepage: http://www.swftools.org/
Download-Size: 621 kB
APT-Manual-Installed: yes
APT-Sources: http://raspbian.raspberrypi.org/raspbian buster/main armhf Packages
Description: Collection of utilities for SWF file manipulation/creation
 SWF Tools is a collection of SWF (Flash) manipulation and creation utilities.
 .
 This package includes: as3compile, font2swf, gif2swf, jpeg2swf, png2swf,
 swfcombine, swfextract, swfdump, swfrender, swfstrings, swfbbox, swfc and
 wav2swf.
 .
  * as3compile is a standalone ActionScript 3.0 compiler. Mostly compatible
    with Flex.
  * font2swf converts font files (TTF, Type1) into SWF.
  * gif2swf converts GIFs into SWF. It is also able to handle animated gifs.
  * jpeg2swf takes one or more JPEG pictures and generates an SWF slideshow.
  * png2swf takes one or more PNG pictures and generates an SWF slideshow.
  * swfcombine is a tool for inserting SWFs into Wrapper SWFs. (Templates)
    E.g. for including the pdf2swf SWFs into some sort of Browsing-SWF.
  * swfextract allows one to extract Movieclips, Sounds, Images etc. from SWF
    files.
  * swfdump prints out various information about SWFs.
  * swfrender converts a swf to an image.
  * swfstrings scans SWFs for text data.
  * swfbbox allows one to readjust SWF bounding boxes.
  * swfc is a tool for creating SWF files from simple script files.
  * wav2swf converts WAV files into SWF.
 .
 This package does not include pdf2swf and avi2swf.

このファイルの中でradikoの再生録音に直接必要なファイルは/usr/bin/swfextractです。
また最初のauthkeyの作成にlibjpeg.so.8が必要になります。
これらのファイルをubuntuコンテナからコピーしました。

不足しているパッケージをインストール(mpv mplayer ffmpegはインストール済)

# apt install libxml2-utils rtmpdump libzzip-0-13

ubuntuからコピーしたswfextractを/usr/local/binにコピーします。

# cp swfextract /usr/local/bin

radikoスクリプトを実行

$ ~/bin/radiko.sh -p FMT
swfextract: error while loading shared libraries: libjpeg.so.8: cannot open shared object file: No such file or directory
[stop] failed get keydata (/var/tmp/authkey.png)

こんなエラーになる場合はlibjpeg.so.8がインストールされていません。
ubuntuにはlibjpeg.so.8.1.2がインストールされています。

$ ll /usr/lib/aarch64-linux-gnu/libjpeg*
lrwxrwxrwx 1 root root     16  7月  6  2018 libjpeg.so.8 -> libjpeg.so.8.1.2
-rw-r--r-- 1 root root 236168  7月  6  2018 libjpeg.so.8.1.2

コピーして同じようにリンクを張ります。

# cp libjpeg.so.8.1.2 /usr/lib/aarch64-linux-gnu
# cd /usr/lib/aarch64-linux-gnu
# ln -s libjpeg.so.8.1.2 libjpeg.so.8

radikoスクリプトを実行してエラーが無ければauthkey.pngとplayer.swfが作成されます。
/var/tmp

-rw-r--r-- 1 pi pi 198393  9? 22 17:06 authkey.png
-rw-r--r-- 1 pi pi 685413  9? 22 17:06 player.swf

もう一つの方法としてraspberry piなどで実際に聴取しているauthkey.pngとplayer.swfがあれば直接コピーすることでlibjpeg.so.8無しに動作が可能です。(ユーザーは合っていること)

SimulRadio

OrangePi3のtigervncはgeometry=”922×545″でdwmの左右の境界線(default)は0.55(55:45)に設定しています。この値に収まるようにsimul.pyのフォントを調整してみました。
フォントの見栄えはOSの設定、vncserver(tiger or tight)などによって違ってきます。
https://codeday.me/jp/qa/20190513/817329.html

from tkinter.font import Font

if __name__ == '__main__':
    root = Tk()
    root.title('SimulRadio')

    # Font
    listfont = Font(family="calibri",size=8)
    #root.option_add("*Font", listfont)
    root.option_add("*Listbox*Font", listfont)


ボタンのフォント、文字サイズはstyleで変更します。
root.option_add(“*Font”, listfont)は全体の文字サイズを変更しますがmessageboxの文字サイズも変更してしまうためListboxのみ変更しています。
以前より2ポイント位小さくなっていますが選局には支障ないと思います。

ncmpcpp

やはりncmpcはクセがあるようでOrangePi3では接続拒否されてしまいました。ncmpcppのインストール容量は少し大きくなりますが確実に接続できるようです。
mpd.confのmusic_directory設定は音楽ファイルのある任意のディレクトリを指定できます。
設定ファイルは今までのものを全てコピーしているので一旦空にしてmpdを再起動します。

$ cd ~/.config/mpd
$ : > mpd.log && : > state && : > sticker.sql && : > database
$ killall mpd && /usr/bin/mpd &


簡易なデータベースも瞬時に作成します。
PlaylistとBrowseの切り替えはTabまたは数字キーの1,2で切り替えます。
Browseから曲を選択してPlaylistに登録、再生


ラジオをPlayすると登録したPlaylistをクリア、ラジオを再生します。
simul radio – ncmpcppの再生は同じmpdを使用しているので切り替えが可能です。
radikoの再生もmpdを停止するので自動でOK、radikoの再生中からncmpcppだけは自動でmpvを止めないのでradikoを一旦停止する必要があります。
←→キーで音量調整ができます。

Orange Pi 3 Armbian debian buster 5.3.0

Linux Kernel version 5.3になってArmbian Debian busterもだいぶ安定してきたように思います。

当サイトのOrangePi3もstretchからdebian busterに移行してみました。

マイクロSDカード作成

# dd if=Armbian_5.97.190920_Orangepi3_Debian_buster_dev_5.3.0.img of=/dev/sdb bs=1M status=progress

chrony

NTPクライアントにchronyが採用されているのですが起動していませんね。

# journalctl -xe
Fatal error : Could not get _chrony uid/gid

原因がよくわからないので従来のntpをインストールします。

# apt install ntp
以下のパッケージは「削除」されます:
  chrony
以下のパッケージが新たにインストールされます:
  libopts25 ntp

インストールすると時刻が同期するようになります。

tigervnc server

ヘッドレスで運用しているOrangePi3はtigervnc serverをインストールしているのですがtigervnc1.9.0はクラッシュしてしまいます。

# apt install xserver-xorg x11-xserver-utils tigervnc-standalone-server tigervnc-common tigervnc-viewer
$ dpkg -l | grep tiger
ii  tigervnc-common 1.9.0+dfsg-3 arm64 Virtual network computing; Common software needed by servers
ii  tigervnc-standalone-server 1.9.0+dfsg-3 arm64 Standalone virtual network computing server
ii  tigervnc-viewer 1.9.0+dfsg-3 arm64 Virtual network computing client for X

以前よりbusterは試しているのですが有効な解決策が見つからないので少々姑息な手段ですが一旦1.9.0をインストールしてからstretchでインストールした1.7.0と差替えます。

# cp Xtigervnc /usr/bin/Xtigervnc
# cp tigervncconfig /usr/bin/tigervncconfig

起動、コピペも特に問題無いようです。

日本語入力uim anthy

uimは依存関係が変更になっています。uim-xim uim-gtk2.0を指定します。

# apt install uim uim-anthy uim-xim uim-gtk2.0

cpufreq

現在のsun50i-h6-orangepi-3.dtbは問題なく起動する(480MHz-1.8GHz)のですが当サイトの環境ではcpuクロックを変更すると再起動を繰り返してしまいます。
特に最新のdtbを必要とするデバイスも無いことから取り敢えず5.1.5dtbに差し替えています。

5.1.5dtbでは問題なく切り替え可、動作します。
1.32GHz〜1.49GHzではフル稼働時も温度上昇を抑えることができます。

docker-ce

docker-ceのインストールはraspberry piと同様でOKですね。

$ curl -sSL https://get.docker.com | sh
# Executing docker install script, commit: 6bf300318ebaab958c4adc341a8c7bb9f3a54a1a
You're using 'debian' version 'buster'.
Upstream release is 'debian' version 'buster'.
+ sudo -E sh -c apt-get update -qq >/dev/null
+ sudo -E sh -c apt-get install -y -qq apt-transport-https ca-certificates curl >/dev/null
+ sudo -E sh -c curl -fsSL "https://download.docker.com/linux/debian/gpg" | apt-key add -qq - >/dev/null
Warning: apt-key output should not be parsed (stdout is not a terminal)
+ sudo -E sh -c echo "deb [arch=arm64] https://download.docker.com/linux/debian buster stable" > /etc/apt/sources.list.d/docker.list
+ sudo -E sh -c apt-get update -qq >/dev/null
+ [ -n  ]
+ sudo -E sh -c apt-get install -y -qq --no-install-recommends docker-ce >/dev/null
+ sudo -E sh -c docker version
Client: Docker Engine - Community
 Version:           19.03.2
 API version:       1.40
 Go version:        go1.12.8
 Git commit:        6a30dfc
 Built:             Thu Aug 29 05:30:43 2019
 OS/Arch:           linux/arm64
 Experimental:      false

Server: Docker Engine - Community
 Engine:
  Version:          19.03.2
  API version:      1.40 (minimum version 1.12)
  Go version:       go1.12.8
  Git commit:       6a30dfc
  Built:            Thu Aug 29 05:29:15 2019
  OS/Arch:          linux/arm64
  Experimental:     false
 containerd:
  Version:          1.2.6
  GitCommit:        894b81a4b802e4eb2a91d1ce216b8817763c29fb
 runc:
  Version:          1.0.0-rc8
  GitCommit:        425e105d5a03fabd737a126ad93d62a9eeede87f
 docker-init:
  Version:          0.18.0
  GitCommit:        fec3683
If you would like to use Docker as a non-root user, you should now consider
adding your user to the "docker" group with something like:

  sudo usermod -aG docker pi

Remember that you will have to log out and back in for this to take effect!

WARNING: Adding a user to the "docker" group will grant the ability to run
         containers which can be used to obtain root privileges on the
         docker host.
         Refer to https://docs.docker.com/engine/security/security/#docker-daemon-attack-surface
         for more information.

busterではubuntuコンテナのmpdの挙動が怪しくなってなってしまいました。
debian busterコンテナに再設定、こちらは問題なく動作しています。

debian busterにはradikoの再生に必要なswftools(arm64)パッケージが見当たりません。
こちらも手っ取り早くubuntuコンテナ(/usr/bin/swfextract)からコピーして/usr/local/bin/swfextractに置いています。
またlibjpeg62-turboをインストールしています。

# cp swfextract /usr/local/bin
# apt install libjpeg62-turbo

Top