giovedì 27 dicembre 2007

script per ascoltare le radio online

Ho creato questo piccolo script per ascoltare alcune delle più famose radio che trasmettono sul web il programma permette di ascoltare e scaricare i flussi delle trasmissioni radio, tra le stazioni che ho inserito nello script ci sono: radiodeejay, radiomaria, radioitalia, rtl potete modificarne la struttura inserendo altri indirizzi di stazioni radio da voi preferiti.

Per poter funzionare il programma necessita l'installazione di alcuni programmi multimediali tra cui mplayer, lame, w32codecs, ffmpeg serviamoci dei repository di medibuntu per installarli tutti, aprite un terminale scrivete:


sudo wget http://www.medibuntu.org/sources.list.d/gutsy.list -O /etc/apt/sources.list.d/medibuntu.list
wget -q http://packages.medibuntu.org/medibuntu-key.gpg -O- | sudo apt-key add - && sudo apt-get update

sempre da terminale digitate.

sudo apt-get install mplayer
sudo apt-get install w32codecs
sudo apt-get install ffmpeg
sudo apt-get install lame


finita l'installazione dei pacchetti procedete creando un file di testo di nome radio.

touch radio

incollate all'interno del file il seguente codice.

#!/bin/bash
# piccolo script per ascoltare radio online
# creazione delle funzioni per ascolto radio

radiodeejay() {
mplayer -cache 128 http://live.mediaserver.kataweb.it/radiodeejay
}

radiomaria() {
mplayer -cache 128 mms://wms.soloinrete.it/RMLive/Italy
}

radioitalia() {
mplayer -cache 128 mms://radioitalia.wm.p1.str3.com/rditaliahq
}

rtl() {
mplayer -cache 128 mms://151.1.245.36/rtl102.5lq/
}
# creazione del menu utilizzando zenity
a=`zenity --text="script per ascoltare radio web" --list --checklist --column=" " --column="fai una scelta" false "radiodeejay" false "radiomaria" false "radioitalia" false "rtl" `
if [ "$a" = "radiodeejay" ]; then
testo=`zenity --entry --text="vuoi ascoltare o registrare scrivi ascolta o registra" `
if [ "$testo" = "ascolta" ]; then
radiodeejay
else
mplayer -cache 128 -ao pcm:file=audiodeejay.wav http://live.mediaserver.kataweb.it/radiodeejay
fi
elif [ "$a" = "radiomaria" ]; then
testo=`zenity --entry --text="vuoi ascoltare o registrare scrivi ascolta o registra" `
if [ "$testo" = "ascolta" ]; then
radiomaria
else
mplayer -cache 128 -ao pcm:file=audiomaria.wav mms://wms.soloinrete.it/RMLive/Italy
fi
elif [ "$a" = "radioitalia" ]; then
testo=`zenity --entry --text="vuoi ascoltare o registrare il contenuto scrivi ascolta o registra" `
if [ "$testo" = "ascolta" ]; then
radioitalia
else
mplayer -cache 128 -ao pcm:file=audioitalia.wav mms://radioitalia.wm.p1.str3.com/rditaliahq
fi
elif [ "$a" = "rtl" ]; then
testo=`zenity --entry --text="vuoi ascoltare la radio o registrare il contenuto scrivi ascolta o registra" `
if [ "$testo" = "ascolta" ]; then
rtl
else
mplayer -cache 128 -ao pcm:file=audiortl.wav mms://151.1.245.36/rtl102.5lq/
fi
fi

salvate il file, date i permessi di esecuzione allo script.

sudo chmod a+rwx radio

per lanciarlo basterà scrivere:

./radio

appena lanciato il programma si presenta con un menu che vi da la possibilità di scegliere quale stazione radio ascoltare, scelta la radio vi permette di optare tra ascoltare o registrare le trasmissioni.

sicuramente lo stile dello script lascia un po a desiderare però svolge il proprio compito abbastanza celermente, se avete delle idee su come migliorarlo sono ben accette.




20 commenti:

Pasquale ha detto...

bello script :D
consigli? io aggiungerei RDS tra le radio!
su rhythmbox io uso questa url per rds: mms://fastreal.fastweb.it/RDS

complimenti, ciao! e buone feste

santo vasta ha detto...

ok grazie la metto nello script

ciao buone feste pure a te.

fabio ha detto...

ciao è uno script interessante.
Ho provato un po' a 'potenziarlo' nel senso di aggiungerci delle opzioni e permettere di aggiungere più facilmente delle nuove radio

ti faccio vedere l'help

~ >> playradio -h
Usage: playradio [OPTION]

DESCRIZIONE
Ascolta o registra musica dal web. Senza opzioni si può scegliere la stazione radio e se ascoltare oppure registrare. Tale comportamento è modificabile utilizzando le opzioni descritte sotto. Se si registra, a meno che non si sia specificato un percorso diverso con l'opzione -o, verrà creato un file .wav nella directory corrente.

Queste sono le radio per ora definite: rds radiodeejay radiomaria radioitalia rtl .

E' possibile aggiungerne nuove inserendole nel file di configurazione /home/fabio/.playradio.conf

OPZIONI
-h --help Mostra questa schermata
-t --terminal Modalità testuale
-s --show Mostra le radio che sono state definite
-r --registra Registra
-a --ascolta Ascolta
-o --output path Percorso del file in cui registrare
-u --url address Indirizzo della radio
-n --name name Nome della radio da utilizzare

Non lo posto direttamente perchè è diventato un po lunghino. Metto qua un link per vederlo
(perchè me lo taglia!!!)
http://docs.google.com/Doc?id=dhp7xnr9_4cbp2rrfs

Spero che google non abbia fatto casino processando il testo!!!

Spero che ti piaccia.
Poi pensavo che si poteva aggiungere queste due cose, ossia ascoltare e registrare insieme e poter scegliere il formato di output quando si registra.

Però io non conosco bene mplayer, quindi se ti interessa mi affido a te

ciao

santo vasta ha detto...

belle queste nuove funzioni se vuoi lo metto nel blog.

ciao fabio

santo vasta ha detto...

ho provato lo script da degli errori ti posto l'errore.

./playradio: line 169: syntax error in conditional expression: unexpected token `|'
./playradio: line 169: syntax error near `|m'
./playradio: line 169: ` [[ "$rec_time" =~ ^[0-9]*\.*[0-9]*[s|m|h|d]*$ ]] && return 0 || return 1'

fabio ha detto...

azzzz!
A me quell'errore non lo da, che comando hai lanciato?

Pensando che magari google, nel processare lo script, avesse cambiato qualcosa, ho pravato a copiarlo da un'altro pc (addirittura con win!!) e a eseguirlo, ma non mi ha dato errori.

Però ne ho trovato un'altro (che però non centrava nulla col tuo) e l'ho corretto.

Non sono riuscito a provare ogni opzione con ogni variante, però dalle prove che avevo fatto funzionava.

Se il problema persiste puoi pure rispondermi alla mia mail jacobbb84@gmail.com . Almeno posso mandarti un allegato!

ciao

santo vasta ha detto...

ciao fabio ora funziona lo script ben fatto ti faccio gli auguri di buon anno.

fabio ha detto...

Tanti auguri anche a te

Mi avevi chiesto se volevo che tu aggiungessi il mio script al tuo blog e ti rispondo 'con molto piacere'.

L'unica cosa è che ti consiglio di non postarlo direttamente, ma mettere un link allo script, perchè è un po' lunghino e inoltre postandolo si perdono tutte le indentazioni.

Comunque si può ancora migliorare. All'inizio dello script c'è un 'mini' TODO, solo che io, non conoscendo bene mplayer, non so come farli.

Anche per quanto riguarda zenity (che non conosco) non c'è un modo per far sì che appaia una sola finestra?

Se hai qualche spunto o idea l'aggiungo volentieri allo script. (ovviamente puoi farlo anche te se ti va)

ciao

gimm ha detto...

vi invio altre radio da aggiungere:
Radio Uno rtsp://live.media.rai.it/broadcast/radiouno.rm
Radio Due rtsp://live.media.rai.it/broadcast/radiodue.rm
Radio Tre rtsp://live.media.rai.it/broadcast/radiotre.rm
Radio 105 mms://151.1.245.6/1
Radio 101 mms://live.r101.it:1755/redundant/r101v.wma
Radio Capital mms://live.mediaserver.kataweb.it/capital?MSWMExt=.asf
Radio Metro' http://s6.mediastreaming.it:7110/
Radio Italia mms://radioitalia.wm.p1.str3.com/rditalia
SKY.fm Smooth Jazz http://scfire-chi-aa04.stream.aol.com:80/stream/1010
Lounge Radio http://live.streamhosting.ch:8010
Smooth Jazz Radio http://s1.viastreaming.net:8100
Radio Paradise http://scfire-nyk-aa01.stream.aol.com:80/stream/1049
RDS mms://fastreal.fastweb.it/RDS
Digitally Imported http://scfire-chi-aa04.stream.aol.com:80/stream/1007
M2O mms://live.mediaserver.kataweb.it/m2o?MSWMExt=.asf
Kiss Kiss http://str2.creacast.com:80
Radio Capri http://s8.mediastreaming.it:7440/
RadioNumberOne mms://217.169.108.45/wmtencoder/58247118.wmv
Radio Reporter mms://live.wm9.p1.str3.com/000999_bc_a365_radioreporter_mi?MSWMExt=.asf
RadioNation http://www.radionation.it:9000/

fabio ha detto...

grazie gimm, ho aggiunto queste radio alla lista di default del programma.

Se lo avete già utilizzato per aggiornare le radio basta cancellare il vecchio file di configurazione ~/.playradio.conf (attenzione: se avete aggiunto delle radio a mano queste verranno cancellate!!!)

Mi sono accorto di un problema (che risolverò appena ho un attimo di tempo) ossia che le radio i cui url contengono un "=" hanno dei problemi.
Per ora non si possono utilizzare

comunque stavo pensando anche ad un modo per aggiornare la lista delle radio automaticamente, ossia facendo un merge delle radio contenute nello script e di quelle nel file di configurazione

ciao

santo vasta ha detto...

ti ringrazio pure io gimm del tuo contributo ti invito inoltre ad utilizzare lo script di fabio che grazie all'utilizzo di un file di configurazione permette di aggiungere nuove radio allo script.

Gian Franco ha detto...

Ho delle piccole modifiche consigliabili:

1)Menu help
...
case "$1" in
-h|--help) helpme ;;
...
La funzione helpme è la seguente:

helpme(){
usage >> files &
zenity --title="HELP - `basename "$0"`" --text-info --filename=files --width=500 --height=260 ;
rm files;
exit 0
}

2)Show radio

show(){
{ for name in ${names[*]} ; do
eval "echo -e \" $name --> \$${name}\"" >> files
done
} | column -t
zenity --title="Lista radio: - `basename "$0"`" --text-info --filename=files --width=600 --height=300 ;
rm files;
exit 0;
}

Fatemi sapere se sono interessanti.
ciao ciao
p.s.: Gimm è il nickname di Gian Franco

fabio ha detto...

Grazie gimm per i consigli, però ho preferito non mettere le tue aggiunte.
Questo perchè, ad esempio per l'opzione -h, è prassi comune per i programmi da terminale che l'help sia stampato direttamente sul terminale. Diciamo che almeno questo è quello che uno si aspetta.
Per quanto riguarda la funzione show il tuo consiglio sarebbe interessante se si aggiungesse la possibilità di scegliere con zenity la possibilità di visualizzare le radio. Cerco di spiegarmi.
Diciamo se nella scelta iniziale con zenity ci fosse ad esempio un bottone per mostrare gli url, allora sarebbe brutto che questi vengano mostrati sul terminale e una soluzione come la tua sarebbe decisamente preferibile.
Ma se uno passa l'opzione -s da un terminale non si aspetta una finestra che si apre.

Comunque visto che ti vedo abbastanza smaliziato con l'uso di zenity (io non lo conosco per nulla) se ti va potresti cercare di curare meglio l'interfaccia.

Fai conto che non esista il terminale e che il programma venga lanciato con un doppio click. In tal caso l'uso di questo script è molto limitato rispetto all'uso su un terminale.
La cosa migliore penso sia minimizzare il numero di finestre che vengono aperte.
Si può fare una cosa del genere con zenity??

Per quanto riguarda lo script l'ho aggiornato ed ora penso sia meglio strutturato. I cambiamenti sono i seguenti

Adesso non c'è più il vincolo sui nomi delle radio (possono contenere spazi, lettere accentate). (Detto così sembra una cosa di poco conto, ma se confrontate il nuovo script con quello vecchio vedrete che sono cambiate molte cose. Questo perchè prima il file di configurazione era un file sorgente con delle variabili (i nomi delle radio) che veniva caricato con 'source', adesso non più)


Ho aggiunto la possibilità di fare il merge di file di configurazione (opzione -U)

Adesso la prima volta che viene lanciato lo script il file di configurazione se non esiste viene creato, se esiste viene aggiornato.
Vanno ancora bene i file di configurazione di prima però, visto che i nomi delle radio prima erano un po' brutti ( con quei _ al posto degli spazi), si possono aggiornare i nomi delle radio. Basta fare così

mv ~/.playradio.conf ~/.playradio.conf.back

cat ~/.playradio.conf.back | playradio -U

In tal modo viene prima creato il file di configurazione (nuovo tipo) e con l'opzione -U tutte le radio vecchie i cui url non sono presenti nel nuovo file di configurazione, vengono aggiunte.
Visto che ci sono se qualcuno ha nuove radio da proporre lo faccia!!!

Ho aggiunto l'opzione (-R) per rimuovere le radio e (-A) per aggiungerle.

Con queste aggiunte (teoricamente) non dovrebbe più essere necessario editare direttamente il file di configurazione!!

Con le opzioni -U e -A, prima di fare delle aggiunte, viene controllato che l'url o il nome della radio non siano già presenti.

Ho migliorato l'help .... guardate in fondo chi devo aggiungere? Mi serve il nome e/o un indirizzo email. In particolare te santo vasta se me li dai aggiorno.

gimm anche te se ti va di vedere un po' di mettere a posto la parte con zenity (o anche altre cose che ti vengono in mente) ti aggiungo volentieri.

Warning!!! Dato che ho riscritto molte parti dello script è molto probabile che ci possano essere degli errori (non ho riprovato ogni opzione!!!)
Per ogni tipo di problemi postate qua o alle mail in fondo all'help.

Visto che mi sembra molto carino ed utile questo script, che ne dite se apriamo un topic sul forum. Magari prima lo testiamo un po' e lo miglioriamo e poi potremmo farlo!!!

Ciao ciao

gimm ha detto...

Ciao a tutti, ringrazio Fabio e Santo Vasta per il lavoro che state facendo.
Per Fabio: effettivamente le aggiunte che ti ho consigliato andrebbero bene se lo script fosse solo eseguibile unicamente con interfaccia grafica.Riguardo a zenity purtroppo ha poche interfacce, perciò bisognerebbe utilizzarle insieme a gxmessage, che offre la possibilità di creare finestre con più tasti.
Ti faccio l'esempio sulla finestra Ascolta/Registra

#scelta dell'azione
[[ "$action" ]] || `gxmessage -name "NAME" -title "Ascolta o Registra?" -center -buttons "GTK_STOCK_MEDIA_PLAY,GTK_STOCK_MEDIA_RECORD" "Ti stai sintonizzando su $radio_choice"`
action=$?

[[ "$action"==101 ]] || [[ "$action"==102 ]] || { echo "Azione non impostata. Passo in testuale" && return 1 ; }

I seguenti codici mostrano altri tasti di gnome utili anche per la radio

gxmessage -title "VARI TASTI" -center -buttons "GTK_STOCK_OK,GTK_STOCK_INFO,GTK_STOCK_YES,GTK_STOCK_NO,GTK_STOCK_CANCEL,GTK_STOCK_HELP,GTK_STOCK_EXECUTE" "Scegli qualsiasi tasti: il primo vale 101, il secondo 102 e così via"

gxmessage -title "VARI TASTI" -center -buttons "GTK_STOCK_MEDIA_PLAY,GTK_STOCK_MEDIA_PAUSE,GTK_STOCK_MEDIA_STOP,GTK_STOCK_MEDIA_RECORD" ""

gxmessage -title "VARI TASTI" -center -buttons "GTK_STOCK_MEDIA_REWIND,GTK_STOCK_MEDIA_FORWARD,GTK_STOCK_MEDIA_PREVIOUS,GTK_STOCK_MEDIA_NEXT" "PER esempio per la radio"

gxmessage -title "UN TASTO QUALSIASI" -center -buttons "un tasto" ""

VEdi un pò come si potrebbe aggiungerli allo script. Ciao ciao

gimm ha detto...

Ho notato che nn si leggono tutti i tasti, dunque ve li riinvio tutti quelli che dovrebbero funzionare:GTK_STOCK_ABOUT,GTK_STOCK_ADD
GTK_STOCK_APPLY
GTK_STOCK_BOLD
GTK_STOCK_CANCEL
GTK_STOCK_CDROM
GTK_STOCK_CLEAR
GTK_STOCK_CLOSE
GTK_STOCK_COLOR_PICKER
GTK_STOCK_CONVERT
GTK_STOCK_CONNECT
GTK_STOCK_COPY
GTK_STOCK_CUT
GTK_STOCK_DELETE
GTK_STOCK_DIALOG_AUTHENTICATION
GTK_STOCK_DIALOG_ERROR
GTK_STOCK_DIALOG_INFO
GTK_STOCK_DIALOG_QUESTION
GTK_STOCK_DIALOG_WARNING
GTK_STOCK_DIRECTORY
GTK_STOCK_DISCARD
GTK_STOCK_DISCONNECT
GTK_STOCK_DND
GTK_STOCK_DND_MULTIPLE
GTK_STOCK_EDIT
GTK_STOCK_EXECUTE
GTK_STOCK_FILE
GTK_STOCK_FIND
GTK_STOCK_FIND_AND_REPLACE
GTK_STOCK_FLOPPY
GTK_STOCK_FULLSCREEN
GTK_STOCK_GOTO_BOTTOM
GTK_STOCK_GOTO_FIRST
GTK_STOCK_GOTO_LAST
GTK_STOCK_GOTO_TOP
GTK_STOCK_GO_BACK
GTK_STOCK_GO_DOWN
GTK_STOCK_GO_FORWARD
GTK_STOCK_GO_UP
GTK_STOCK_HARDDISK
GTK_STOCK_HELP
GTK_STOCK_HOME
GTK_STOCK_INDENT
GTK_STOCK_INDEX
GTK_STOCK_INFO
GTK_STOCK_ITALIC
GTK_STOCK_JUMP_TO
GTK_STOCK_JUSTIFY_CENTER
GTK_STOCK_JUSTIFY_FILL
GTK_STOCK_JUSTIFY_LEFT
GTK_STOCK_JUSTIFY_RIGHT
GTK_STOCK_LEAVE_FULLSCREEN
GTK_STOCK_MEDIA_FORWARD
GTK_STOCK_MEDIA_NEXT
GTK_STOCK_MEDIA_PAUSE
GTK_STOCK_MEDIA_PLAY
GTK_STOCK_MEDIA_PREVIOUS
GTK_STOCK_MEDIA_RECORD
GTK_STOCK_MEDIA_REWIND
GTK_STOCK_MEDIA_STOP
GTK_STOCK_MISSING_IMAGE
GTK_STOCK_NETWORK
GTK_STOCK_NEW
GTK_STOCK_NO
GTK_STOCK_OK
GTK_STOCK_OPEN
GTK_STOCK_ORIENTATION_LANDSCAPE
GTK_STOCK_ORIENTATION_PORTRAIT
GTK_STOCK_ORIENTATION_REVERSE_LANDSCAPE
GTK_STOCK_ORIENTATION_REVERSE_PORTRAIT
GTK_STOCK_PASTE
GTK_STOCK_PREFERENCES
GTK_STOCK_PRINT
GTK_STOCK_PRINT_PREVIEW
GTK_STOCK_PROPERTIES
GTK_STOCK_QUIT
GTK_STOCK_REDO
GTK_STOCK_REFRESH
GTK_STOCK_REMOVE
GTK_STOCK_REVERT_TO_SAVED
GTK_STOCK_SAVE
GTK_STOCK_SAVE_AS
GTK_STOCK_SELECT_ALL
GTK_STOCK_SELECT_COLOR
GTK_STOCK_SELECT_FONT
GTK_STOCK_SORT_ASCENDING
GTK_STOCK_SORT_DESCENDING
GTK_STOCK_SPELL_CHECK
GTK_STOCK_STOP
GTK_STOCK_STRIKETHROUGH
GTK_STOCK_UNDELETE
GTK_STOCK_UNDERLINE
GTK_STOCK_UNDO
GTK_STOCK_UNINDENT
GTK_STOCK_YES
GTK_STOCK_ZOOM_100
GTK_STOCK_ZOOM_FIT
GTK_STOCK_ZOOM_IN
GTK_STOCK_ZOOM_OUT

fabio ha detto...

Bello questo programma, non lo conoscevo. Peccato che non esso non si possa fare la checklist (o mi sbaglio?). Comunque penso che alternando i due (zenity e gxmessage) si possa raggiungere il risultato voluto.

Io pensavo ad una prima finestra per la scelta, una seconda per decidere se ascoltare o registrare, ed una terza che eventualmente nel caso si scelga registra ad esempio faccia scegliere il tempo di registrazione ed anche il file su cui registrare.

Girovagando su internet ho trovato questo
http://www.turtle.dds.nl/gtk-server/intro.html

dovrebbe teoricamente dare la possibilità a script tipo il nostro, di utilizzare gtk un po' più liberamente. Ho compilato ed installato i sorgenti ed ho provato i demo (un po' banali) però se hai voglia potresti darci un'occhiata. Penso che alla fine questo programma sia solo un workaround per comunicare con le gtk, però se funziona perchè non provare!!!? Non ho la minima idea di come si usi questo programma!!
Purtroppo non è neanche nei repo!!

Per adesso io penso di dedicarmi più al funzionamento dello script, perchè ho notato che se lo si sovraccarica diventa un po' goffo!!

Comunque l'ho aggiornato, aveva un problemino con i nomi delle radio, adesso (almeno spero) si possono chiamare come vi pare.

Mi sono messo a guardare su internet se trovavo delle radio da aggiungere, ma trovando poco o niente ho scaricato un programma molto bello per ascoltare le radio dal web. Si chiama streamtuner.

Praticamente fa tutto quello che fa il nostro script :( (ed ovviamente lo fa meglio) però il bello dello script è che è semplice e che può essere usato direttamente sul terminale. Inoltre è facilmente personalizzabile col file di configurazione. (proprio prima stavo pensando che non l'ho mai usato veramente, aspetta che ora lo lancio :))

Dopo aver scaricato streamtuner sono andato subito a cercare un modo per 'rubargli' le radio che aveva. Dopo un po di smanettamenti (il loro file di configurazione è tutt'altro che semplice da capire) ho trovato il modo per farlo.
Al solito link, oltre allo script 'playradio' c'è un altro scriptino in python per effettuare la conversione fra i file di configurazione.
Alla fine ho importato più di 1000 radio nel file di configurazione!!!
Però ci sono da dire due cose, una buona ed una cattiva. La prima è che la procedura di importazione è funzionata perfettamente (dopo la spiego) e quindi l'opzione -U va alla grande. L'altra è che assolutamente playradio (per ora) non è pronto a gestire così tante radio, sebbene funzioni. Comunque andiamo per gradi.

Spiego come importare le radio. Questa procedura andrebbe fatta solo per dei test e capirete perchè ... comunque, bisogna copiare lo script python in un file di nome ad esempio 'converto' e renderlo eseguibile. A questo punto se non l'avete scaricate streamtuner, apritelo e fategli caricare le radio nel tag Xiph. A questo punto su un terminale spostarsi nella cartella ~/.streamtuner/cache/xiph/. Dovrebbero esserci vari file di configurazione, sceglietene uno, io ad esempio ho scelto '%5F%5Fmain', perchè penso sia la raccolta di tutte le radio.
A questo punto lanciare
~/converto %5F%5Fmain > ~/rubato
facciamo un backup
cd #torno nella home
cp .playradio.conf .playradio.backup
e poi
playradio -U < rubato
a questo punto inizia una procedura che dura una decina di minuti con la CPU al 100%. Ci saranno tanti messaggi di errore, perchè molti nomi delle radio si ripetono (se ad un certo punto vedrete la lista della vostra home comparire come nome di una radio non preoccupatevi (io l'ho fatto) succede perchè uno dei nomi in 'rubato' contiene * che viene espanso prima di arrivare a playradio, se volete potete modificare il file 'rubato' prima di iniziare il merge)

Sebbene la procedura di merge ha esito positivo al successivo ravvio di playradio vi accorgerete che qualcosa non va!! Prima di fare qualsiasi cosa sta li 10 secondi (con CPU al 100%) (vorrei vedervi voi a caricare due array di lunghezza maggiore di 1000 :)) e dopo va. Però ad esempio con tante radio la scelta sul terminale fa un po ridere, perchè più della metà non vengono mostrate e c'è poco da fare!

E' per questo che propongo questa procedura come un test, sebbene io sti ascoltando una radio con un buffo nome.

Alla fine se si vogliono usare le radio preferite, rimanendo entro un numero limitato di radio, lo script così com'è va bene. In effetti quando ho iniziato a modificarlo non pensavo ad una situazione come dopo il merge, io semplicemente gli facevo caricare tutte le radio all'inizio per semplificare le cose.
D'altra parte è una cosa fattibile cercare di ottimizzarlo in questo senso rimanendo sempre con un programmino molto diretto e semplice.
Infatti è quello che mi sono messo in testa di fare, ossia cercare di ottimizzarlo (ovviamente non si può chiedere miracoli alla bash) per gestire tante radio, aggiungendo qualche funzionalità in questo senso.
Ho buttato giù qualche idea all'inizio dello script, sotto al TODO.
Fatemi sapere cosa ne pensate!!!

Mi sta passando per la mente che si potrebbe fare anche una cosa del genere ... ossia rendere playradio un demone. Mi spiego... alla prima chiamata carica tutte le radio, passa in background e rimane in attesa. A questo punto ogni chiamata successiva di playradio non fa altro che scrivere su un file temporaneo le opzioni passate, mandare un segnale al demone di leggere queste nuove opzioni e alla fine quest'ultimo esegue i comandi. In tal modo le radio vengono caricate una solo volta. L'unica cosa che non so bene come fare (ma un'idea ce l'ho) è far sì che l'output del demone arrivi sul terminale dove è stato invocato playradio. Supponi ad esempio che il demone venga lanciato con alt+F2, e che ad un certo punto io voglia visualizzare la lista delle radio sul terminale. Allora il demone dovrà scriverle su un file che poi devo leggere e stampare...

Purtroppo si avvicinano gli esami e quindi non potrò dedicare molto tempo ai cambiamenti però piano piano spero che ci siano.

ciao

fabio ha detto...

Ho visto che si possono usare anche gli XML generati con glade, questo potrebbe semplificare di molto le cose!!!

ciao

fabio ha detto...

Eccomi tornato.
Vi passo il primo abbozzo del nuovo playradio

http://docs.google.com/Doc?id=dhp7xnr9_5hmn3j5gn

è una versione di test, anzi peggio!!!
Premetto che le uniche cose che (teoricamente) funzionano sono solo le opzioni per ascoltare, registrare, le opzioni -s e -h e basta.
Appena lanciato creerà una cartella .playradio nella vostra home, e dentro questa il file playradio.conf sarà il file con le radio. Questo file è ancora compatibile con quello vecchio (al massimo vi spunterà una radio di nome 'version')

Vi consiglio anche di non guardare troppo il codice perchè è disordinatissimo!! Sorry.

Comunque spiego il nuovo funzionamento.
Se lo si lancia con l'opzione 'start' va in background e diventa un demone. (Una qualsiasi chiamata di playradio farà comunque partire il demone se questo non è attivo). Il demone appena lanciato inizia a caricare le radio con tranquillità (la CPU è al 40%) (ma allo stesso tempo controlla se qualcuno l'ha chiamato) e quando ha finito rimane in attesa di una chiamata. Se successivamente si lancia playradio, questo legge le opzioni e passa le informazioni al demone. Quest'ultimo, quando chiamato, lancia in background un processo che legge le informazioni, si collega a playradio, gli manda l'output (anche gli errori) e riceve da questo quello che l'utente digita.

Ho fatto in modo che sia possibile collegarsi al demone anche mentre questo sta caricando le radio.

Ho provato a caricare le 1600 radio come ho descritto sopra.
Dopo che il demone ha caricato le radio, a parte mostrare le radio con zenity, tutto è velocissimo. Anche la scelta da terminale della radio è pressochè istantanea. Il problema con zenity è che gli devo passare tutte insieme le radio, creando una stringa lunghissima fra le sue opzioni e quindi è un casino e sinceramente non saprei cosa farci. Invece con l'opzione -t che fa scegliere la radio da terminale io passo l'output a less con una pipe.

Se la chiamata è fatta mentre il demone sta caricando le radio, tutto fila liscio se non bisogna scegliere la radio, altrimenti zenity va in paranoia, ma un po' anche il terminale, soprattutto se si chiede a less di andare all'ultima radio si ferma qualche secondo (less aspetta che gli siano passate tutte le radio)

Vi direi di segnalarmi eventuali bug ... ma ne sarà così pieno ....

Attenzione, non usare opzioni -U -R -A perchè non ho la minima idea di cosa facciano!!! Probabilmente niente ....

Comunuqe tutto questo è stato possibile grazie ad un comando che ho scoperto in questi giorni, mkfifo.
E' comodissimo, permette di creare una pipe fra programmi diversi, proprio come la "|". Esempio, che poi ho utilizzato per playradio.

mkfifo -m 666 /tmp/stdin_mplayer #-m setta i permessi
mplayer [opzioni] < /tmp/stdin_mplayer &

lanciato così mplayer non parte perchè bash sta aspettando che qualcuno si colleghi alla pipe

A questo punto su un qualsiasi terminale basta usare

cat > /tmp/stdin_mplayer

in tal modo parte mplayer e lo si può comandare anche da questo terminale e quando lo si vuol chiudere basta digitare 'q'+invio(L'invio si può eliminare con un ciclo while che legge dall'utente un carattere alla volta). La cosa bella è che teoricamente penso che questa cosa si potrebbe fare anche ad esempio via ssh.
Creando una pipe anche per lo stdout si può anche ricevere l'output

mplayer [opzioni] < /tmp/stdin_mplayer > /tmp/stdout_mplayer &

cat < /tmp/stdout_mplayer &
ed mplayer non parte ancora
mplayer [opzioni] < /tmp/stdin_mplayer

così ora c'è anche l'output

Questo è lo stesso principio che ho usato per comunicare col demone.

Spero vi piaccia il nuovo playradio, sebbene sia incompleto

ciao

fabio ha detto...

Scusate
l'ultimo
mplayer [opzioni] < /tmp/stdin_mplayer
è sbagliato, bisogna mettere
cat > /tmp/stdin_mplayer

ciao

fabio ha detto...

Dopo un breve periodo di pausa sono riuscito a completarlo. Ora è abbastanza stabile.

Questi sono i link
lo script:
http://docs.google.com/Doc?id=dhp7xnr9_5hmn3j5gn

un file di configurazione con più di 1000 radio prese da streamtuner:
http://docs.google.com/Doc?id=dhp7xnr9_8dkpq34cn
Published on February 12, 2008 9:43 PM

e lo script per prendere le radio da streamtuner:
http://docs.google.com/Doc?id=dhp7xnr9_6zmfj7pcm

ciao