Eu quero pausar a reprodução depois que os fones de ouvido foram desconectados e, em seguida, retomar depois que eles foram conectados novamente.
Minha solução atual usa ACPI para detectar plug / unplug, como mostrado aqui . Para reproduzir / pausar a reprodução, eu uso xdotool key XF86AudioPlay
.
Esta solução funciona bem no caso básico:
No entanto, eu não quero retomar a reprodução se ela não estiver ativa quando os fones de ouvido estiverem desconectados.
Imagine este cenário:
O último ponto é onde está o problema - a reprodução continuaria depois que os fones de ouvido fossem conectados novamente, embora não estivessem ativos no momento em que foram desconectados.
Além disso, xdotool key XF86AudioPlay
simplesmente alterna a reprodução, enquanto xdotool key XF86AudioPause
não faz nada. Isso torna as coisas ainda piores:
Então, o que preciso é que detecte a reprodução / pausa / interrompa eventos , bem como conecte / desconecte eventos, para poder executar corretamente reagir em todos os cenários possíveis.
Esta máquina de estado descreve a operação desejada:
A única ideia que me veio à mente é voltar a ligar os atalhos de teclado para reproduzir / pausar / parar para adicionar a lógica da máquina de estado. Isso tem a desvantagem de que a reprodução sempre deve ser controlada usando esses atalhos de teclado, em vez de, por exemplo. Botões Rhythmbox, o que é um pouco impraticável.
Além disso, se eu fechar o Rhythmbox enquanto estiver jogando, a máquina de estado permanecerá no estado playing
. É claro que eu poderia ter um 'daemon' que esperaria até o Rhythmbox ser fechado e então definir o estado para stopped
. Mas e se não for o Rhythmbox que toca a música, e se for por exemplo o VLC, etc.? Essa abordagem é feia e não confiável, então eu gostaria de evitar isso.
Minha pergunta: Como detectar quando a reprodução de mídia foi pausada / retomada / interrompida?