<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="ca">
	<id>http://wiki.joanillo.org/index.php?action=history&amp;feed=atom&amp;title=Raspberry_Pi%3A_Internet_R%C3%A0dio</id>
	<title>Raspberry Pi: Internet Ràdio - Historial de revisió</title>
	<link rel="self" type="application/atom+xml" href="http://wiki.joanillo.org/index.php?action=history&amp;feed=atom&amp;title=Raspberry_Pi%3A_Internet_R%C3%A0dio"/>
	<link rel="alternate" type="text/html" href="http://wiki.joanillo.org/index.php?title=Raspberry_Pi:_Internet_R%C3%A0dio&amp;action=history"/>
	<updated>2026-04-20T11:33:19Z</updated>
	<subtitle>Historial de revisió per a aquesta pàgina del wiki</subtitle>
	<generator>MediaWiki 1.34.2</generator>
	<entry>
		<id>http://wiki.joanillo.org/index.php?title=Raspberry_Pi:_Internet_R%C3%A0dio&amp;diff=250070&amp;oldid=prev</id>
		<title>Joan: /* Enllaços */</title>
		<link rel="alternate" type="text/html" href="http://wiki.joanillo.org/index.php?title=Raspberry_Pi:_Internet_R%C3%A0dio&amp;diff=250070&amp;oldid=prev"/>
		<updated>2013-01-04T00:50:35Z</updated>

		<summary type="html">&lt;p&gt;&lt;span dir=&quot;auto&quot;&gt;&lt;span class=&quot;autocomment&quot;&gt;Enllaços&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Pàgina nova&lt;/b&gt;&lt;/p&gt;&lt;div&gt;=Introducció=&lt;br /&gt;
El que es busca és una cosa molt mínima, amb un sol pulsador. Apretar dues vegades ràpidament el botó per engegar/aturar la ràdio. Si està engegada, en anar apretant vaig canviant d'emissora.&lt;br /&gt;
=Desenvolupament=&lt;br /&gt;
Em baso en:&lt;br /&gt;
*http://contractorwolf.wordpress.com/raspberry-pi-radio/&lt;br /&gt;
i concretament en ''Setting up MPD and MPC'':&lt;br /&gt;
*http://miro.oorganica.com/raspberry-pi-mpd/&lt;br /&gt;
&lt;br /&gt;
Tot el sistema està basat en '''mpd''' (music player daemon) i '''mpc''' (music player client), que són el servidor i el client (el client controla el servidor)&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$ sudo apt-get install mpd mpc&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
El fitxer de configuració és /etc/mpd.conf&lt;br /&gt;
&lt;br /&gt;
De la directiva ''audio_output'' no toco res:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
audio_output {&lt;br /&gt;
        type            &amp;quot;alsa&amp;quot;&lt;br /&gt;
        name            &amp;quot;My ALSA Device&amp;quot;&lt;br /&gt;
        device          &amp;quot;hw:0,0&amp;quot;        # optional&lt;br /&gt;
        format          &amp;quot;44100:16:2&amp;quot;    # optional&lt;br /&gt;
        mixer_device    &amp;quot;default&amp;quot;       # optional&lt;br /&gt;
        mixer_control   &amp;quot;PCM&amp;quot;           # optional&lt;br /&gt;
        mixer_index     &amp;quot;0&amp;quot;             # optional&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
i de la directiva audio_input el link diu de registrar-se a last.fm (http://www.last.fm/) (jo ho he fet, joanillo/jq****), però en realitat he comprovat que no cal. La única cosa que necessita audio_input és una línia que posi ''plugin'', encara que estigui buida:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
input {&lt;br /&gt;
#       plugin          &amp;quot;lastfm&amp;quot;  &lt;br /&gt;
#       user            &amp;quot;joanillo&amp;quot;&lt;br /&gt;
#       password        &amp;quot;jq****&amp;quot;&lt;br /&gt;
plugin &amp;quot;&amp;quot;&lt;br /&gt;
#        plugin &amp;quot;curl&amp;quot;&lt;br /&gt;
#       proxy &amp;quot;proxy.isp.com:8080&amp;quot;&lt;br /&gt;
#       proxy_user &amp;quot;user&amp;quot;&lt;br /&gt;
#       proxy_password &amp;quot;password&amp;quot;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
per tant la cosa queda molt simple.&lt;br /&gt;
&lt;br /&gt;
'''last.fm''' és interessant perquè tenen una API i per tant pots programar les teves pròpies aplicacions d'escriptori o per a mòbil. Però d'altra banda sembla ser que tenen bastants problemes de llicències.&lt;br /&gt;
&lt;br /&gt;
A ''/etc/modules'' he de fer referència al xip que té la RP, que és el SoC de Broadcom 2835:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
snd_bcm2835&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Tenim dos sortides d'audio: el jack stereo (sortida 1), i HDMI (sortida 2):&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$ sudo amixer cset numid=3 1&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Ara ja podem reiniciar el servei mpd:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$ sudo /etc/init.d/mpd restart&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
i puc començar a escoltar música:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$ mpc&lt;br /&gt;
volume:100%   repeat: on    random: off   single: off   consume: off&lt;br /&gt;
&lt;br /&gt;
$ mpc add http://s1.radio.lclhst.net:1337/&lt;br /&gt;
$ mpc play&lt;br /&gt;
Minimal, Techno, Electro Sets @ http://radio.lclhst.net/: Patrick Schulz - Promotional Mix - October 2008&lt;br /&gt;
[playing] #1/1 0:04/0:00 (0%)&lt;br /&gt;
volume:100% repeat: on random: off single: off consume: off&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
funciona perfectament. A mi no em surt volume:100%, sinó que em surt volume: n/c.&lt;br /&gt;
&lt;br /&gt;
Per controlar el volum per línia de comanda seria:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$ mpc volume 100&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
però a mi no em funciona (tot i que per defecte s'escolta bé al 100%). Si vull que funcioni he de fer:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$ joe /etc/mpd/mpd.conf&lt;br /&gt;
i descomentar&lt;br /&gt;
mixer_type                      &amp;quot;software&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
aleshores ja puc controlar el volum per línia de comanda&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$ mpc volume 50&lt;br /&gt;
$ mpc volume 100&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
==Llistes de ràdio==&lt;br /&gt;
He provat amb una ràdio d'Internet que fa música electrònica:&lt;br /&gt;
*http://s1.radio.lclhst.net:1337/&lt;br /&gt;
*http://radio.lclhst.net/&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Server Status: Server is currently up and public.&lt;br /&gt;
Stream Title: Minimal, Techno, Electro Sets @ http://radio.lclhst.net/&lt;br /&gt;
Stream Genre: Electronic&lt;br /&gt;
Current Song: Wighnomy Brothers - Klangkino 30.10.2008&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Si vull afegir noves ràdios ho faig amb la comanda '''add''':&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
mpc add http://s1.radio.lclhst.net:1337/&lt;br /&gt;
mpc add http://s3.radio.lclhst.net:1337/&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
i veig les ràdios actives amb&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$ mpc playlist&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Puc fer sonar la primera o la segona ràdio fent:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$ mpc play 1&lt;br /&gt;
$ mpc play 2&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Per esborrar la llista de ràdios:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$ mpc clear&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Com trobo d'altres ràdios disponibles?:&lt;br /&gt;
*http://www.listenlive.eu/&lt;br /&gt;
*http://www.listenlive.eu/spain.html&lt;br /&gt;
&lt;br /&gt;
És fàcil utilitzar les que tenen el format que conec. Per exemple:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
# ACE FM&lt;br /&gt;
$ mpc add http://208.43.9.96:8106/&lt;br /&gt;
# vaughan radio&lt;br /&gt;
mpc add http://vaughanradio.streaming-pro.com:8012/&lt;br /&gt;
# disco music radio&lt;br /&gt;
mpc add http://www.discomusicradio.com:8100/&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
També hi ha una classificació per gèneres. Per escoltar jazz:&lt;br /&gt;
*http://www.listenlive.eu/jazz.html&lt;br /&gt;
per ex,&lt;br /&gt;
*http://listen.onmyradio.net:8002/&lt;br /&gt;
&lt;br /&gt;
Ara bé, què passa amb les URL que tenen format ''pls'' o ''m3u''. Doncs molt fàcil, són fitxers de text que a dins tenen la URL a utilitzar. Una URL o vàries, doncs poden ser playlists.&lt;br /&gt;
&lt;br /&gt;
Per exemple, amb iCatJazz, el contingut del fitxer ''http://directe-http.emissio.catradio.cat:8000/catradio.cat/icat_jazz.m3u'' és ''http://directe-http.emissio.catradio.cat:8000/catradio.cat/icat_jazz'', i només s'ha de fer:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$ mpc add http://directe-http.emissio.catradio.cat:8000/catradio.cat/icat_jazz&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
El mateix per als fitxers pls: &lt;br /&gt;
*http://www.polskastacja.pl/play/aac_jazz.pls&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$ cat aac_jazz.pls &lt;br /&gt;
[playlist]&lt;br /&gt;
File1=http://188.165.20.29:8750&lt;br /&gt;
Title1=Server1-&amp;gt; &amp;gt;&amp;gt;&amp;gt; P O L S K A S T A C J A &amp;lt;&amp;lt;&amp;lt; - JAZZ (AACPLUS - Wymagany nowy winamp!)&lt;br /&gt;
Length1=-1&lt;br /&gt;
File2=http://188.165.22.29:8750&lt;br /&gt;
Title2=Server2-&amp;gt; &amp;gt;&amp;gt;&amp;gt; P O L S K A S T A C J A &amp;lt;&amp;lt;&amp;lt; - JAZZ (AACPLUS - Wymagany nowy winamp!)&lt;br /&gt;
Length2=-1&lt;br /&gt;
File3=http://87.98.236.207:80&lt;br /&gt;
Title3=Server3-&amp;gt; &amp;gt;&amp;gt;&amp;gt; P O L S K A S T A C J A &amp;lt;&amp;lt;&amp;lt; - JAZZ (AACPLUS - Wymagany nowy winamp!)&lt;br /&gt;
Length3=-1&lt;br /&gt;
File4=http://91.121.92.167:8700&lt;br /&gt;
Title4=Server1-&amp;gt; &amp;gt;&amp;gt;&amp;gt; P O L S K A S T A C J A &amp;lt;&amp;lt;&amp;lt;- JAZZ&lt;br /&gt;
Length4=-1&lt;br /&gt;
NumberOfEntries=4&lt;br /&gt;
Version=2&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
En aquest cas veig que conté diversos fitxers.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$ mpc playlist&lt;br /&gt;
ICat Jazz&lt;br /&gt;
&amp;gt;&amp;gt;&amp;gt; POLSKASTACJA .PL &amp;gt;&amp;gt;&amp;gt; - JAZZ (Polskie Radio),aacplus: Gerry Mulligan - Blues For Gerry&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Es pot obtenir directament la informació que hi ha dins els fitxers (http://www.raspberrypi.org/phpBB3/viewtopic.php?f=9&amp;amp;t=4031). Un exemple de codi amb bash per obtenir ''Los 40 principales'' seria:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#!/bin/bash&lt;br /&gt;
rm LOS40*&lt;br /&gt;
wget http://provisioning.streamtheworld.com/pls/LOS40.pls&lt;br /&gt;
grep &amp;quot;File1=&amp;quot; LOS40.pls &amp;gt; streamaddr&lt;br /&gt;
mpc clear&lt;br /&gt;
mpc add $(sed 's/File1=//g' streamaddr)&lt;br /&gt;
mpc play&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
es tracta d'extreure la informació que hi ha dins el fitxer.&lt;br /&gt;
&lt;br /&gt;
D'altres ràdios:&lt;br /&gt;
*iCatFM: http://directe-http.emissio.catradio.cat:8000/catradio.cat/tot_cat&lt;br /&gt;
*Catalunya Ràdio: http://directe-http.emissio.catradio.cat:8000/catradio.cat/cat_radio&lt;br /&gt;
&lt;br /&gt;
==Recuperar la informació d'allò que estic escoltant==&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$ mpc playlist&lt;br /&gt;
ICat Jazz&lt;br /&gt;
&amp;gt;&amp;gt;&amp;gt; POLSKASTACJA .PL &amp;gt;&amp;gt;&amp;gt; - JAZZ (Polskie Radio),aacplus: Gerry Mulligan - Blues For Gerry&lt;br /&gt;
&lt;br /&gt;
$ mpc play 1&lt;br /&gt;
$ mpc play 2&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Amb l'opció -f puc filtrar la informació que em dona la comanda ''playlist'':&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$ mpc -f &amp;quot;[[%artist% - ]%title%]|[%file%]&amp;quot; playlist&lt;br /&gt;
http://directe-http.emissio.catradio.cat:8000/catradio.cat/icat_jazz&lt;br /&gt;
Fourplay - Put Our Hearts Together (Vocal Version)&lt;br /&gt;
&lt;br /&gt;
$ mpc -f &amp;quot;[%title%]&amp;quot; playlist&lt;br /&gt;
&lt;br /&gt;
Fourplay - Put Our Hearts Together (Vocal Version)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=Programació=&lt;br /&gt;
Es tracta de programar els scripts per arrencar/aturar el servidor mpd, i llegir les llstes de ràdio que he seleccionat. L'electrònica necessària és mínima, tant sols cal un botó i programar un pin GPIO. Evidentment la cosa es pot complicar amb una pantalla LCD per saber què estic escoltant, més botons, etc,... però no és l'objectiu.&lt;br /&gt;
&lt;br /&gt;
El primer que hem de fer és que el dimoni '''mpd''' no arrenqui en l'inici del sistema. Un podria pensar que seria tan fàcil com canviar ''true'' per ''false'' en el fitxer /etc/init.d/mpd, però no. La solució està més avall, desactivar el dimoni amb rc-update.&lt;br /&gt;
&lt;br /&gt;
'''radio_internet_v1.sh''' (versió 1):&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#!/bin/bash&lt;br /&gt;
&lt;br /&gt;
#functions&lt;br /&gt;
start_mpd ()&lt;br /&gt;
{&lt;br /&gt;
  echo Starting mpd...&lt;br /&gt;
  /etc/init.d/mpd start&lt;br /&gt;
  sleep 2&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
stop_mpd ()&lt;br /&gt;
{&lt;br /&gt;
  echo Stopping mpd...&lt;br /&gt;
  /etc/init.d/mpd stop&lt;br /&gt;
  sleep 2&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
play_radio ()&lt;br /&gt;
{&lt;br /&gt;
echo ${MYARRAY[$id_radio]}&lt;br /&gt;
mpc clear&lt;br /&gt;
mpc add ${MYARRAY[$id_radio]}&lt;br /&gt;
mpc play&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
#main program&lt;br /&gt;
llista=&amp;quot;radio_internet.txt&amp;quot;&lt;br /&gt;
&lt;br /&gt;
index=0&lt;br /&gt;
&lt;br /&gt;
while read line ; do&lt;br /&gt;
   MYARRAY[$index]=&amp;quot;$line&amp;quot;&lt;br /&gt;
   index=$(($index+1))&lt;br /&gt;
done &amp;lt; $llista  &lt;br /&gt;
                      &lt;br /&gt;
echo ${MYARRAY[0]}: ${MYARRAY[1]}&lt;br /&gt;
echo $index&lt;br /&gt;
&lt;br /&gt;
RANG=$((($index+1)/2))&lt;br /&gt;
number=$RANDOM&lt;br /&gt;
let &amp;quot;number %= $RANG&amp;quot;&lt;br /&gt;
#           ^^&lt;br /&gt;
#echo &amp;quot;Random number less than $RANG  ---  $number&amp;quot;&lt;br /&gt;
id_radio=$((($number*2)+1))&lt;br /&gt;
echo &amp;quot;radio seleccionada: $id_radio&amp;quot;&lt;br /&gt;
                     &lt;br /&gt;
#start_mpd&lt;br /&gt;
play_radio&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
i la versió 4, '''radio_internet_v4.sh''' queda: &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#!/bin/bash&lt;br /&gt;
&lt;br /&gt;
#led&lt;br /&gt;
red=0&lt;br /&gt;
#botó&lt;br /&gt;
button=8&lt;br /&gt;
&lt;br /&gt;
# functions:&lt;br /&gt;
setup ()&lt;br /&gt;
{&lt;br /&gt;
  gpio mode $red out&lt;br /&gt;
  gpio mode $button in&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
waitButton1sttime ()&lt;br /&gt;
{&lt;br /&gt;
&lt;br /&gt;
  while [ `gpio read $button` = 1 ]; do&lt;br /&gt;
    espera=1&lt;br /&gt;
    sleep 0.03&lt;br /&gt;
  done&lt;br /&gt;
  &lt;br /&gt;
  #from: http://stackoverflow.com/questions/3683434/using-time-command-in-bash-script&lt;br /&gt;
  # UNIX timestamp concatenated with nanoseconds&lt;br /&gt;
  T=&amp;quot;$(date +%s%N)&amp;quot;&lt;br /&gt;
&lt;br /&gt;
  while [ `gpio read $button` = 0 ]; do&lt;br /&gt;
    sleep 0.03&lt;br /&gt;
  done&lt;br /&gt;
   &lt;br /&gt;
}&lt;br /&gt;
           &lt;br /&gt;
waitButton2ndtime ()&lt;br /&gt;
{&lt;br /&gt;
&lt;br /&gt;
  T1=&amp;quot;$(($(date +%s%N)-T))&amp;quot;&lt;br /&gt;
                  &lt;br /&gt;
  while [ `gpio read $button` = 1 ]  &amp;amp;&amp;amp; [ $T1 -le 300000000 ]; do&lt;br /&gt;
    sleep 0.03&lt;br /&gt;
    # Time interval in nanoseconds&lt;br /&gt;
    T1=&amp;quot;$(($(date +%s%N)-T))&amp;quot;&lt;br /&gt;
  done&lt;br /&gt;
&lt;br /&gt;
  while [ `gpio read $button` = 0 ]; do&lt;br /&gt;
    sleep 0.03&lt;br /&gt;
  done&lt;br /&gt;
&lt;br /&gt;
  if [ $T1 -le 300000000 ]; then&lt;br /&gt;
    #echo &amp;quot;start/stop dimoni&amp;quot;&lt;br /&gt;
    start_stop_mpd&lt;br /&gt;
  else&lt;br /&gt;
    #echo &amp;quot;canvi de canal&amp;quot;&lt;br /&gt;
    canvi_canal&lt;br /&gt;
  fi&lt;br /&gt;
&lt;br /&gt;
}  &lt;br /&gt;
                            &lt;br /&gt;
       &lt;br /&gt;
start_stop_mpd ()&lt;br /&gt;
{&lt;br /&gt;
  for i in {1..5}&lt;br /&gt;
  do&lt;br /&gt;
    gpio write $red 1&lt;br /&gt;
    sleep .02&lt;br /&gt;
    gpio write $red 0&lt;br /&gt;
    sleep .02&lt;br /&gt;
  done&lt;br /&gt;
  if [ -z `pidof -s mpd` ]; then &lt;br /&gt;
    echo &amp;quot;Starting mpd...&amp;quot;&lt;br /&gt;
    /etc/init.d/mpd start&lt;br /&gt;
  else&lt;br /&gt;
    echo &amp;quot;Stopping mpd...&amp;quot;&lt;br /&gt;
    /etc/init.d/mpd stop&lt;br /&gt;
  fi&lt;br /&gt;
  for i in {1..5}&lt;br /&gt;
  do&lt;br /&gt;
    gpio write $red 1&lt;br /&gt;
    sleep .02&lt;br /&gt;
    gpio write $red 0&lt;br /&gt;
    sleep .02&lt;br /&gt;
  done&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
canvi_canal ()&lt;br /&gt;
{&lt;br /&gt;
  if [ $id_radio -le $(($index-3)) ]; then&lt;br /&gt;
    id_radio=$(($id_radio+2))&lt;br /&gt;
  else&lt;br /&gt;
    id_radio=1&lt;br /&gt;
  fi&lt;br /&gt;
  echo&lt;br /&gt;
  echo ${MYARRAY[($id_radio-1)]}&lt;br /&gt;
&lt;br /&gt;
  gpio write $red 1&lt;br /&gt;
  mpc clear&lt;br /&gt;
  mpc add ${MYARRAY[$id_radio]}&lt;br /&gt;
  mpc play&lt;br /&gt;
  gpio write $red 0&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
#main program&lt;br /&gt;
llista=&amp;quot;radio_internet.txt&amp;quot;&lt;br /&gt;
index=0&lt;br /&gt;
&lt;br /&gt;
while read line ; do&lt;br /&gt;
   MYARRAY[$index]=&amp;quot;$line&amp;quot;&lt;br /&gt;
   index=$(($index+1))&lt;br /&gt;
done &amp;lt; $llista  &lt;br /&gt;
                      &lt;br /&gt;
#RANG=$((($index+1)/2))&lt;br /&gt;
#number=$RANDOM&lt;br /&gt;
#let &amp;quot;number %= $RANG&amp;quot;&lt;br /&gt;
##echo &amp;quot;Random number less than $RANG  ---  $number&amp;quot;&lt;br /&gt;
#id_radio=$((($number*2)+1))&lt;br /&gt;
 &lt;br /&gt;
echo Raspberry Pi Internet Radio&lt;br /&gt;
echo Joan Quintana - joanillo&lt;br /&gt;
echo www.joanillo.org&lt;br /&gt;
echo Dec 2012&lt;br /&gt;
echo&lt;br /&gt;
&lt;br /&gt;
setup&lt;br /&gt;
while true; do&lt;br /&gt;
  waitButton1sttime&lt;br /&gt;
  waitButton2ndtime&lt;br /&gt;
done   &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
el ftixer on tinc les emissores és, per exemple (és una barreja d'emissores sense cap criteri). (No oblidar-se un retorn de carro al final). Fitxer '''radio_internet.txt''':&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#1 Catalunya Ràdio&lt;br /&gt;
http://directe-http.emissio.catradio.cat:8000/catradio.cat/cat_radio&lt;br /&gt;
#2 iCatFM&lt;br /&gt;
http://directe-http.emissio.catradio.cat:8000/catradio.cat/tot_cat&lt;br /&gt;
#3 iCat JAZZ&lt;br /&gt;
http://directe-http.emissio.catradio.cat:8000/catradio.cat/icat_jazz&lt;br /&gt;
#4 JAZZ AACPlus&lt;br /&gt;
http://188.165.20.29:8750&lt;br /&gt;
#5 Los 40 Principales&lt;br /&gt;
http://5253.live.streamtheworld.com:80/LOS40_SC&lt;br /&gt;
#6 Minimal, Techno, Electro Sets&lt;br /&gt;
http://s1.radio.lclhst.net:1337/&lt;br /&gt;
#7 ACE FM&lt;br /&gt;
http://208.43.9.96:8106/&lt;br /&gt;
#8 vaughan radio&lt;br /&gt;
http://vaughanradio.streaming-pro.com:8012/&lt;br /&gt;
#9 Catalunya Música&lt;br /&gt;
http://directe-http.emissio.catradio.cat:8000/catradio.cat/cat_classica&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ara només falta que aquest script s'executi en l'inici del sistema...&lt;br /&gt;
==script inici del sistema==&lt;br /&gt;
Es tracta de què s'executi el script com a root, una sola vegada, i abans d'iniciar sessió. Es tracta de ficar el script en el directori /etc/init.d, com si fos un dimoni. Demonitzar un script és en teoria fàcil, a la pràctica no ho és tant. La solució que a mi m'ha funcionat, pas per pas, és:&lt;br /&gt;
&lt;br /&gt;
1. Primer de tot eliminar el dimoni mpd de l'inici automàtic del sistema. Això es fa fent ''update-rc mpd remove'', o bé eliminar els softlinks que fan referència a '''mpd''' en els directoris /etc/rc.0 a /etc/rc.6.&lt;br /&gt;
&lt;br /&gt;
2. copio radio_internet_vx.sh i radio_internet.txt al directori /etc/init.d&lt;br /&gt;
&lt;br /&gt;
3. és important en el script ficar les rutes absolutes. Per exemple, substituir gpio per /usr/local/bin/gpio; sleep per /bin/sleep; date per /bin/date; mpc /usr/bin/mpc. Però això és clar és una tonteria. És millor ficar al principi de tot:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
PATH=/sbin:/usr/sbin:/bin:/usr/bin:/usr/local/bin&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
i el que sí que és important és ficar la ruta del fitxer on estan les emissores:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
llista=&amp;quot;/etc/init.d/radio_internet.txt&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
4. Aprofitarem el script rc.local (i així m'evitaré fer els softlinks per al meu script). editar el fitxer /etc/init.d/rc.local i afegim una línia:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
do_start() {&lt;br /&gt;
bash /etc/init.d/radio_internet_v4.sh&lt;br /&gt;
        if [ -x /etc/rc.local ]; then&lt;br /&gt;
...&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
El que fa aquest script és comprovar si existeix el directori rc.local (que existeix a Ubuntu però no pas a Debian). Jo el que faig és executar aquest script abans de fer la comprovació de l'existència de la carpeta. I el que és important és no oblidar-se el ''bash'' al davant.&lt;br /&gt;
&lt;br /&gt;
5. reiniciem la BP i comprovem que arrenca bé el script&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$ shutdown -r now&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
reconnectem&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$ ssh pi@192.168.1.138&lt;br /&gt;
$ ps aux | grep mpd&lt;br /&gt;
&lt;br /&gt;
$ ps aux | grep radio&lt;br /&gt;
root      1932  5.8  0.6   2796  1252 ?        S    22:17   0:03 bash /etc/init.d/radio_internet_v4.sh&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
'''radio_internet_v6.sh''': ('''canvi''': he canviat el pin al qual està connectat el botó. El pin 8 passa a ser el pin 1, però aquest canvi no és trivial, doncs per al pin 1 he de programar que estigui habilitat la resistència de pull-up, veure més avall)&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#!/bin/bash&lt;br /&gt;
PATH=/sbin:/usr/sbin:/bin:/usr/bin:/usr/local/bin&lt;br /&gt;
&lt;br /&gt;
#led&lt;br /&gt;
red=0&lt;br /&gt;
#botó&lt;br /&gt;
#button=8&lt;br /&gt;
button=1&lt;br /&gt;
&lt;br /&gt;
# functions:&lt;br /&gt;
setup ()&lt;br /&gt;
{&lt;br /&gt;
  gpio mode $red out&lt;br /&gt;
  #gpio mode $button in&lt;br /&gt;
  gpio mode $button up&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
waitButton1sttime ()&lt;br /&gt;
{&lt;br /&gt;
&lt;br /&gt;
  while [ `gpio read $button` = 1 ]; do&lt;br /&gt;
    sleep 0.03&lt;br /&gt;
  done&lt;br /&gt;
  &lt;br /&gt;
  #from: http://stackoverflow.com/questions/3683434/using-time-command-in-bash-script&lt;br /&gt;
  # UNIX timestamp concatenated with nanoseconds&lt;br /&gt;
  T=&amp;quot;$(date +%s%N)&amp;quot;&lt;br /&gt;
&lt;br /&gt;
  while [ `/usr/local/bin/gpio read $button` = 0 ]; do&lt;br /&gt;
    sleep 0.03&lt;br /&gt;
  done&lt;br /&gt;
   &lt;br /&gt;
}&lt;br /&gt;
           &lt;br /&gt;
waitButton2ndtime ()&lt;br /&gt;
{&lt;br /&gt;
&lt;br /&gt;
  T1=&amp;quot;$(($(date +%s%N)-T))&amp;quot;&lt;br /&gt;
                  &lt;br /&gt;
  while [ `gpio read $button` = 1 ]  &amp;amp;&amp;amp; [ $T1 -le 300000000 ]; do&lt;br /&gt;
    sleep 0.03&lt;br /&gt;
    # Time interval in nanoseconds&lt;br /&gt;
    T1=&amp;quot;$(($(date +%s%N)-T))&amp;quot;&lt;br /&gt;
  done&lt;br /&gt;
&lt;br /&gt;
  while [ `gpio read $button` = 0 ]; do&lt;br /&gt;
    sleep 0.03&lt;br /&gt;
  done&lt;br /&gt;
&lt;br /&gt;
  if [ $T1 -le 300000000 ]; then&lt;br /&gt;
    #echo &amp;quot;start/stop dimoni&amp;quot;&lt;br /&gt;
    start_stop_mpd&lt;br /&gt;
  else&lt;br /&gt;
    #echo &amp;quot;canvi de canal&amp;quot;&lt;br /&gt;
    canvi_canal&lt;br /&gt;
  fi&lt;br /&gt;
&lt;br /&gt;
}  &lt;br /&gt;
                            &lt;br /&gt;
       &lt;br /&gt;
start_stop_mpd ()&lt;br /&gt;
{&lt;br /&gt;
  for i in {1..5}&lt;br /&gt;
  do&lt;br /&gt;
    gpio write $red 1&lt;br /&gt;
    sleep .02&lt;br /&gt;
    gpio write $red 0&lt;br /&gt;
    sleep .02&lt;br /&gt;
  done&lt;br /&gt;
  if [ -z `pidof -s mpd` ]; then &lt;br /&gt;
    echo &amp;quot;Starting mpd...&amp;quot;&lt;br /&gt;
    /etc/init.d/mpd start&lt;br /&gt;
  else&lt;br /&gt;
    echo &amp;quot;Stopping mpd...&amp;quot;&lt;br /&gt;
    /etc/init.d/mpd stop&lt;br /&gt;
  fi&lt;br /&gt;
  for i in {1..5}&lt;br /&gt;
  do&lt;br /&gt;
    gpio write $red 1&lt;br /&gt;
    sleep .02&lt;br /&gt;
    gpio write $red 0&lt;br /&gt;
    sleep .02&lt;br /&gt;
  done&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
canvi_canal ()&lt;br /&gt;
{&lt;br /&gt;
  if [ $id_radio -le $(($index-3)) ]; then&lt;br /&gt;
    id_radio=$(($id_radio+2))&lt;br /&gt;
  else&lt;br /&gt;
    id_radio=1&lt;br /&gt;
  fi&lt;br /&gt;
  echo&lt;br /&gt;
  echo ${MYARRAY[($id_radio-1)]}&lt;br /&gt;
&lt;br /&gt;
  gpio write $red 1&lt;br /&gt;
  mpc clear&lt;br /&gt;
  mpc add ${MYARRAY[$id_radio]}&lt;br /&gt;
  mpc play&lt;br /&gt;
  gpio write $red 0&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
#main program&lt;br /&gt;
llista=&amp;quot;/etc/init.d/radio_internet.txt&amp;quot;&lt;br /&gt;
index=0&lt;br /&gt;
&lt;br /&gt;
while read line ; do&lt;br /&gt;
   MYARRAY[$index]=&amp;quot;$line&amp;quot;&lt;br /&gt;
   index=$(($index+1))&lt;br /&gt;
done &amp;lt; $llista  &lt;br /&gt;
                      &lt;br /&gt;
#RANG=$((($index+1)/2))&lt;br /&gt;
#number=$RANDOM&lt;br /&gt;
#let &amp;quot;number %= $RANG&amp;quot;&lt;br /&gt;
##echo &amp;quot;Random number less than $RANG  ---  $number&amp;quot;&lt;br /&gt;
#id_radio=$((($number*2)+1))&lt;br /&gt;
 &lt;br /&gt;
echo Raspberry Pi Internet Radio&lt;br /&gt;
echo Joan Quintana - joanillo&lt;br /&gt;
echo www.joanillo.org&lt;br /&gt;
echo Dec 2012&lt;br /&gt;
echo&lt;br /&gt;
&lt;br /&gt;
setup&lt;br /&gt;
while true; do&lt;br /&gt;
  waitButton1sttime&lt;br /&gt;
  waitButton2ndtime&lt;br /&gt;
done    &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=Llistat d'emissores de Jazz europees=&lt;br /&gt;
I aquí va el fitxer on tinc llistades 40 emissores de Jazz que funcionen per Internet: ('''radio_internet_jazz.txt''')&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
# iCat Jazz Barcelona&lt;br /&gt;
http://directe-http.emissio.catradio.cat:8000/catradio.cat/icat_jazz&lt;br /&gt;
# Crooze.fm Antwerp Belgium&lt;br /&gt;
http://193.227.114.74:9000/&lt;br /&gt;
# Jazz FM Sofia Bulgaria&lt;br /&gt;
http://live.btvradio.bg:8000/jazz-fm.mp3&lt;br /&gt;
# Ro Jazz Prague&lt;br /&gt;
http://stream3.rozhlas.cz:8000/jazz_low.ogg&lt;br /&gt;
# DR P8 Jazz Copenhagen&lt;br /&gt;
http://live-icy.gss.dr.dk:8000/A/A22H.mp3&lt;br /&gt;
# Jazz Radio Lyon&lt;br /&gt;
http://broadcast.infomaniak.net:80/jazzradio-high.mp3&lt;br /&gt;
# Jazz Radio Classic Jazz Lyon&lt;br /&gt;
http://broadcast.infomaniak.net:80/jazz-wr01-128.mp3&lt;br /&gt;
# Jazz Radio Manouche Lyon&lt;br /&gt;
http://broadcast.infomaniak.net:80/jazz-wr02-128.mp3&lt;br /&gt;
# Jazz Radio New Orleans Lyon&lt;br /&gt;
http://broadcast.infomaniak.net:80/jazz-wr03-128.mp3&lt;br /&gt;
# Jazz Radio Electro Swing Lyon&lt;br /&gt;
http://broadcast.infomaniak.net:80/jazz-wr04-128.mp3&lt;br /&gt;
# Jazz Radio Jazz Contemporary Lyon&lt;br /&gt;
http://broadcast.infomaniak.net:80/jazz-wr05-128.mp3&lt;br /&gt;
# Jazz Radio Jazz Funk Lyon&lt;br /&gt;
http://broadcast.infomaniak.net:80/jazz-wr06-128.mp3&lt;br /&gt;
# Jazz Radio Jazz Gospel Lyon&lt;br /&gt;
http://broadcast.infomaniak.net:80/jazz-wr07-128.mp3&lt;br /&gt;
# Jazz Radio Jazz Groove Lyon&lt;br /&gt;
http://broadcast.infomaniak.net:80/jazz-wr08-128.mp3&lt;br /&gt;
# Jazz Radio Jazz Latin Lyon&lt;br /&gt;
http://broadcast.infomaniak.net:80/jazz-wr09-128.mp3&lt;br /&gt;
# Jazz Radio Jazz Soul Lyon&lt;br /&gt;
http://broadcast.infomaniak.net:80/jazz-wr10-128.mp3&lt;br /&gt;
# Jazz Radio Jazz Soul Food Lyon&lt;br /&gt;
http://broadcast.infomaniak.net:80/jazz-wr12-128.mp3&lt;br /&gt;
# Jazz Radio Black Music Lyon&lt;br /&gt;
http://broadcast.infomaniak.net:80/jazzblackmusic-high.mp3&lt;br /&gt;
# Jazz Radio Blues Lyon&lt;br /&gt;
http://broadcast.infomaniak.net:80/jazzblues-high.mp3&lt;br /&gt;
# Jazz Radio Ladies &amp;amp; Crooners Lyon&lt;br /&gt;
http://broadcast.infomaniak.net:80/jazzladiescrooners-high.mp3&lt;br /&gt;
# Jazz Radio Lounge Lyon&lt;br /&gt;
http://broadcast.infomaniak.net:80/jazzlounge-high.mp3&lt;br /&gt;
# LinasJazz&lt;br /&gt;
http://87.98.175.43:8010&lt;br /&gt;
# Swing FM Limoges&lt;br /&gt;
http://radio.swingfm.asso.fr:8000&lt;br /&gt;
# TSF Jazz Paris&lt;br /&gt;
http://tsfjazz.ice.infomaniak.ch:80/tsfjazz-high&lt;br /&gt;
# JazzRadio 101.9 Berlin&lt;br /&gt;
http://84.16.227.59:8250/;stream.mp3&lt;br /&gt;
# Coolradio Jazz Ingolstadt Germany&lt;br /&gt;
http://178.32.115.9:7040/coolradio-jazz-aac48.aacp&lt;br /&gt;
# FFH Digital Jazz Frankfurt&lt;br /&gt;
http://mp3.ffh.de/ffhchannels/hqjazz.mp3&lt;br /&gt;
# SR 2 - Off-Beat Saarbrücken Germany&lt;br /&gt;
http://gffstream.ic.llnwd.net/stream/gffstream_w25a&lt;br /&gt;
# Jazz Radio Budapest&lt;br /&gt;
http://194.38.105.21:8002/&lt;br /&gt;
# 90.9 Jazzy Budapest&lt;br /&gt;
http://online.jazzy.hu:80/stream/1/&lt;br /&gt;
# Jazz FM Skopje Macedonia&lt;br /&gt;
http://217.16.69.17:8000/jazz.mp3&lt;br /&gt;
# Radio 6 Jazz Hilversum Netherlands&lt;br /&gt;
http://icecast.omroep.nl:80/radio6-jazzjong-mp3&lt;br /&gt;
# NRK Jazz Oslo&lt;br /&gt;
http://lyd.nrk.no:80/nrk_radio_jazz_aac_h&lt;br /&gt;
# RadioJAZZ.fm Poland&lt;br /&gt;
http://stream.radiojazz.fm:8000/radiojazzfm-hi.mp3&lt;br /&gt;
# PolskaStacja Jazz Poland&lt;br /&gt;
http://188.165.20.29:8750&lt;br /&gt;
# RMF Smooth Jazz Kraków&lt;br /&gt;
http://files.kusmierz.be/rmf/smoothjazz-1facts.mp3&lt;br /&gt;
# Radio Crazy Jazz Switzerland&lt;br /&gt;
http://stream2138.init7.net:80&lt;br /&gt;
# Radio Crazy Modern Jazz Switzerland&lt;br /&gt;
http://stream2140.init7.net:80&lt;br /&gt;
# TSTU Jazz Ternopil Ukraine&lt;br /&gt;
http://radio.tstu.edu.ua:8000/jazz&lt;br /&gt;
# Jazz FM London&lt;br /&gt;
http://listen.onmyradio.net:8002/&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
=pull-up pull-down resistors=&lt;br /&gt;
Fins ara hem utilitzat la següent configuració, doncs el tutorial que seguia deia que aquest pin tenia un pull-up resistor.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
button=8&lt;br /&gt;
gpio mode $button input&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Bé, en general, els pins tenen tan un pull-up com un pull-down resistor, i es pot programar. Si jo faig button=1 el programa deixa de funcionar (suposo que per defecte està connectat al pull-down). Per tal de què funcioni per capturar senyals d'entrada he de fer servir la resistència de pull-up, i això es fa de la següent manera.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
button=1&lt;br /&gt;
gpio mode $button up&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
En qualsevol cas, és un tema que no he trobat una informació clara i precisa. La man page de ''gpio'' diu:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
       mode &amp;lt;pin&amp;gt; &amp;lt;mode&amp;gt;&lt;br /&gt;
              Set a pin into input, output or pwm mode. Can also use the literals up, down or tri to set the internal pull-up,&lt;br /&gt;
              pull-down or tristate (off) controls&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Un tutorial de ''buttons i switches'': http://www.cl.cam.ac.uk/~db434/raspi/buttons_and_switches/&lt;br /&gt;
=Enllaços=&lt;br /&gt;
*blog: http://www.joanillo.org/?p=714&amp;amp;lang=en&lt;br /&gt;
*youtube: http://youtu.be/UPrt07Z9Tmw&lt;br /&gt;
&lt;br /&gt;
{{Autor}}, desembre 2012&lt;/div&gt;</summary>
		<author><name>Joan</name></author>
		
	</entry>
</feed>