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

先日の台風19号ではサイマルラジオ局もいろいろ対応(活躍)していましたね。対応はラジオ局(地域)によってマチマチですがローカル局ならではの報道と思います。

当サイトのサイマルラジオもだいぶ設定ができてきました。
CSRA(ListenRadio)はかなり安定して接続するのですがJCBA(musicbird)は時間帯などで接続タイムもバラツキがあるようです。使い始めて2回ほどサーバー停止(不安定)を聴激しています。
ラジオ局による音量差をカバーするためボリュームリストを作成して音量値を設定しているのですが確実にオートボリューム設定が適用するようループ処理を追加してみました。
音量ボタン(手動)が効いてボリュームリストがある程度できているものとします。

プログラム

~/bin/killall.sh は適度にsleepを入れておきます。(設定値は適宜変更)

#!/bin/sh
pactl -- set-sink-volume 0 20% # pulseaudioを利用している場合
sleep 0.2
mpc pause 1>/dev/null 2>/dev/null
sleep 0.2
mpc volume 20 1>/dev/null 2>/dev/null
sleep 0.2
mpc clear 1>/dev/null 2>/dev/null
killall -q mpv
killall -q mplayer
killall -q ffplay

~/bin/simul.py
当サイトの環境での設定例です。

# ListenRadio time.sleep(0.2)
# NHK mms time.sleep(1)
# JCBA time.sleep(3)


音量の適用は再生開始とほぼ同じが自然ですね。
ListenRadio NHK mmsは普段使っていて適用される確率の高い値を設定しています。
JCBAは3秒で接続することは少ないのですが最短の値を設定しておいて後述のループ処理で適用します。

~/bin/simul-vol.py
追記したのはimport timeと# loop以下

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

# 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()

# loop
print("Input " + vol_level) # input vol
if vol_level == 'n/':
    i = 0
    while vol_level == 'n/':
        time.sleep(1)
        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()
        i += 1
        if i >= 5: # max retry
            break
        print(i)

実行
ターミナルからsimul.pyを実行します。

$ ~/bin/simul.py &


ListenRadio
volume: n/a
time.sleep(0.2) simul-vol.py
Input 20 simul-vol.py print(“Input ” + vol_level)で表示
volume: 20% default volume設定
volume: 26% ボリュームリスト適用


JCBA
volume: n/a
time.sleep(3) simul-vol.py
Input n/ ループ処理開始
1 – 4 4秒後にmpc volume取得 再生開始
volume: 20% default volume設定
volume: 35% ボリュームリスト適用

simul-vol.pyがvolume: n/aで受け取ればループ処理を実行してそれ以外はパスして次の処理を実行します。(ListenRadio NHK mmsも同様)
retry回数を指定しないとラジオ局が休止しているときは無限ループ、制御不能になります。
simul.pyのtime.sleep(3)を長めに取るとretry回数も減ります。
各設定値は環境に合わせて変更します。
ラジオ局によっては放送時間帯による音量差が大きいところがあります。メインの独自番組を基準に合わせるのがいいと思います。
音量が揃ってくるととても使いやすくなってきます。
1台設定しておくと防災やそれ以外でも充分使えます。