PDA

View Full Version : Ho creato questo registratore di radio internet, vi piace?


xwang
08-08-2008, 10:57
Ciao a tutti,
negli ultimi giorni ho creato questo script che permette di registrare le radio internet (anche quelle che non si trovano su shoutcast e simili tipo le radio rai, la bbc, radio deejey) in mp3.
Mi sono basato in parte su quanto esposto qui:
http://walkingtowel.org/2006/03/03/record-streaming-audio-with-linux-part-ii/
modificandolo in modo da avere una sorta di interfaccia grafica (ho usato kdialog per cui penso sia utile solo per gli utenti kde) che permettesse di selezionare i vari parametri e di iniziare e terminare la registrazione.
Che ne pensate?
Come faccio a pubblicarlo per renderlo disponibile a tutti?
Se vedete lo script ho usato xterm perchè mplayer una volta che si è connesso alla radio si duplica diventando due processi.
Se faccio partire mplayer dentro xterm, uccidendo xterm uccido tutti i processi figli. Se lo avviao senza xterm conosco il pin solo del primo processo mplayer e il secondo rimane vivo.
Per me va anche bene così solo che se l'utente chiude la finestra di xterm non è previsto alcun controllo nel programma.
Insomma mancano ancora alcune cose da fare, ma gradirei un vostro aiuto e vostri pareri.
Grazie,
Xwang


#!/bin/bash
# radioRecoder.sh
# v0.3.0 - 20080814
# Xwang <[email protected]>
# Released under GPL 2.0 and following (can you help me and tell if it is GPL3 compliant?)

# This script acts as a wizard enabling the user to select the URL to listen and eventually rip it after having specified
# the directory and the file name
# The cancel button is used to go to the previous page
# To exit the program press cancel in the URL page and follow the instruction


# TBD
# store inserted URL in external file and use them in a combobox
# check if parameter is passed or not
# modify parameters so that recording can be done without user iteration
# capture Ctrl-C in order to clean all temporary files and kill opened processes before closing
# give some indication on recording time and if possible file dimension
# put confirmation on registration stop
# open the directory where last file has been saved (maybe asking for it) at the end of the recording
# translate messanges
#



# assign as default stream value the one passed ad first parameters if any (check TBD)
STREAM=$1

TEMPDIR=/tmp
# inizialize variables
LISTENERmode=0 # if 0 listener in separate window with xterm
# if 1 listener without separate window

EXIT=1
STATE=1
if [ $LISTENERmode -eq 1 ]
then
PIDlistener2=""
fi
PIDrecorder2=""

while [ $EXIT -eq 1 ]
do
case $STATE in
0)
kdialog --title "RadioRecorder" --yesno "Do you want to exit the program?"
EXIT=$?
if [ $EXIT -eq 1 ]
then
STATE=1
fi
;;
1)
# ask radio stream URL
STREAM=`kdialog --title "RadioRecorder" --inputbox "Insert the radio stream url" $1 `
STREAMBUTTON=$?
if [ $STREAMBUTTON -eq 1 ]
then
STATE=0
else
# start mplayer in background to listen to the radio only if the ok button has been selected else exit
if [ $LISTENERmode -eq 1 ]
then
mplayer -vo null -vc null -cache 512 $STREAM&
else
xterm -e mplayer -vo null -vc null -cache 512 $STREAM&
fi

PIDlistener=$! # listener PID

if [ $LISTENERmode -eq 1 ]
then
while [ -z $PIDlistener2 ]
do
#repeat the check till PIDlistener2 is correctly detected
PIDlistener2=`ps -ef| awk '$3 == '$PIDlistener' { print $2 }'`
done
fi
STATE=2
fi
;;
2)
# select action to do
ACTION=`kdialog --title "RadioRecorder" --menu "Select an action:" 1 "Change URL" 2 "Record stream"`
ACTIONBUTTON=$?

if [ $ACTIONBUTTON -eq 1 ]
then
ACTION=$ACTIONBUTTON # if cancel is selected go back to url dialog
fi
if [ $ACTION -eq 1 ]
then
#if Change URL or Cancel has been selected kill listener and go back to URL page
#kill listener processes
if [ $LISTENERmode -eq 1 ]
then
kill -9 $PIDlistener2
fi
kill -9 $PIDlistener
# reinitialize PID variables
PIDlistener=""
if [ $LISTENERmode -eq 1 ]
then
PIDlistener2=""
fi
STATE=1
else
STATE=3
fi
;;
3)
# ask destination directory -- default home

DIR=$HOME
DIR=`kdialog --title "RadioRecorder - Select destination directory" --getexistingdirectory $DIR` #default destination directory is the user home
DIRBUTTON=$?
if [ $DIRBUTTON -eq 1 ]
then
#if Cancel has been selected go back to action page
STATE=2
else
STATE=4
fi
;;
4)
# ask file name at which will be added the date and eventually record stream
FILENAME="radio"
FILENAME=`kdialog --title "RadioRecorder - Save as" --inputbox "Insert the file name (date will be automatically added)" $FILENAME`
FILENAMEBUTTON=$?
if [ $FILENAMEBUTTON -eq 1 ]
then
#if Cancel has been selected go back to action page
STATE=3
else
#capture stream
DATE=`date +%Y_%m_%d_%H%M%S`
TEMPFILE=$TEMPDIR/$FILENAME-$DATE
FILE=$DIR/$FILENAME-$DATE
mkfifo $TEMPFILE.wav
lame $TEMPFILE.wav $FILE.mp3>/dev/null&
PIDconverter=$! #converter PIN
mplayer -cache 512 -vo null -vc null -ao pcm:fast:file="$TEMPFILE.wav" $STREAM>/dev/null&
PIDrecorder=$! #recorder PIN
while [ -z $PIDrecorder2 ]
do
#repeat the check till PIDrecorder2 is correctly detected
PIDrecorder2=`ps -ef| awk '$3 == '$PIDrecorder' { print $2 }'`
done
kdialog --msgbox "Press OK button to stop recording"
#stop recording
#kill converter
kill -9 $PIDconverter
#kill recorder processes
kill -9 $PIDrecorder2
kill -9 $PIDrecorder
# reinitialize PID variables
PIDconverter=""
PIDrecorder=""
PIDrecorder2=""
#removing temporary file
rm $TEMPFILE.wav
#go back to action page
STATE=2
fi
;;
esac
done

kdialog --title "RadioRecorder" --msgbox "Thank you for using radioRecorder"
echo "Bye Bye"
exit

masand
08-08-2008, 11:03
Non mi sembra niente male... :)

Complimenti!!!! :) :) :)

Non mi esprimo sulla parte "codice" perché non ne sono in grado... Pensi di fare anche un'interfaccia GTK?

P.S. Tralasciando il discorso "pesantezza" hai pensato magari ad usare Java come GUI in modo che sia portabile?

Un saluto a tutti..
masand

xwang
08-08-2008, 11:17
Non mi sembra niente male... :)

Complimenti!!!! :) :) :)

Non mi esprimo sulla parte "codice" perché non ne sono in grado... Pensi di fare anche un'interfaccia GTK?

P.S. Tralasciando il discorso "pesantezza" hai pensato magari ad usare Java come GUI in modo che sia portabile?

Un saluto a tutti..
masand

Per quanto riguarda java, non penso di usarla perchè non ho tanto tempo da dedicare a questa cosa e per usare java dovrei andarmi a vedere troppe cose. Per le gtk se ci fosse un qualcosa di analogo a kdialog si potrbbe, forse, modificare lo script per essere utilizzato con l'uno o l'altro programma. Il fatto è che uso kde quindi se qualcuno con gnome ha voglia di cimentarsi in questa cosa sono d'accordo.
Per il momento vorrei fare in modo che lo script esca correttamente anche premendo ctrl-c e vorrei vedere se si può evitare di chiamare xterm in modo che non mi debba preoccupare del caso in cui l'utente chiuda le finestre di xterm.
Xwang

PS se qualcuno ha voglia di trasformarlo in un'applicazione java, ovviamente è liberissimo di farlo

Fil9998
08-08-2008, 13:13
fiko, non appena ho tempo ci gioco.

xwang
08-08-2008, 14:01
Qualcuno sa come ottenere la lista dei pid dei sottoprocessi conoscendo il pid del genitore?
Potrei eliminare xterm
Xwang

xwang
08-08-2008, 16:10
Ho fatto delle modifiche eliminando xterm.
Manca ancora di detectare il ctrl-C e se possibile di prevedere la pausa della registrazione (ma non saprei proprio come fare ... idee?)
Xwang

PS che dite lo pubblico?
KDEdev o direttamente in sourceforge?

xwang
14-08-2008, 13:00
Pensavo che sarebbe bello poter memorizzare le URL inserite dal'utente e riproporle in un capo tipo tendina (da cui poter eventualmente inserire anche nuove url).
Come faccio a gestire questi dati? Devo usare un file esterno che devo parsare, giusto? Qualcuno mi può aiutare?
Xwang

PS metto nel primo post la versione attuale

Fil9998
14-08-2008, 13:02
per favore, ogni tanto quando aggiorni lo uppi 'sto tread, mi interessa molto, come utente... non so programmare...

fra qualche giono di ritorno dalle ferie lo proverò,

intanto grazie.

masand
14-08-2008, 13:07
Pensavo che sarebbe bello poter memorizzare le URL inserite dal'utente e riproporle in un capo tipo tendina (da cui poter eventualmente inserire anche nuove url).
Come faccio a gestire questi dati? Devo usare un file esterno che devo parsare, giusto? Qualcuno mi può aiutare?
Xwang

PS metto nel primo post la versione attuale

Ciao,
il tuo progetto non è niente male...

Potresti pubblicarlo su www.kde-apps.org, se non lo conosci, è organizzato grosso modo come un forum, dove i thread sono i programmi proposti e ognuno poi posta le sue impressioni e/o eventuali suggerimenti.

Potresti impostare il tuo post mettendo l'elenco delle caratteristiche e una lista delle cose che vorresti implementare... vedrai che troverai sicuramente chi ti potrà aiutare.

L'unico limite, se limite lo vogliamo chiamare, è di usare obbligatoriamente la lingua inglese.

Un saluto a tutti...
masand

xwang
14-08-2008, 13:59
Ciao,
il tuo progetto non è niente male...

Potresti pubblicarlo su www.kde-apps.org, se non lo conosci, è organizzato grosso modo come un forum, dove i thread sono i programmi proposti e ognuno poi posta le sue impressioni e/o eventuali suggerimenti.

Potresti impostare il tuo post mettendo l'elenco delle caratteristiche e una lista delle cose che vorresti implementare... vedrai che troverai sicuramente chi ti potrà aiutare.

L'unico limite, se limite lo vogliamo chiamare, è di usare obbligatoriamente la lingua inglese.

Un saluto a tutti...
masand

Effettivamente è quello che pensavo di fare.
Tuttavia, poichè ho scoperto che c'è in gnome un programma simile a kdialog, lo vorrei trasformare in uno script indipendente dal window manager utilizzato, o meglio, che capisca se è in esecuzione gnome o kde e si adegui. In quest'ottica, forse è preferibile metterlo in un sito "neutrale" come può essere sourceforge. Sei d'accordo?
Il tutto a ferie finite perchè, a parte lo slancio iniziale, tutte queste aggiunte e abbellimenti, le farò con calme nei ritagli di tempo del dopolavoro.
Xwang

masand
14-08-2008, 14:19
Effettivamente è quello che pensavo di fare.
Tuttavia, poichè ho scoperto che c'è in gnome un programma simile a kdialog, lo vorrei trasformare in uno script indipendente dal window manager utilizzato, o meglio, che capisca se è in esecuzione gnome o kde e si adegui. In quest'ottica, forse è preferibile metterlo in un sito "neutrale" come può essere sourceforge. Sei d'accordo?
Il tutto a ferie finite perchè, a parte lo slancio iniziale, tutte queste aggiunte e abbellimenti, le farò con calme nei ritagli di tempo del dopolavoro.
Xwang
Xwang

Anche... io ti ho proposto quel sito perché ho visto che molti si danno anche gli aiuti e sicuramente potresti trovare persone competenti che ti possono aiutare rispondendo alle tue domande, inoltre molti postano i loro stessi lavori sia su KDE-Apps che su GTK-Apps, ma ovviamente, scegli tu come muoverti. :)

Hai pensato di postare il tuo lavoro anche nella sezione "Programmazione" di questo forum?

In bocca al lupo per il tuo progetto ;)

Un saluto a tutti...
masand

xwang
14-08-2008, 14:26
... Hai pensato di postare il tuo lavoro anche nella sezione "Programmazione" di questo forum?

In bocca al lupo per il tuo progetto ;)

Un saluto a tutti...
masand

Grazie per i consigli.
Non l'ho postata in programmazione perchè temevo che potesse essere considerata una forma di cross-posting. Inoltre ho pensato che trattandosi di script bash, gli utenti linux fossero il "pubblico" migliore (oltre che i fruitori del programma che di certo non ho intenzione di portare su win).
Xwang

masand
14-08-2008, 14:48
Grazie per i consigli.
Non l'ho postata in programmazione perchè temevo che potesse essere considerata una forma di cross-posting. Inoltre ho pensato che trattandosi di script bash, gli utenti linux fossero il "pubblico" migliore (oltre che i fruitori del programma che di certo non ho intenzione di portare su win).
Xwang

Beh, lo scripting in fin dei conti è sempre una forma di programmazione no? :)

E comunque non la vedo come una forma di cross posting in realtà, in fin dei cnti qui cerchi pareri prettamente "linuxiani" :) dall'altra parte cercheresti consigli sul "come" e "in che maniera"... almeno dal mio punto di vista :)

Un saluto a tutti...
masand

gash
14-08-2008, 15:23
Per le gtk credo tu possa usare buc http://buc.intilinux.com/wiki/index.php?title=Pagina_principale