Linuxユニバーサルオーディオスリープカウントダウンタイマー

Linuxユニバーサルオーディオスリープカウントダウンタイマー

Bashスクリプトを作成しました。勇敢なX分間再生を一時停止します(過去10分間徐々に音量を下げます)。このスクリプトは、Audaciusを使用するときの私の要件に非常に適しています。しかし、今は次のように切り替えたいと思います。死んだ豆

2つのオプションがありました。 DeaDBeeFと連携するように既存のスクリプトを変更するか、ほぼすべてのLinuxまたはKDEオーディオプレーヤーで動作する汎用的な方法を作成します。どちらの方法でも助けを求めています。

ただし、Audaciusと同じように進めることができるDeaDBeeFに関するドキュメントは見つかりません。文書が見つかったら(そしてDeaDBeeFが同等のコマンドを提供している場合)、既存のスクリプトを簡単に変更できます。あるいは、さらに助けが必要な場合は、一般的なスクリプトを実装することもできます。

私は開発者ではないので、私が好む実装は単純なbashスクリプトです(ただし、同じように単純な他の実装オプションも開いていますが)。

前述のように、私はDeaDBeeFで動作するか、通常の方法で動作するようにbashスクリプトを変更するのに役立ちます。これは私のスクリプトです。

#!/bin/bash

function_pid=0

function musicsleep(){
    countdown=$(($1*60-1))
    datestop=$((`date +%s` + $countdown));
    echo "pausing music in $1 minutes..."

    #begin reducing sound volume 10 minutes (600 sec) from end
    voldown=$(($datestop - 600))

    while [ "$datestop" -ge `date +%s` ]; do
        datestr=$(printf "%s" $(date -u --date @$(($datestop + 1 - `date +%s`)) +%H:%M:%S))
        echo -ne "$datestr\r";
        kdialog --passivepopup "music will pause in: $datestr" 14
        if [ `date +%s` -ge "$voldown" ]; then
            currvol=$(audtool get-volume)
            #reduce volume in 40 steps of 2 = 80% reduction (starting at 100) over 10 min
            newvol=$(($currvol - 2))
            audtool set-volume $newvol
            echo -ne "\t\tvolume = $newvol\r"
            kdialog --passivepopup "volume = $newvol" 14
        fi
        sleep 15
    done
    audtool playback-pause
    echo "music paused at $(date)"
    audtool set-volume 100
}

while true; do

    choice=$(kdialog --combobox "Music Sleep Time:" "cancel" "stop" "5" "10" "15" "20" "25" "30" "35" "45" "45" "50" "60" "90" "120" "180" "360" "480" --default "25");
    retval="$?"
    if [ "$retval" -eq 0 ]; then
            if [ $function_pid -ne 0 ]; then
                kill $function_pid
                function_pid=0
                echo "countdown process terminated..."
            fi

            if [ "$choice" == cancel ]; then
                echo "countdown canceled by user at $(date)"
                kdialog --passivepopup "countdown canceled" 10
            elif [ "$choice" == stop ]; then
                audtool playback-stop
                echo "music playback stopped at $(date)"
                kdialog --passivepopup "music playback stopped" 10
            else
                echo "countdown (re)set by user at $(date)"
                kdialog --passivepopup "countdown started" 5
                audresult=$(audtool playlist-shuffle-status)
                if [ "$audresult" == "on" ]; then audtool playlist-shuffle-toggle; fi
                audtool playback-playing
                isplaying=$?
                audtool playback-paused
                ispaused=$?
                audtool playback-stopped
                isstopped=$?
                echo "isplaying=$isplaying, ispaused=$ispaused, isstopped=$isstopped"
                if [[ "$isstopped" -eq 0 || "$ispaused" -eq 0 ]]; then audtool playback-play; echo "playback started"; fi
                musicsleep "$choice" &
                function_pid=$!
                echo "function_pid=$function_pid"
            fi
            audtool set-volume 100

    elif [ "$retval" -eq 1 ]; then
            echo "exiting musicsleep"
            #audtool set-volume 100
            break
    else
            kdialog --error "ERROR";
    fi;

done

このスクリプトに実装されている基本機能は次のとおりです。

  • GUIでスリープカウントダウンタイマー値を選択する
  • カウントダウン開始時にシャッフル(シャッフル)再生を無効にする
  • X分後のオーディオ再生の一時停止
  • GUI(またはデスクトップ通知を介して)に残り時間を表示する
  • GUIに現在のボリュームレベルを表示する
  • 最後の10分間、徐々に音量を下げます。
  • 再生が一時停止したら、音量を初期値にリセットしてください。
  • 再生を中断せずにカウントダウンタイマーを新しい値にリセットできます。
  • 再生を中断せずにカウントダウンタイマーをキャンセルできます。
  • カウントダウンタイマーGUIで手動で再生を停止する

いくつかの質問は次のとおりです。

DeadDBeeFに対応するコマンドはありますか?

それでは、対応するDeaDBeeFコマンドのドキュメントはどこにありますか?

DeaDBeeFに既に慣れている人のために、スクリプトの既存のAudaciusコマンドをDeaDBeeFコマンドに簡単に置き換えることはできますか?それとも、スクリプトを完全に書き直すのに十分な違いがありますか?

上記の機能を備えた汎用カウントダウンタイマーを実装するのが比較的簡単な場合は、誰でも案内できますか?ボリューム部分は実装しやすいと思います。

pactl set-sink-volume "$MY_SINK" "$VOLUME_CHANGE"  

源泉

再生を一時停止するときに私が知っている限り、次のコマンドは私のスクリプトには適していません。

pactl suspend-sink "$MY_SINK"
pactl suspend-sink "$MY_SINK" FALSE

上記の方法は、オーディオの再生を一時停止するだけでなく、すべてのアプリケーションのすべてのサウンドを無効にし、他の潜在的な副作用があるようです。

できるだけ遠くに見るここ、pactlを使用して(すべてのオーディオプレーヤーで)再生と一時停止を制御するのは難しいようです。明らかに簡単な方法があります。 KDEに関わるものなら大丈夫です。

ベストアンサー1

デッドビーフソースを見るとメインプログラムこのhelp()機能は、ユーザーに十分なオプションをリストします。

--pause              Pause playback
--nowplaying FMT     Print formatted track name to stdout
--nowplaying-tf FMT  Print formatted track name to stdout
--volume [NUM]       Print or set deadbeef volume level

おすすめ記事