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の音量を大きくするとマスターボリュームも同時に大きくなります。