Ascoltare la radio da terminale.

Mer, 30/07/2008 - 15:40

Ascoltare la radio da terminale.

Inviato da marcosan 5 commenti

Due piccoli "script" per ascoltare le radio preferite on-line e gestirle in maniera comoda e veloce direttamente dal terminale.

Introduzione

Ciao, quelli che vi presento sono due piccoli "script" che permettono di avere una interfaccia minimale per ascoltare alcune radio on-line.

Li ho scritti ieri pomeriggio nell'intento di imparare un minimo di programmazione in bash e per avere una "radio" minimale, ma funzionale.

Gli script

Creiamo uno script nominandolo myradio-manager


#!/bin/bash
#-----------------------------------------------------------------
# Questo programma permette di aggiungere/rimuovere le stazioni
# radio contenute nel file $HOME/.myradiorc.
#-----------------------------------------------------------------
#
#-----------------------------------------------------------------
# Variabile file $HOME/.myradiorc .
if [ -f $HOME/.myradiorc ]
then
LISTA_RADIO=$HOME/.myradiorc
MAX_ID=`wc -l $LISTA_RADIO | cut -d' ' -f1`
else
touch "$HOME/.webradiorc"
LISTA_RADIO=$HOME/.myradiorc
MAX_ID=0
fi
#-----------------------------------------------------------------
VERO=1
#-----------------------------------------------------------------
# Funzione per aggiungere una stazione radio.
add_radio()
{
NEW_ID=`echo "$MAX_ID+1"|bc`
MAX_ID=$NEW_ID
if [ "$NEW_ID" -le 9 ]
then
echo "0$NEW_ID|$NOME_RADIO|$INDIRIZZO_RADIO">>$LISTA_RADIO
else
echo "$NEW_ID|$NOME_RADIO|$INDIRIZZO_RADIO">>$LISTA_RADIO
fi
}
#-----------------------------------------------------------------
# Funzione per rimuovere una stazione radio.
rm_radio()
{
grep -v $RM_ID"|" .myradiorc > .tmp1_myradiorc
colrm 1 2 < .tmp1_myradiorc > .tmp2_myradiorc
rm .tmp1_myradiorc
nl -n rz -s "" -w 2 .tmp2_myradiorc > .myradiorc
rm .tmp2_myradiorc
}
#-----------------------------------------------------------------
# Funzione che elenca le radio disponibili.
lista_radio()
{
echo " Id Radio"
echo "----------------------"
cat $LISTA_RADIO | awk -F '|' '{ print "[\033[31m " $1 "\033[0m ] : " $2}'
}
#-----------------------------------------------------------------
while [ "$VERO" -eq 1 ]
do
clear
echo "[ 1 ] : Aggiungi una radio alla lista"
echo "[ 2 ] : Rimuovi una radio dalla lista"
echo "[ 3 ] : Esci"
echo
echo -n "Operazione da effettuare: "
read ID
case "$ID" in
1)
echo -n "Nome della radio: "
read NOME_RADIO
echo -n "Indirizzo della radio: "
read INDIRIZZO_RADIO
add_radio
;;
2)
if [ "$MAX_ID" -gt 0 ]
then
lista_radio
echo -e "[\033[34m 00 \033[0m] : Esci."
echo
echo -n "Inserire l'ID della radio da rimuovere: "
read RM_ID
if [ "$RM_ID" -ge 1 ] && [ "$RM_ID" -le "$MAX_ID" ]
then
rm_radio
MAX_ID=`echo "$MAX_ID-1"|bc`
else
if [ "$RM_ID" -ne 0 ]
then
echo "`pwd`/`basename $0` - Errore: ID non valido."
sleep 3
fi
fi
else
echo "Il file $LISTA_RADIO e' vuoto."
echo "Impossibile rimuovere radio."
sleep 3
fi
;;

3)
let VERO=0
;;
*)
echo "`pwd`/`basename $0` - Errore: codice non valido."
sleep 3
;;
esac
done
clear

Creiamo uno script nominandolo myradio-player


#!/bin/bash
#-----------------------------------------------------------------
# Questo programma permette di ascoltare la radio da terminale
# tramite un qualsiasi riproduttore multimediale (mplayer e'
# quello predefinito). La lista delle radio e' contenuta nel file
# $HOME/.myradiorc.
# E' possibile aggiungere e togliere le stazioni radio modificando
# direttamente il file o tramite il programma myradio-manager.
#-----------------------------------------------------------------
#
#-----------------------------------------------------------------
# Variabile del riproduttore multimediale.
# mplayer
if ! PLAYER=`which mplayer`
then
echo "`pwd`/`basename $0` - Errore: il riproduttore mplayer non esiste."
exit 1
fi
# vlc
#if ! PLAYER=`which vlc`
# then
# echo "`pwd`/`basename $0` - Errore: il riproduttore vlc non esiste."
# exit 1
#fi
#-----------------------------------------------------------------
# Variabile modalita' "silenziosa".
# mplayer
QUIET="-really-quiet"
# vlc
#QUIET="-I rc"
#-----------------------------------------------------------------
# Variabile file $HOME/.myradiorc .
if [ -f $HOME/.myradiorc ]
then
LISTA_RADIO=$HOME/.myradiorc
else
echo "`pwd`/`basename $0` - Errore: il file $HOME/.myradiorc non esiste."
echo "Utilizzare il programma myradio-manager per crearlo."
exit 1
fi
#-----------------------------------------------------------------
VERO=1
MIN_ID="01"
MAX_ID=`wc -l $LISTA_RADIO | cut -d' ' -f1`
#-----------------------------------------------------------------
# Funzione che elenca le radio disponibili.
lista_radio()
{
echo " Id Radio"
echo "---------------------------"
cat $LISTA_RADIO | awk -F '|' '{ print "[\033[31m " $1 "\033[0m ] : " $2}'
echo "---------------------------"
echo -e "[\033[34m 00 \033[0m] : Esci."
}
#-----------------------------------------------------------------
# Funzione che riproduce la radio selezionata.
play_radio()
{
INDIRIZZO=`grep ^$1 $LISTA_RADIO | awk -F '|' '{ print $3 }'`
$PLAYER $QUIET $INDIRIZZO
}
#-----------------------------------------------------------------
while [ "$VERO" -eq 1 ]
do
clear
lista_radio
echo
echo -n "Numero della radio: "
read ID
if [ "$ID" -ge "$MIN_ID" ]&& [ "$ID" -le "$MAX_ID" ]
then
play_radio $ID
else
if [ "$ID" -eq 0 ]
then
let VERO=0
else
echo "`pwd`/`basename $0` - Errore: codice della radio non valido."
sleep 3
fi
fi
done
clear

Rendiamo eseguibili i due file appena creati tramite il comando

$ chmod +x myradio-manager myradio-player

Vi consiglio di salvare i file sopra nella directory $HOME/script e di aggiungerla al vostro PATH per rendere piu' comodo l'utilizzo degli "script".
Utilizzo

A questo punto avete i due file myradio-player e myradio-manager, il primo come avrete intuito serve ad ascoltare la radio, il secondo a gestire la playlist delle radio stesse che e' contenuta nel file ~/.myradiorc.

Il file ~/.myradiorc

Questo file si genera tramite lo script myradio-manager, per comodita' riporto anche quello che mi sono creato con alcune radio italiane

Introduzione

Il codice e' commentato, l'unica cosa che serve e' un player multimediale.

Spero che a qualcuno possa tornare utile, per eventuali suggerimenti e miglioramenti fatemi sapere, sono alle prime armi con il bash!!

Marco





Commenti

Ritratto di marcosan
#1

Inviato da marcosan il Ven, 01/08/2008 - 08:38.

Errata

Non so come fare per correggere la guida, quindi riporto le correzioni qui:

1) In entrambi gli script ci sono due righe con simboli strani, in realta' le righe devono essere come segue (spero che ora siano visualizzate correttamente, la mia anteprima e' corretta!!):

cat $LISTA_RADIO | awk -F '|' '{ print "[\033[31m " $1 "\033[0m ] : " $2}'

echo -e "[\033[34m 00 \033[0m] : Esci."

2) la riga

INDIRIZZO=`grep $1 $LISTA_RADIO | awk -F '|' '{ print $3 }'`

deve essere sostituita con

INDIRIZZO=`grep ^$1 $LISTA_RADIO | awk -F '|' '{ print $3 }'`

3) il titolo dell'ultimo paragrafo dovrebbe essere Concusioni Smile

Scusate ancora, e se qualcuno sa come sia possibile correggere la guida mi faccia sapere!!

"La matematica e' l'arte di dare lo stesso nome a cose diverse."
H.Poincare (1854-1912).



Ritratto di pietro
#2

Inviato da pietro il Sab, 02/08/2008 - 13:53.

Re: Errata

Ho corretto io la guida. Controlla se va bene, in caso contrario fammi un fischio.

Grazie del contributo!

Pietro

Debian. Be unique.



Ritratto di marcosan
#3

Inviato da marcosan il Lun, 04/08/2008 - 07:36.

Re: Errata

Grazie Pietro, ora mi sembra corretta!

Ciao ciao

"La matematica e' l'arte di dare lo stesso nome a cose diverse."
H.Poincare (1854-1912).



Ritratto di yvesBsAs
#4

Inviato da yvesBsAs il Dom, 31/08/2008 - 19:31.

Re: Errata

Marcos83, apparentemente il tuo script richiede qualcosa che non ho, preciso che uso Ubuntu Hardy ed ascolto sovente la radio immettendo un url di questo tipo:

mplayer mms http://live.mediaserver.kataweb.it/radiodeejay

nel terminale, ho provato il tuo script e mi da un errore socket:

 
Id Radio
---------------------------
[ 01 ] : Radio Uno
[ 02 ] : Radio Due
[ 03 ] : Radio Tre
[ 04 ] : Radio Italia
[ 05 ] : Radio Deejay
[ 06 ] : RDS
[ 07 ] : Radio 105
[ 08 ] : Radio 101
[ 09 ] : RadioCapital
[ 10 ] : m2o
[ 11 ] : Radio24
[ 12 ] : Radio Metro
[ 13 ] : RadioNumberOne
[ 14 ] : Radio Reporter
---------------------------
[ 00 ] : Esci.
 
Numero della radio: 05
mplayer: could not connect to socket
mplayer: No such file or directory

Questo appare durante l'ascolto, in corrispondenza di tagli del segnale (ho una connessione che mi vergogno a chiamare "adsl"..)
overflow in spectral RLE, ignoring
overflow in spectral RLE, ignoring
overflow in spectral RLE, ignoring
overflow in spectral RLE, ignoring
overflow in spectral RLE, ignoring
overflow in spectral RLE, ignoring
overflow in spectral RLE, ignoring
overflow in spectral RLE, ignoring
overflow in spectral RLE, ignoring
overflow in spectral RLE, ignoring
overflow in spectral RLE, ignoring
overflow in spectral RLE, ignoring
overflow in spectral RLE, ignoring
overflow in spectral RLE, ignoring

La radio si ascolta, quindi lo script funziona, ma non capisco troppo i due errori.
Se serve io sono nattato alla grande Sad
acc. ho visto adesso qualcosa disimile quando lo avvio con il mio comando:

yves@yves-cdc:~$ mplayer mms http://live.mediaserver.kataweb.it/radiodeejay
MPlayer 1.0rc2-4.2.3 (C) 2000-2007 MPlayer Team
CPU: Genuine Intel(R) CPU           T2300  @ 1.66GHz (Family: 6, Model: 14, Stepping: 8)
CPUflags:  MMX: 1 MMX2: 1 3DNow: 0 3DNow2: 0 SSE: 1 SSE2: 1
Compiled with runtime CPU detection.
mplayer: could not connect to socket
mplayer: No such file or directory
Failed to open LIRC support. You will not be able to use your remote control.
 
Playing mms.
File not found: ';mms';
Failed to open mms.
 
 
Playing http://live.mediaserver.kataweb.it/radiodeejay.
Resolving live.mediaserver.kataweb.it for AF_INET6...
Couldn't resolve name for AF_INET6: live.mediaserver.kataweb.it
Resolving live.mediaserver.kataweb.it for AF_INET...
Connecting to server live.mediaserver.kataweb.it[213.92.19.8]: 80...
STREAM_ASF, URL: http://live.mediaserver.kataweb.it/radiodeejay
Resolving live.mediaserver.kataweb.it for AF_INET6...
Couldn't resolve name for AF_INET6: live.mediaserver.kataweb.it
Resolving live.mediaserver.kataweb.it for AF_INET...
Connecting to server live.mediaserver.kataweb.it[213.92.19.8]: 80...
Resolving live.mediaserver.kataweb.it for AF_INET6...
Couldn't resolve name for AF_INET6: live.mediaserver.kataweb.it
Resolving live.mediaserver.kataweb.it for AF_INET...
Connecting to server live.mediaserver.kataweb.it[213.92.19.8]: 80...
Cache size set to 64 KBytes
Cache fill: 12.50% (8192 bytes)   
ASF file format detected.
[asfheader] Audio stream found, -aid 1
[asfheader] Audio stream found, -aid 2
Clip info:
 name: Radio Deejay
  author: Kataweb S.p.A.<br /> copyright: Elemedia S.p.A.
  =======================================================================
Forced audio codec: mad
Opening audio decoder: [ffmpeg] FFmpeg/libavcodec audio decoders
AUDIO: 22050 Hz, 2 ch, s16le, 32.0 kbit/4.54% (ratio: 4003-&gt;88200)
Selected audio codec: [ffwmav2] afm: ffmpeg (DivX audio v2 (FFmpeg))
=======================================================================
AO: [pulse] 22050Hz 2ch s16le (2 bytes per sample)
Video: no video
Starting playback...

mplayer c'è e funziona :-o



Ritratto di marcosan
#5

Inviato da marcosan il Mar, 02/09/2008 - 11:12.

Re: Errata

Ciao, prima di tutto sono contento che qualcuno li abbia provati Smile

Per altri problemi con mplayer ti direi di aprire un post e non chiedere qui, comunque:

Per il primo "errore"
Quote:

mplayer: could not connect to socket
mplayer: No such file or directory

risolvi aggiungendo nel file ~/.mplayer/config
Quote:

nojoystick=1
nolirc=1

ti servirebe solo il secondo, ma per sicurezza Smile

Per il secondo non so perche' non mi e' mai capitato, ma in google ho visto che c'e' parecchio!

Ciao

"La matematica e' l'arte di dare lo stesso nome a cose diverse."
H.Poincare (1854-1912).