Estou trabalhando em um projeto no qual preciso que mplayer
execute várias instâncias para criar mixagem em tempo real de música sobre música a partir de dois arquivos. Então, a música está tocando constantemente em 90% do volume (representado como "M" na próxima linha do tempo) e em certos momentos nós abaixamos o volume ("m") para colocar a voz ("V") sobre a música, depois que vamos devolver a música para 90% quando a amostra de voz terminar.
LINHA DO TEMPO (minutos)
0===========1===========2===========3===========4===========...
_____________VVVVVVVV__________VVVVVVVVVVVVVV__________VVVVV...
MMMMMMMMMMMMMmmmmmmmmMMMMMMMMMMmmmmmmmmmmmmmmMMMMMMMMMMmmmmm...
Tudo está funcionando muito bem até agora. Mas, por algum motivo, muitas vezes a segunda mplayer
instance finaliza a reprodução de voice-off, mas o processo ainda permanece ativo e nunca terminará.
A resposta fornecida aqui: Mate todos os processos, exceto o um executando o script não está funcionando para este caso.
Eu também tentei a resposta aceita sobre esta questão: link mas isso matará TODAS as instâncias de mplayer
e eu preciso manter o primeiro tocando constantemente música.
Nesta página link eles reproduzem uma maneira de matar todos os processos iniciados por um aplicativo. O que é realmente útil para este caso, mas isso também matará todas as instâncias de mplayer
.
Solução esperada
Estou salvando o PID do music player com:
mplayer -shuffle -playlist playlist.m3u </dev/null >/dev/null 2>&1 & echo $! > player.pid
Com esse número PID, eu gostaria de usar a solução da última página dada para matar todos os processos EXCETO aquele salvo no arquivo player.pid. Então, colocando cat player.pid
no meio de
kill -9 'ps -ef | grep oraxpo | grep -v grep | awk '{print $2}'
pode fazer o truque.
O problema é que não sei onde colocá-lo. Ou se existe uma maneira diferente / melhor de fazê-lo?
Outra ideia é matar os últimos processos um de cada vez, mas parando no primeiro.
Qualquer ideia é apreciada.
Obrigado antecipadamente.