Linux slogan
Visite também: Segurança Linux · BR-Linux.org · Dicas-L · Doode · NoticiasLinux · SoftwareLivre.org · UnderLinux



» Screenshot
Linux: Ubuntu 7.04 + Beryl em notebook
Por bilizoi
» Login
Login:
Senha:

Se você ainda não possui uma conta, clique aqui.

Esqueci minha senha



Artigo

Web Rádio - Pedidos Musicais Automáticos
Linux user
perigo
29/02/2012
No presente artigo, demonstro um pequeno sistema feito por mim em Shell Script e PHP, de uma Web Rádio com pedido musical automático. Onde o usuário digita uma palavra-chave para cantor e música, e o sistema a toca automaticamente.
Por: Alessandro Périgo | Blog: http://www.neuroinformatica.com.br
[ Hits: 2621 ]
Conceito: 10.0   3 voto(s)3 voto(s)3 voto(s)3 voto(s)3 voto(s) + quero dar nota ao artigo

Requisitos e Instalação

Requisitos

- Requisitos para instalação:
  • Servidor Linux Slackware, no caso, usei somente em modo texto (opcional), mas fica a seu critério;
  • Placa de áudio com recurso de Audio MIX ou Cabo P2 da saída de áudio na entrada de linha ou Microfone;
  • Servidor ICECAST-kh, mas tem que ser nesta versão KH, e não na versão normal do Icecast, pois iremos usar o recurso de áudio AAC Plus com o tocador de plugin Flash gratuito na página;
  • Encoder DarkIce compilado com plugin AAC Plus;
  • Biblioteca LibAAC-Plus;
  • Programa MPG123 para tocar as músicas;
  • Conexão com a Internet com boa taxa de Upload;
  • Servidor WEB, usei o Apache com suporte a PHP;
  • Banco de dados de Músicas MP3.

Instalação

Faça o download dos arquivos:
Arquivos “mus33” e “loopex” atualizados, entre outros:

Bom, o sistema é simples e funcional, ficou mais de 1 mês rodando sem quedas e sem apresentar problemas. Não vou explicar como instalar e configurar o Icecast, bem como o Darkice e suas respectivas bibliotecas.

Descompacte o arquivo “.zip” em “/geral/”. Depois de tudo instalado e funcionando, vamos para os scripts (que são 2 principais).

Arquivo “mus33”, segue abaixo:

#!/bin/sh #Desenvolvido por Alessandro Périgo #email: alessandroperigo@hotmail.com #Por Favor - Se repassar o codigo mantenha o nome do autor. while :; do echo "0" > lo #Procura se existe cantor/musica valido pra interrupcao caso contrario nao for i in `cat lista2`; do cantor=`echo $i | cut -d ';' -f 1` musica=`echo $i | cut -d ';' -f 2` # Protecao contra eventualmente usuario mantar formulario em branco if [ $cantor <> " " ]; then if [ $musica <> " " ]; then if [ $cantor = "$cantor" ]; then egrep -i "($cantor.*$musica|$musica.*$cantor)" musicalist > verifica head -n1 verifica > verifica2 STATUS_ABF=$(egrep -i "($cantor.*$musica|$musica.*$cantor)" verifica2) if [ -n "$STATUS_ABF" ] then #caso encontre um cantor valido executa o codigo abaixo, que eh pra matar processo for i in `cat lista2`; do c=1 while [ $c -le 2 ] do echo "Welcone $c times" killall mpg123 && killall mpg123 && killall mpg123 && killall mpg123 (( c++ )) echo "1" > lo sleep 1 done cantor=`echo $i | cut -d ';' -f 1` if [ $cantor <> " " ]; then if [ $musica <> " " ]; then if [ $cantor = "$cantor" ]; then rm lista && touch lista && chmod 777 lista && cp lista2 lista && chmod 777 lista && rm lista2 && touch lista2 && chmod 777 lista2 && /geral/./mus33 fi fi fi done fi fi fi fi done for i in `cat lista`; do cantor=`echo $i | cut -d ';' -f 1` musica=`echo $i | cut -d ';' -f 2` resposta="$cantor $musica" if [ $cantor <> " " ]; then if [ $musica <> " " ]; then if [ $cantor = "$cantor" ]; then # #echo $cantor #echo $musica #find /geral/musica -name "*.mp3" -type f -exec ls > musicalist {} \;&& egrep -i "($cantor.*$musica|$musica.*$cantor)" musicalist > musicalist2 head -n1 musicalist2 > musicalist3 sed -e 's/.*\///g' -e 's/\..\{3\}$//' musicalist3 > aovivo rm musicaplay3 -f touch musicaplay3 chmod 777 musicaplay3 conta=0 for i in `cat lista`; do cantor=`echo $i | cut -d ';' -f 1` musica=`echo $i | cut -d ';' -f 2` nome=`echo $i | cut -d ';' -f 3` if [ $cantor <> " " ]; then if [ $musica <> " " ]; then if [ $musica = "$musica" ]; then # echo "1" > lo echo $cantor echo $musica echo $nome egrep -i "($cantor.*$musica|$musica.*$cantor)" musicalist > musicaplay head -n1 musicaplay > musicaplay2 STATUS_ABD=$(egrep -i "($cantor.*$musica|$musica.*$cantor)" musicaplay2) if [ -n "$STATUS_ABD" ] then conta=$((conta+1)) final=$(sed -e 's/.*\///g' -e 's/\..\{3\}$//' musicaplay2) echo "$conta - $nome Pediu: $final" >> musicaplay3 fi fi fi fi done vinheta1=$(cat vinheta) if [ "$vinheta1" == "0" ] then mpg123 --list vinhetas fi echo "1" > vinheta #"$var1.*$var2|$var2.*$var1" file mpg123 --list musicalist3 echo "1" > lo fi fi fi done rm musicaplay3 -f touch musicaplay3 chmod 777 musicaplay3 for i in `cat lista`; do cantor=`echo $i | cut -d ';' -f 1` if [ $cantor <> " " ]; then if [ $musica <> " " ]; then if [ $cantor = "$cantor" ]; then rm lista && touch lista && chmod 777 lista && cp lista2 lista && chmod 777 lista && rm lista2 && touch lista2 && chmod 777 lista2 && /geral/./mus33 echo "1" > lo fi fi fi done sleep 1 done


Arquivo “loopex”, segue abaixo:

#!/bin/sh #Desenvolvido por Alessandro Périgo #email: alessandroperigo@hotmail.com #Por Favor - Se repassar o codigo mantenha o nome do autor. while :; do c=1 while [ $c -le 4 ] do echo "Welcone $c times" #killall mpg123 && killall mpg123 && killall mpg123 && killall mpg123 (( c++ )) sleep 1 done lostatus=$(cat lo) if [ "$lostatus" == "0" ] then lostatus=$(cat lo) if [ "$lostatus" == "0" ] then lostatus=$(cat lo) if [ "$lostatus" == "0" ] then lostatus=$(cat lo) if [ "$lostatus" == "0" ] then lostatus=$(cat lo) if [ "$lostatus" == "0" ] then STATUS_ABC=`ps ax | grep mpg123 | grep -v grep | grep -v $0 | awk '{print $1}'` if [ ! -n "$STATUS_ABC" ] then echo "Musicas Variadas" > aovivo mpg123 -C -z /geral/musica/variados/*.mp3 echo "0" > vinheta fi fi fi fi fi fi sleep 1 done


Estes dois arquivos trabalham em loop infinito, portando, abra um terminal pra cada um deles, o “mus33” recebe os pedidos do arquivo, lista e os toca. O arquivo “loopex” fica responsável por tocar as músicas variadas, pois quando não há pedidos, o sistema não pode parar, e a rádio tem que continuar tocando músicas mesmo sem pedidos.

E quando há um pedido de música, e esta música consta no banco de dados, o sistema pára a música que está sendo tocada pelo sistema, e toca uma vinheta, logo depois, toca as músicas que estão na lista de pedidos.

Lembrando que o arquivo “lista” tem sempre prioridade, caso não existir nenhuma música neste arquivo, ele volta a tocar as músicas variadas que estipulei.
Próxima página >>




Páginas do artigo
   1. Requisitos e Instalação
   2. Estrutura, Pedidos e o Site

Outros artigos deste autor

Leitura recomendada

Comentários
[1] Comentário enviado por andrewr360 em 29/02/2012 - 15:41h:

uma sugestão, seria mostrar as musica, caso escolha somente o nome da banda!!

como tem no kboing

[2] Comentário enviado por fernandoguedes em 29/02/2012 - 15:48h:

Interessante, vou lhe dar duas sugestões, mas não tem nada haver com o código e sim com o seu licenciamento, que tal fazer um commit no GitHub com o seu código e licenciá-lo sob alguma GPL ou outra licença? Seria massa, tenho certeza que esse código seria interessante pra muita gente e que ambos poderiam contribuir para melhorá-lo, do mais, tá massa!

[3] Comentário enviado por perigo em 29/02/2012 - 16:01h:

Andrewr360 - Thank You

Fernando Guedes ! .. Obrigado pelas suas informacoes, estarei verificando isso sobre licencia-lo sobre GPL, na verdade eu nem tenho ideia de como proceder. Mas agradeço a ideia.

Aos Demais:

Estou verificando aqui nos logs que muita gente esta colocando nomes errados ou mesmo as musicas nao existem no banco de dados, porisso que nao estao tocando. Outra coisa meu banco de dados de musicas tem algumas musicas que estao com defeito entao o mpg123 as vezes enrosca.





[4] Comentário enviado por perigo em 01/03/2012 - 18:16h:

Amigos, Fiz uma uma correcao conforme descricao abaixo:

=====================================================
WeB Radio - Pedidos Automaticos Versao 1.0
Autor: Alessandro Périgo
Email: alessandroperigo@hotmail.com
Copyright 2011

01/03/2012

# corrigido 1 bug que na chamada do programa mus33 ele cria um novo
# processo deixando assim varios processos conforme o programa vai trabalhando
# entao codigo abaixo pega o pid do processo do grep e do mus33 e os mata depois
# eh feito uma chamada de em um novo processo.
# se observar na saida ele vai falar que deu um erro, porque ele tenta matar o processo do grep tbm
# isso eh normal !

======================================================

Entao, as correcoes e foi adicionado comentarios nos codigos...
Portanto tem que baixar o arquivo com as novas alteracoes no link abaixo, ou link la em cima que ja esta atualizado.

http://www.bestradio.com.br/arquivos_radio_automatico.zip









[5] Comentário enviado por cirinho em 16/04/2012 - 20:10h:

Isso funciona com o shoutcast sc_serv e e a playlist sc_trans?

Pelo que estou vendo é ice que nunca usei como servidor de webrádio.

[6] Comentário enviado por perigo em 16/04/2012 - 22:30h:


Nao fiz o teste, porem o darkice tem suporte pra funcionar no shoutcast. Portanto acredito que funcione sem problemas. A minha radio esta off, nao tenho nobreik entao toda hora q cai a energia tem q ligar e isso toma tempo. Mas O Icecast eh super simples de configurar, funciona 100% pode fazer o broadcast em varias portas com diferentes audios, somente mudando o arquivo de configuracao e abrindo um processo pra cada porta.





Contribuir com comentário


  
Para executar esta ação você precisa estar logado no site, caso contrário, tudo o que for digitado será perdido.
Responsável pelo site: Fábio Berbert de Paula - Conteúdo distribuído sob licença GNU FDL
Site hospedado por:

Viva o Linux

A maior comunidade Linux da América Latina! Artigos, dicas, tutoriais, fórum, scripts e muito mais. Ideal para quem busca auto-ajuda em Linux.