+ Responder ao Tópico



  1. #1

    Lightbulb Listagem aleatoria

    Olá pessoal,

    Tenho uma pasta com 600 musicas mp3, dai eu queria gerar uma lista com 20 musicas porem essa lista deve ser aleatoria

    Atualmente uso assim
    find /var/shoutcast/autodj/musicas/ -type f -name "*.mp3" > playlist.lst

    esse comando ele coloca todas as musicas na playlist, mas como expliquei, quero apenas 20 musicas, e essas musicas de forma aleatoria.

    Ja googlei e nada

    Abraços
    Carlos Henrique

  2. #2

    Padrão

    o que eu entendo é que vc quer, aleatóriamente, tocar 20 musicas de um universo bem maior. Bem, pode não responder sua questão, mas pode ajudar enquanto vc não encontra a resposta correta:

    use o mpg123 ou o mpg321 (apt-get, etc.. argh, cusp, cusp..)

    em console:
    mpg(???) -z /path/*mp3

    isso NÃO vai limitar a 20 musicas, mas nada que um ctrl-C não resolva.

  3. #3

    Padrão

    Eu quero gerar essa lista seria para um sistema de AUTODJ para o shoutcast.

    O que eu preciso é colocar uma sequencia de musica aleatoria em arquivo "playlist.lst" limitado a "XX" musicas. Exemplo 20 musicas

    Abraços
    Carlos Henrique

  4. #4

    Padrão

    Eae cara, fiz esse script em python que pode resolver seu problema... Só tenha cuidado se sua lista de músicas for muito grande, ele vai carregar toda ela na memória! Cópie e salve em alguma arquivo qualquer, tipo NOME. Então você torna executável e executa:

    $ chmod +x NOME
    $ ./NOME 20 arquivo-entrada arquivo-saída

    20 pode ser um valor menor ou igual ao número de músicas do seu arquivo. arquivo-entrada, obviamente, é o arquivo ande estarão listadas as músicas. arquivo-saida é o arquivo para onde irão as musicas selecionadas.

    Ai vai o script!

    Código :
    #!/usr/bin/python
     
    # Copyright (c) 2009 Pedro Arthur Duarte
    # Este código está sob a licensa GPL e não prove nenhum tipo de garantia!
    # veja http://www.gnu.org/licenses/gpl.html para mais detalhes...
     
    from sys import exit;
    from sys import argv;
    from random import sample;
     
    if len(argv) < 4:
        print argv[0] + " QTD ENTRADA SAIDA"
        exit()
     
    fin = open (argv[2],'r')
    fout = open (argv[3],'w')
     
    l = []
     
    [l.append(s) for s in fin]
    [fout.write (i) for i in sample(l, int(argv[1]))]

  5. #5

    Padrão

    Uma boa sugestão seria criar um "banco de dados" de musicas e depois só sortear 20 aleatoriamente.

    Como já se falou em python esse DB pode ser feito com pickle, shelve ou pysqlite que são bem simples. Sempre que adicionar novas músicas só fazer um update. Métodos semelhantes são utilizados em players famosos por ai no mundo Linux, como o exaile.

    Agora vem a questão mais interessante. Você tem uma interface gráfica nesse Linux?! Porque não utilzia um player (Exaile, Amarok, Rhythmbox, Listen...)?? Geralmente eles tem a opção de criar listas aleatórias dinâmicas, depois é só exportar!

    Se sua intenção é só um arquivo txt mesmo ai é mehor o script. Se gostou da ideia do DB é só falar que dou um help.

    Até mais...

  6. #6

    Padrão

    Citação Postado originalmente por Magnun Ver Post
    Uma boa sugestão seria criar um "banco de dados" de musicas e depois só sortear 20 aleatoriamente.

    Como já se falou em python esse DB pode ser feito com pickle, shelve ou pysqlite que são bem simples. Sempre que adicionar novas músicas só fazer um update. Métodos semelhantes são utilizados em players famosos por ai no mundo Linux, como o exaile.

    Agora vem a questão mais interessante. Você tem uma interface gráfica nesse Linux?! Porque não utilzia um player (Exaile, Amarok, Rhythmbox, Listen...)?? Geralmente eles tem a opção de criar listas aleatórias dinâmicas, depois é só exportar!

    Se sua intenção é só um arquivo txt mesmo ai é mehor o script. Se gostou da ideia do DB é só falar que dou um help.

    Até mais...
    Olá

    Pois é, mas meu ambiente nao é grafico.

    A minha ideia é a cada hora um script fazer um sorteio de 20 musicas, essas musicas serao executadas pelo SC_trans (AUTO_DJ do shoutcast).

    Sua ideia sobre banco de dados é muito boa, pois posso até fazer filtragem, se eu organizar o cadastro das mesma. Mas até hoje só trabalhei com Mysql, se puderes apenas me auxiliar me enviando um tutorial, ficaria muito grato

    Att
    Carlos Henrique

  7. #7

    Padrão

    Ok, vamos trabalhar...

    Primeiro vamos ver uma coisas:
    1. Como estão armazenadas as músicas?? Espalhadas em várias pastas ou tem uma "pasta central"??
    2. Quanto a possibilidade de repetir músicas. Você quer evitar que as músicas se repitam na mesma hora, dia... ou isso não importa?
    3. Formato do arquivo playlist. Ele deve conter o caminho completo?
    4. Sua ideia é gerar 20 musicas aleatórias por hora. Durante todo o dia??
    5. Se sim, por que não gerar 480 músicas aleatórias por dia (20*24) e a cada hora pegar as 20 primeiras da lista? Isso facilita o controle de repetição de músicas por dia.

    Acho que é basicamente isso!

  8. #8

    Padrão

    Citação Postado originalmente por Magnun Ver Post
    1. Como estão armazenadas as músicas?? Espalhadas em várias pastas ou tem uma "pasta central"??
    em uma unica pasta, com varias subpasta
    Ex:
    /var/www/bigradio/musicas/
    /var/www/bigradio/musicas/Sucesso
    /var/www/bigradio/musicas/Flash_back_nacional
    /var/www/bigradio/musicas/Flash_back_internacional
    /var/www/bigradio/musicas/Pop_rock
    /var/www/bigradio/musicas/Variadas

    As musicas estão separadas em lista de texto

    sucesso.txt
    FlashBack_nacional.txt
    FlashBack_internacional.txt
    Pop_rock.txt
    Variadas.txt

    2. Quanto a possibilidade de repetir músicas. Você quer evitar que as músicas se repitam na mesma hora, dia... ou isso não importa?
    Desde que não se repita no mesmo bloco das 20

    3. Formato do arquivo playlist. Ele deve conter o caminho completo?
    Sim para o perfeito funcionamento do SC_TRANS (AUTO_DJ)

    4. Sua ideia é gerar 20 musicas aleatórias por hora. Durante todo o dia??
    Sim 24 horas por dia

    5. Se sim, por que não gerar 480 músicas aleatórias por dia (20*24) e a cada hora pegar as 20 primeiras da lista? Isso facilita o controle de repetição de músicas por dia.
    Não tinha pensado nisso, mas vai existir hora que só quero gerar as 20 musicas de "Flash Back internacional", dai nao sei na lógica se gerar as 480 vai funcionar.

  9. #9

    Padrão

    Citação Postado originalmente por adcarlos Ver Post
    em uma unica pasta, com varias subpasta
    Ex:
    /var/www/bigradio/musicas/
    /var/www/bigradio/musicas/Sucesso
    /var/www/bigradio/musicas/Flash_back_nacional
    /var/www/bigradio/musicas/Flash_back_internacional
    /var/www/bigradio/musicas/Pop_rock
    /var/www/bigradio/musicas/Variadas

    As musicas estão separadas em lista de texto

    sucesso.txt
    FlashBack_nacional.txt
    FlashBack_internacional.txt
    Pop_rock.txt
    Variadas.txt
    Não entendi essa parte do arquivo texto! Tem arquivos com as musicas catalogadas por "genero"??
    Última edição por Magnun; 16-02-2009 às 21:00.

  10. #10

    Padrão

    Sim

    Em cada arquivo de texto eu tenho o patch com as musicas


    exemplo
    Arquivo "sucesso.txt" só tem musicas da para sucesso, com caminho completo

    /var/www/bigradio/musicas/Sucesso/musica_exemplo01.mp3
    /var/www/bigradio/musicas/Sucesso/musica_exemplo02.mp3
    /var/www/bigradio/musicas/Sucesso/musica_exemplo03.mp3
    /var/www/bigradio/musicas/Sucesso/musica_exemplo04.mp3


    FlashBack_nacional.txt

    /var/www/bigradio/musicas/Flash_back_nacional/fb_exemplo01.mp3
    /var/www/bigradio/musicas/Flash_back_nacional/fb_exemplo02.mp3
    /var/www/bigradio/musicas/Flash_back_nacional/fb_exemplo03.mp3
    /var/www/bigradio/musicas/Flash_back_nacional/fb_exemplo04.mp3


    O que tenho está assim.

  11. #11

    Padrão

    E como esses arquivos são atualizados?? Você faz manualmente??

  12. #12

    Padrão

    E ai cara?? Esses arquivos você atualiza eles na mão?? Posso usar o conteúdo deles pra gerar as listas aleatórias??

  13. #13

    Padrão

    Olá,

    Se eu coloco uma musica nova em qualquer pasta, eu atualizo manualmente

    Uso o comando FIND:

    find /patch/ -type f -name "*.mp3" > nacionais.txt

  14. #14

    Padrão

    Citação Postado originalmente por adcarlos Ver Post
    Olá,

    Se eu coloco uma musica nova em qualquer pasta, eu atualizo manualmente

    Uso o comando FIND:

    find /patch/ -type f -name "*.mp3" > nacionais.txt

    Então, como vc tem interesse em fazer listagem dinâmica baseada nos estilos vou ter que mudar um pouco o script que eu tava fazendo...

    Vou usar o conteúdo dos arquivos .txt pra gerar o bd de musicas ok??

  15. #15

    Padrão

    Olá,

    Pode usar a lista do .txt, pois a parte mais complicada para mim é essa geração aleatoria das 20 musicas

  16. #16

    Padrão

    Fala cara.... Vamos para a fase de beta testing!!

    Seguinte, pra ele funcionar vc precisa ter o python (que praticamente todos linux já tem) e o pysqlite2. A instalação do pysqlite depende da distro... Como não sei qual é a sua não poso te ajudar. Mas acho que é muito provável que seu linux ja tenha o pysqlite também.

    O programa ta em anexo. Como ele vai criar um pequeno banco de dados recomendo colocar ele em uma pasta. Sei la cria no seu /home, ou se for rodar como root em /etc.

    Baixa ele e renomeia pra extensão .py, dá permissão de escrita e faz um teste:
    $ mv randtrack.txt randtrack.py
    $ chmod 770 randtrack.py
    $ ./randtrack.py



    Ele deve imprimir na tela uma "ajuda". Se der algum erro fala ai que eu te ajudo.

    Pra usar ele é bem, simples. Como vc tinha aqueles arquivos fiz ele customizado. No meu exmplo tenho 3 arquivos: hard_rock.txt, heavy_metal.txt e old_rock.txt. Todos em /home/magnun. Vamos ver como utilizar:

    Cadastrar arquivos de generos:
    $ ./randtrack.py --add-file hard_rock.txt
    A tabela files não existe no banco de dados!
    Criando tabela files... [ok]
    Atualizando o genero hard_rock... [ok]

    $ ./randtrack.py --add-file heavy_metal.txt
    Atualizando o genero heavy_metal... [ok]

    $ ./randtrack.py --add-file old_rock.txt
    Atualizando o genero old_rock... [ok]



    Se vc olhar agora ele criou um banco de dados com o nome de tracks.db. O programa se baseia no nome do arquivo pra classificar o genero da música. Vamos ver como tá nosso banco de dados:
    $ ./randtrack.py --show
    Tabela Files:
    hard_rock: hard_rock.txt
    heavy_metal: heavy_metal.txt
    old_rock: old_rock.txt
    tabela tracks inexistnte...



    Ele cria os estilos e vincula os arquivos. Agora vamos criar a lista de tracks:
    $ ./randtrack.py --update heavy_metal
    A tabela tracks não existe no BD
    Criando tabela tracks... [ok]
    Limpando as tracks do genero heavy_metal... [ok]
    Adicionando tracks do genero heavy_metal... [ok]



    Com esse comando você pode atualizar apenas um genero. Mas você pode atualizar todos de uma vez:
    $ ./randtrack.py --update-all

    Atualizando o genero hard_rock...
    Limpando as tracks do genero hard_rock... [ok]
    Adicionando tracks do genero hard_rock... [ok]

    Atualizando o genero heavy_metal...
    Limpando as tracks do genero heavy_metal... [ok]
    Adicionando tracks do genero heavy_metal... [ok]

    Atualizando o genero old_rock...
    Limpando as tracks do genero old_rock... [ok]
    Adicionando tracks do genero old_rock... [ok]



    Pronto. Toda a tabela ta criada:
    $ ./randtrack.py --show
    Tabela Files:
    hard_rock: hard_rock.txt
    heavy_metal: heavy_metal.txt
    old_rock: old_rock.txt

    Tabela Tracks:

    hard_rock: /home/magnun/mp3/hard/tr1.mp3
    hard_rock: /home/
    magnun/mp3/hard/tr2.mp3
    hard_rock: /home/
    magnun/mp3/hard/tr3.mp3
    hard_rock: /home/
    magnun/mp3/hard/tr4.mp3
    hard_rock: /home/
    magnun/mp3/hard/tr5.mp3
    heavy_metal: /home/
    magnun/mp3/heavy/tr1.mp3
    heavy_metal: /home/
    magnun/mp3/heavy/tr2.mp3
    heavy_metal: /home/
    magnun/mp3/heavy/tr3.mp3
    heavy_metal: /home/
    magnun/mp3/heavy/tr4.mp3
    heavy_metal: /home/
    magnun/mp3/heavy/tr5.mp3
    old_rock: /home/magnun/mp3/old/tr1.mp3
    old_rock: /home/magnun/mp3/old/tr2.mp3
    old_rock: /home/magnun/mp3/old/tr3.mp3
    old_rock: /home/magnun/mp3/old/tr4.mp3
    old_rock: /home/magnun/mp3/old/tr5.mp3



    Agora para gerar as listas aleatórias só utilizar o seguinte comando:
    $ ./randtrack.py --rand 10 /home/magnun/teste.lst


    Olhando o conteúdo do arquivo:
    $ cat teste.lst
    /home/magnun/mp3/hard/tr5.mp3
    /home/
    magnun/mp3/hard/tr3.mp3
    /home/
    magnun/mp3/heavy/tr1.mp3
    /home/magnun/mp3/old/tr1.mp3
    /home/
    magnun/mp3/heavy/tr3.mp3
    /home/
    magnun/mp3/heavy/tr4.mp3
    /home/
    magnun/mp3/heavy/tr2.mp3
    /home/
    magnun/mp3/hard/tr4.mp3
    /home/magnun/mp3/old/tr5.mp3
    /home/magnun/mp3/old/tr4.mp3



    Como você citou a possibilidade de gerar listas por genero tem a seguinte opção:
    $ ./randtrack.py --rand 5 heavy_metal /home/magnun/teste.lst
    $ cat teste.lst
    /home/
    magnun/mp3/heavy/tr3.mp3
    /home/
    magnun/mp3/heavy/tr5.mp3
    /home/
    magnun/mp3/heavy/tr4.mp3
    /home/
    magnun/mp3/heavy/tr2.mp3
    /home/
    magnun/mp3/heavy/tr1.mp3


    Se vc adicionar novas músicas basta chamar o --update-all e pronto, as próximas gerações randômicas vão incluir os novos arquivos.

    Bem, é isso ai... Qualquer coisa posta ai!


    Arquivos Anexos Arquivos Anexos
    Última edição por Magnun; 20-02-2009 às 07:50.

  17. #17

    Padrão

    E ai cara?! Teve tempo de testar??

  18. #18

    Padrão

    Citação Postado originalmente por Magnun Ver Post
    E ai cara?! Teve tempo de testar??
    Olá, sim, tive tempo e funcionou diante disso fiquei super interessado em aprender python , pois hoje só sei basicamente o PHPpara rodar aplicações no servidor, mas pelo que eu vi, pelo python é mais simples "teoricamente" do que usar por exemplo o shell_exec do php.

    Abraços e muito obrigado

    Carlos Henrique

  19. #19

    Padrão

    Disponha cara!!

    Se precisa estamos ai!

    Python realmente é muito fácil e muito legal! Eu comecei a escrever um artigo aqui na wiki sobre introdução a programação em python mas não terminei. No meu blog eu também posto randomicamente coisas sobre python.

    Em breve estou querendo retomar o artigo de python para começar a postar no meu blog e abordar novos temas. Inclusive acabei de postar lá sobre esse programa que agente fez!

    Até mais....