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
答え2
これが私が使ったスクリプトです。--volume
まだ安定版ではこのオプションは使用できないため、pactl
コマンドを使用しました。
DeaDBeeFのカウントダウン睡眠タイマーです。私のAudaciusスクリプトは、1つの機能を除くすべての機能をサポートしています。彼らは:
- GUI(kdialog)でスリープカウントダウンタイマー値を選択する
- X分後のオーディオ再生の一時停止
- GUI(またはデスクトップ通知を介して)に残り時間を表示する
- GUIに現在のボリュームレベルを表示する
- 最後の10分間、徐々に音量を下げます。
- 再生が一時停止したら、音量を初期値にリセットしてください。
- 再生を中断せずにカウントダウンタイマーを新しい値にリセットできます。
- 再生を中断せずにカウントダウンタイマーをキャンセルできます。
- カウントダウンタイマーGUIで手動で再生を停止する
- 停止した場合は、カウントダウンタイマーGUIで再生を再開してください。
パスワード:
#!/bin/bash
echo "DeaDBeeF control version 0.9"
function_pid=0
echo "true" > /dev/shm/allow_resetting_pactl_volume
function get_default_sink_name() {
pacmd stat | awk -F": " '/^Default sink name: /{print $2}'
}
function get_default_sink_volume() {
pacmd list-sinks | awk '/^\s+name: /{indefault = $2 == "<'$(get_default_sink_name)'>"} /^\s+volume: / && indefault {print $5; exit}'
}
function set_default_sink_volume() {
pactl set-sink-volume $(get_default_sink_name) "$1"
}
#source: https://unix.stackexchange.com/a/251920/15010
function music_sleep(){
countdown=$(($1*60-1))
datestop=$((`date +%s` + $countdown));
echo "pausing DeaDBeeF 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";
#echo "$datestr";
kdialog --passivepopup "DeaDBeeF will pause in: $datestr" 3
if [ $(</dev/shm/allow_resetting_pactl_volume) == "true" ]; then
countdown_saved_pactl_volume=$(get_default_sink_volume)
echo $countdown_saved_pactl_volume > /dev/shm/countdown_saved_pactl_volume
fi
if [ `date +%s` -ge "$voldown" ]; then
echo "false" > /dev/shm/allow_resetting_pactl_volume
#reduce volume in 40 steps of 2 = 80% reduction (starting at 100) over 10 min
set_default_sink_volume "-2%"
currvol=$(get_default_sink_volume)
echo -ne "\t\tvolume = $currvol\r"
#echo "volume = $currvol"
kdialog --passivepopup "volume = $currvol" 3
fi
sleep 15
done
deadbeef --pause
echo "DeaDBeeF paused at $(date)"
countdown_saved_pactl_volume=$(</dev/shm/countdown_saved_pactl_volume)
set_default_sink_volume "$countdown_saved_pactl_volume"
echo "true" > /dev/shm/allow_resetting_pactl_volume
}
countdown_saved_pactl_volume=$(get_default_sink_volume)
echo $countdown_saved_pactl_volume > /dev/shm/countdown_saved_pactl_volume
echo "initial volume is: $countdown_saved_pactl_volume"
while true; do
choice=$(kdialog --combobox " DeaDBeeF Sleep Timer: " "cancel" "stop" "5" "10" "15" "20" "25" "30" "35" "45" "45" "50" "60" "90" "120" "180" "360" "480" --default "30");
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" 5
elif [ "$choice" == stop ]; then
deadbeef --stop
echo "DeaDBeeF playback stopped at $(date)"
kdialog --passivepopup "DeaDBeeF playback stopped" 5
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
isplaying=$(deadbeef --nowplaying-tf "%isplaying%")
ispaused=$(deadbeef --nowplaying-tf "%ispaused%")
echo "isplaying=$isplaying, ispaused=$ispaused"
if [[ "$isplaying" -ne 1 || "$ispaused" -eq 1 ]]; then deadbeef --play-pause; echo "playback started"; fi
music_sleep "$choice" &
function_pid=$!
echo "function_pid=$function_pid"
fi
countdown_saved_pactl_volume=$(</dev/shm/countdown_saved_pactl_volume)
set_default_sink_volume "$countdown_saved_pactl_volume"
echo "reset volume to: $countdown_saved_pactl_volume"
allow_reset_saved_volume="true"
echo "true" > /dev/shm/allow_resetting_pactl_volume
elif [ "$retval" -eq 1 ]; then
echo "exiting DeaDBeeFctl"
break
else
kdialog --error "ERROR";
fi;
done
rm /dev/shm/allow_resetting_pactl_volume
rm /dev/shm/countdown_saved_pactl_volume