Estou procurando uma maneira de começar a reproduzir um arquivo de áudio (mp3, m4a) como uma tarefa em segundo plano de um shell e, em seguida, poder fazer coisas como pausar/avançar rapidamente mais tarde.
Isso é possível usando as opções de linha de comando internas:
$ play audio.mp3 &
$ play --pause
Ou por meio do ID do processo do jogador?
$ play audio.mp3 & echo $! > pid
$ control_process $(cat pid) --signal pause
(Os exemplos são apenas ilustrativos.)
Se usar o VLC player for uma opção, você pode controlar um processo VLC em execução por meio de aplicativos remotos (GUI) ou CLI usando chamadas dbus.
Por exemplo - supondo que o qdbus esteja instalado - alterne reproduzir/pausar na música atualmente reproduzida:
ou vá para a próxima peça na playlist:
Veja todos os comandos disponíveis:
Veja também este tópico https://stackoverflow.com/questions/14256193/linux-control-a-running-vlc-process-through-command-line
Você pode querer olhar para MPD , pois ele pode fazer praticamente tudo o que você quer fazer (controle remoto, adicionar novas faixas, etc). Em vez de ser executado como um processo em segundo plano em seu shell, ele é executado como um serviço do sistema, o que significa que pode ser usado facilmente em várias sessões e logins. Ele ainda tem a capacidade de permitir o controle remoto de outro sistema (é amplamente utilizado para aparelhos do tipo jukebox controlados por rede).
Há também vários front-ends interessantes para ele, incluindo aqueles que você pode usar no console.
Não existe uma solução genérica, mas existem pelo menos 2 jogadores que podem fazer isso.
O primeiro é
mplayer
junto comnamed pipes
.Primeiro, crie
/tmp/mplayer.fifo
um pipe nomeado:Inicie
mplayer
e aponte para/tmp/mplayer.fifo
:Agora você pode pausar e retomar a reprodução escrevendo para
/tmp/mplayer.fifo
:Subsequente
pause
retomará a reprodução:Você também pode fazer outras coisas, por exemplo, avançar:
ou retroceder a reprodução:
A segunda é
mocp
. Iniciar a reprodução:Pausar/retomar a reprodução:
A implementação desse controle normalmente seria dentro do próprio programa, mas uma forma muito comum de realizar esse tipo de interface é um pipe nomeado . Contanto que esteja no mesmo host e você não esteja abrindo soquetes para controle de rede. Você pode criar seu próprio programa para usar o pipe nomeado e executar os comandos necessários, matar o processo, etc. Se você quiser ver um pipe nomeado em ação, sugiro instalar o player CLI para Pandora ; pianobar . Ele o usa para aceitar comandos como no seu exemplo.