Eu criei um script bash para o Audacious que pausa a reprodução em X minutos (e isso reduz gradualmente o volume nos últimos 10 minutos ). Este script atendeu bem minhas necessidades enquanto usava o Audacious. No entanto, agora estou mudando para DeaDBeeF .
Eu tenho duas opções: modificar meu script existente para trabalhar com o DeaDBeeF ou criar uma abordagem genérica que funcionará com quase todos os reprodutores de áudio do Linux ou do KDE. Estou procurando ajuda com qualquer abordagem.
No entanto, não consegui localizar a documentação do DeaDBeeF que me permite prosseguir da maneira que eu consegui com o Audacious. Se eu pudesse encontrar a documentação (e se o DeaDBeeF oferecesse comandos equivalentes) eu poderia facilmente modificar meu script existente. Como alternativa, e possivelmente com mais ajuda, eu poderia implementar um script genérico.
Eu não sou um desenvolvedor, então minha implementação preferida é um script bash simples (embora eu esteja aberto a outras opções de implementação igualmente simples).
Como mencionado, estou procurando ajuda para modificar meu script bash para trabalhar com o DeaDBeeF ou para trabalhar de maneira genérica. Aqui está meu script:
#!/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
Os recursos essenciais implementados neste script são:
- Escolha um valor do temporizador de contagem regressiva para dormir a partir de uma GUI
- Desativar a reprodução aleatória (aleatória) quando o contador regressivo começar
- Pausar a reprodução de áudio em X minutos
- Mostrar tempo restante na GUI (ou por meio de notificações na área de trabalho)
- Mostrar o nível de volume atual na GUI
- Reduza gradualmente o volume nos últimos 10 minutos
- Após a pausa ser pausada, redefina o nível do volume para o valor inicial
- Permitir que o timer de contagem regressiva seja redefinido para um novo valor sem interromper a reprodução
- Permitir que o temporizador de contagem regressiva seja cancelado sem interromper a reprodução
- Pare a reprodução manualmente a partir da GUI do cronômetro de contagem regressiva
Algumas perguntas são:
O DeaDBeeF tem comandos equivalentes?
Se sim, onde está a documentação para os comandos DeaDBeeF equivalentes?
Para quem já está familiarizado com o DeaDBeeF, posso esperar simplesmente substituir os comandos DeaDBeeF pelos meus comandos Audacious existentes no meu script? Ou as diferenças são grandes o suficiente para exigir uma reescrita completa do roteiro?
Se um temporizador de contagem regressiva genérico com a funcionalidade acima será relativamente simples de implementar, alguém quer me guiar? Acho que a parte do volume será fácil de implementar:
pactl set-sink-volume "$MY_SINK" "$VOLUME_CHANGE"
fonte
Quando se trata de pausar a reprodução, até onde eu sei, os seguintes comandos não correspondem aos requisitos do meu script:
pactl suspend-sink "$MY_SINK"
pactl suspend-sink "$MY_SINK" FALSE
A abordagem acima não pausa apenas o áudio de reprodução, ele desativa todo o som de todos os aplicativos e parece ter outros efeitos colaterais em potencial.
Do que eu vi aqui , controlando a reprodução e pausando genericamente (em qualquer player de áudio) com aparência de pactl difícil. Certamente deve haver um caminho mais simples. Estou bem, se é específico do KDE.