Player de música em Shell com Yad

Publicado por Raimundo Alves Portela (última atualização em 24/06/2023)

[ Hits: 7.591 ]

Homepage: http://portelanet.com

Download play_music_yad.sh

Download toca_musica_yad.sh (versão 2)




Mais um script para demonstrar as novas funcionalidades do Yad 0.16.x, dessa vez fiz um Tocador de musica em mp3 usando os Dialogs --form e --entry do Yad.

Para executá-lo você vai precisar do Mplayer e do Yad.

Para executar use:

./play_music_yad

Bom proveito.

  



Versões atualizadas deste script

Versão 2 - Enviado por Mario da Silva Santos em 22/06/2023

Changelog: As mudanças significativas foram:
1-trocar o Mplayer por Deadbeef (para funcionar no Puppy Linux Fossa 9.5)
2-e o find $HOME para find . e executar de dentro do diretorio com as musicas.
O Deadbeef toca do caminho completo ou de playlist .dbpl ou m3u
.dbpl eh o padrão, o próprio programa cria a lista no /root/.config/deadbeef
OBS: no Puppy Linux o usuário padrão eh o root
\o/'s a todos

Download toca_musica_yad.sh


Esconder código-fonte

#!/bin/bash
# Desenvolvido por Raimundo Portela - rai3mb@gmail.com
# Desenvolvido para demonstrar novas funcionalidades do Yad
#------------------------------------------------------------------------------------------------------------------------------------
function barra() {
   tail -f $0 | yad --progress --title='Procurando...' --progress-text="buscando... $VALOR" --no-buttons --auto-close --undecorated
}
   
function _buscar() {
   VALOR=$( \
      yad --entry --title='Buscar músicas' --on-top --center \
         --entry-label="Buscar músicas sobre:" --entry-text="Digite aqui"  \
         --ricon="gtk-clear" --ricon-action="echo " \
         --button='Cancelar':1 --button='Buscar':0
      )

   [ -z "$VALOR" ] && _main
   
   echo -n > "$LISTA"
   barra & find -L "$HOME"/Music "$HOME"/Musicas "$HOME"/Músicas -iname "*${VALOR}*.mp3" -exec echo "{}" >> "$LISTA" \; 2>/dev/null
   
   mv "$LISTA" "/tmp/temp.txt"
   echo -n > "$LISTA"
   
   while read MUSICA
   do
      echo "$MUSICA : \"${MUSICA##/*/}\"" >> "$LISTA"
   done < "/tmp/temp.txt"

   killall tail
   _main
}

function _tocar() {
   MUSICA=$(cat "$LISTA" | grep "$1" | cut -d: -f1)
   mplayer $MUSICA
}

function _main() {
   if [ ! -f "$LISTA" ]; then
      export LISTA='/tmp/lista_musicas.list'
      _buscar
   fi

   if yad --form --title='Player Musicas Shell Yad' --columns=3 --center \
   --field='Musica':CB "$(cat $LISTA | cut -d':' -f2 | tr '\n' '!' )" \
   --field='Tocar':BTN "./music_play.sh tocar %1" --field='Parar':BTN "killall -9 mplayer" --button='Fechar':1 --button='Buscar outro':0
   then
      _buscar
   fi
   killall mplayer
   exit
}

case "$1" in
'buscar') shift; _buscar $* ;;
'tocar') shift; _tocar $* ;;
*) _main ;;
esac

Scripts recomendados

Baixar flatpak para um arquivo local

Download do banco de dados NCBI NR (DNA)

VNC Server Debian

Gerência do tempo de inicialização das MFs de uma nuvem privada com o OpenNebula

Libera conectividade social em rede com squid


  

Comentários
[1] Comentário enviado por mario-bugre.vol em 21/06/2023 - 19:54h


falta o script music_play.sh
eu uso Puppy_Linux_Fossa_9.5 e adaptei o script play_music_yad.sh para a distro que EU uso
trocado o 'mplayer' por 'deadbeef' e trocando o 'music_play.sh tocar' por 'deadbeef $LISTA'
mas ainda nao funfou, da erro de abrir 'tocar'

[2] Comentário enviado por mario-bugre.vol em 22/06/2023 - 10:58h

resolvi o problema do 'deadbeef', que 'toca' lista .m3u ou caminho completo
eu optei por caminho completo, pois o script so lista musicas com uma mesma palavra no nome
deadbeef $(cat $LISTA | cut -d':' -f2)

[3] Comentário enviado por mario-bugre.vol em 22/06/2023 - 11:01h

Aqui o script com as modificacoes e comentarios

#!/bin/bash
# fonte: https://www.vivaolinux.com.br/script/Player-de-musica-em-Shell-com-Yad
# criado por: Raimundo Alves Portela (última atualização em 02/01/2012)
# modificado por: Mario Bugre em 22.06.2023
# um problema deste script eh que so busca musicas pelo nome e nao pela extencao
# se as musicas tiverem a mesma palavra, tipo nome do artista, ou genero, faz uma lista, se nao so mostra uma musica
# use 'function' = função: para criar comandos usados apenas neste script, nao no sistema todo

function barra() { # a chave '{' abre um bloco de comandos,
tail -f $0 | yad --progress --title='Procurando...' --progress-text="buscando $VALOR" --no-buttons --auto-close --undecorated
} # fecha o bloco de comandos

# a função 'barra' eh so 'perfumaria' uma barra de progresso que no Puppy Linux dura menos de meio segundo
# tail -f , --follow[={name|descriptor} = saída de dados anexados à medida que o arquivo cresce; um argumento de opção ausente significa 'descritor'
# $VALOR sera a palavra digitada pelo usuario e a cada musica encontrada com a palavra($VALOR) o arquivo /tmp/temp.txt crescera

function _buscar() { # neste caso bloco com mais de 10 comandos, yad test=[] echo função_barra find mv echo while=laço(do,done) killall _main
VALOR=$( \
yad --entry --title='Buscar músicas' --on-top --center \
--entry-label="Buscar músicas sobre:" --entry-text="Digite aqui" \
--ricon="gtk-clear" --ricon-action="echo " \
--button='Cancelar':1 --button='Buscar':0
)
# a opcao --on-top do yad coloca o yad na frente de outras janelas
[ -z "$VALOR" ] && _main
# comando test([ ]), se $VALOR = zero execute a função _main(a quarta função)
echo -n > "$LISTA" # apaga todas as linhas do arquivo /tmp/lista_musicas.list (caso ele ja exista)
# echo -n = um echo sem quebra de linha, echo -n > $LISTA = joga uma linha vazia na variavel $LISTA , que aponta para o arquvo /tmp/lista_musicas.list
barra & find -L "$HOME" -iname "*${VALOR}*.mp3" -exec echo "{}" >> "$LISTA" \; 2>/dev/null
# o comando find -L /mnt/sdj1/todas-musicas -iname "*${VALOR}*.mp3" no terminal funfa aqui no script nao funfa
# executa a função 'barra' e o comando 'find -L(arquivos ou links)' procura ignorando Maiusculas(iname) nos diretorios $HOME(/root) /root/Music e /root/Musicas por musicas com a 'palavra($VALOR)'
# com extencao .mp3, e joga no arquivo $LISTA(/tmp/lista_musicas.list) em caso de erro joga no limbo: 2>/dev/null(saida 2=erro redireciona para dispositivo nulo '/dev/null')
mv "$LISTA" "/tmp/temp.txt"
echo -n > "$LISTA"

while read MUSICA
do
echo "$MUSICA : \"${MUSICA##/*/}\"" >> "$LISTA"
done < "/tmp/temp.txt"

killall tail # mata o processo do 'tail' da função 'barra'
_main # volta a executar a função _main
}
function _tocar() {
MUSICA=$(cat "$LISTA" | grep "$1" | cut -d: -f1)
deadbeef $(cat $LISTA | cut -d':' -f2)
}
# o deadbeef executa as musicas de um diretrorio, ou caminho absoluto de um arquivo
function _main() { # se nao tiver palavra para buscar, volta a funcao _buscar, se tiver executa o yad Player Musicas
if [ ! -f "$LISTA" ]; then # se não existir o arquivo lista, então
export LISTA='/tmp/lista_musicas.list' # exporta(deixar utilizavel ao sistema) a variavel LISTA, criando o arquvo /tmp/lista_musicas.list
_buscar # volta a executar a função _buscar (agora com o arquivo criado)
fi
# yad 'Player Musica'
if yad --form --title='Player Musicas Shell Yad' --columns=3 --center \
--on-top \
--field='Musica':CB "$(cat $LISTA | cut -d':' -f2 | tr '\n' '!' )" \
--field='Tocar':BTN "deadbeef $(cat $LISTA | cut -d':' -f2)" \
--field='Parar':BTN "killall -9 deadbeef" \
--button='Fechar':1 --button='Buscar outro':0
then
_buscar
fi
killall deadbeef
exit
}

case "$1" in
'buscar') shift; _buscar $* ;;
'tocar') shift; _tocar $* ;;
*) _main ;;
esac

[4] Comentário enviado por mario-bugre.vol em 22/06/2023 - 11:17h

fiz outra alteracao: tenho um cartao de memoria de 16GB so com musicas .mp3
joguei o script 'toca-musica-yad.sh dentro do cartao e
alterei o 'find' para find . -iname "*${VALOR}*.mp3"
entao o find acha as musicas coloca num arquivo .dbpl (no /root) e toca desta playlist
veja a saida do deadbeef
INFO: from file /root/.config/deadbeef/playlists/1.dbpl


Contribuir com comentário




Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts