Player de música em Shell com Yad

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

[ Hits: 7.091 ]

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

Intervalo de tempo v.2 - Corrigido

POSTFIX AUTOMÁTICO COM MYSQL E IPTABLES - ATUALIZANDO QUOTA

Script de Autenticação simples do Speedy HOme

Detalhes técnicos do processador - CPUINFO

Verifica últimos arquivos criados


  

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