G A C E T A   D E   L I N U X
...haciendo a Linux un poco más divertido!
Mi Radio Abierta
Por Mark Nielsen
Traducción al español por José Gregorio Del Sol Cobos
el día 22 de Julio 2003, para La Gaceta de Linux
 
  1. Introducción
  2. Configurando Apache
  3. Usando Grip para ripear
  4. El guión en Python
  5. Reproducir la Lista
  6. Conclusión
  7. Referencias

Introducción

Estoy enfermo de tanto reproducir CDs. La mitad de las canciones de un CD no valen nada. No me gusta pasar de Cd a CD una y otra vez. Estoy harto de la radio comercial con sus locutores en la estúpida crisis de la mitad de la vida que tratan de atraer a los adolescentes intentando actuar como ellos (que crezcan). Me gusta escuchar música (del CD) o programas de la NPR como sonido de fondo mientras programo. Decidí desarrollar una manera de hacer que mi ordenador reprodujese canciones y programas de la NPR como si fuese una radio. Esto eliminará los CDs y los programas de la radio comercial. Quiero que mi ordenador reproduzca este material en un orden aleatorio. Lo segundo (que no está en este artículo) era descargar una lista de reproducción de todos los programas que me gusta escuchar en la NPR (espero que algún día la NPR acepte mi oferta de desarrollar les listas de reproducción para sus oyentes (como mi donación)).

Por ahora, estoy manteniendo las cosas realmente sencillas. En el futuro, planeo añadir listas de reproducción, dar peso a las canciones, colocar material en bases de datos PostgreSQL, y cuentas, etc.

Soy muy perezoso. Tanto, que ni me molesté en mirar demasiado  los varios organizadores de mpeg basados en web para tus canciones favoritas. Simplemente quería algo para escupir las 200 canciones en un orden al azar para que simulase una estación de radio. Primero tenía que ripear las canciones y después escribir un sencillo guión en Python para dividir la lista de reproducción.

Configurando Apache

En su servidor Linux, localice su directorio raíz de html para su servidor httpd. En algunos sistemas, éste está situado en "/var/www/html". Asumiendo que es así, haga esto:
cd /var/www/html
mkdir audio
Ahora copie todos sus mp3, rm, wav y otros ficheros de audio en el directorio "/var/www/html/audio". NOTA: no use su sevidor web para nadie más que usted mismo. Sólo usted puede escuchar esas canciones, o puede meterse en problemas de derechos de copia. Contacte con un abogado para los temas legales.

Para arrancar su servidor web, habitualemente puede hacer esto: "service httpd start". Si eso no funciona, mire en la documentación que venía con su distribución Linux para averiguar cómo comenzar y parar el servicio web. Usualemente el servidor web por defecto en la mayoría de los sistemas Linux será Apache.

Usando Grip para ripear

Después de mirar muchos programas, Grip me pareció el más fácil de usar para ripear canciones desde un CD. Organiza las canciones por autor y album. Bonito. He aquí los pasos que seguí para configurarlo.
  1. Descargue e instale "LAME" desde http://www.mp3dev.org. Tenga en cuenta algunos temas de patentes.
      cd /usr/local/src lynx
      --source http://twtelecom.dl.sourceforge.net/sourceforge/lame/lame-3.93.1.tar.gz >  lame-3.93.1.tar.gz
      tar -zxvf lame-3.93.1.tar.gz
      cd lame-3.93.1
      ./configure --prefix=/usr/local/lame
      make install
      ln -s /usr/local/lame/bin/lame /usr/bin/lame
      
  2. Comience Grip
  3. Configure Grip. En el menú "Configure" haga esto.
    Haga clic en Encode, elija 'lame' como el codificador. Donde dice "Encode File Format" (Codificar Formato de Archivo) asegúrese de que especifica el directorio "/var/www/html/audio" como el directorio base. El mío era como esto: '/var/www/html/audio/%A/%d/%t_%n.mp3'.
  4. Haga clic en "Tracks" en el menú superior y seleccione las canciones que quiere ripear.
  5. Haga clic en "Rip" en el menú superior y entonces haga clic en "Rip + Encode".

El Guión en Python

Coloque este guión en Python en "/var/www/cgi-bin/playlist.py". Ejecute este comando después de ponerlo allí: "chmod 755 /var/www/cgi-bin/playlist.py". Después de que haya instalado adecuadamente este guión de Python (por favor, use Python 2.2) y de que sepa que funciona bien, podría tener que cambiar la url de 127.0.0.1 a la ip de su ordenador en la red, para que los otros ordenadores de su casa puedan también reproducir la música.
#!/usr/bin/python
# Asegúrese de que la línea de arriba es la primera línea de este archivo.

### Derecho de copia bajo la GPL

  ## importamos los módulos de Python que necesitamos
import os, re, time, random

  ## Damos valores a algunas variables. Puede cambiar estas variables para sus necesidades. 
Home = "/var/www/html/audio"
Url_Base = "http://127.0.0.1/audio"
Song_Max = 200
List_Type = "mpegurl"

## NO CAMBIE NADA DE ABAJO A NO SER QUE SEA USTED UN EXPERTO EN PYTHON.
File_Match = re.compile('[{mp3}{rm}{wav}{ogg}{mpeg}]$')
Home_Re = re.compile('^' + Home)
List_Types = {'smil':'application/smil', 'mpegurl':'audio/x-mpegurl'}

#---------------------------------------
  ## Esta función recorrerá todos los archivos que coincidan y obtendrá sus rutas absolutas.
  ## Es un método recursivo.
def Dir_Contents(Item=""):
  Final_List = []  
  if Item == '': return ('')
  elif os.path.isdir(Item):
    List = os.listdir(Item)
    for Item2 in List:
      Item3 = Item + "/" + Item2
      Temp_List = Dir_Contents(Item=Item3)
      for Item4 in Temp_List: Final_List.append(Item4)
  elif os.path.isfile(Item):
    if File_Match.search(Item):   return([Item])
    else:   return([])
  return (Final_List)
      
#--------------------------

List =  Dir_Contents(Home)
List_Copy = List
  ## Aleatoriza cuántas veces llamamos a random.
Secs = int(time.strftime('%S')) * int(time.strftime('%H')) * int(time.strftime('%M'))
for i in range(0,Secs): random.random()

  ## Obtiene aleatoriamente un archivo cada vez hasta que no quede ningunio. 
New_List = []
while (len(List_Copy) > 0):
  Position = random.randint(0,len(List_Copy) - 1)
  New_List.append(List_Copy[Position])
  del List_Copy[Position]

  ## Rehace las url de la lista.
Urls = []
for Item in New_List:
    ## Para cada miembo en la lista, saca el prefijo del directorio Home, y le pre-coloca la url.
  Url = Url_Base + Home_Re.sub('', Item)
  Urls.append(Url)    

  ## Si superamos el número de canciones que queremos escuchar,
  ## lo acabamos. Puntos de bonus si puede imaginar cuántas canciones
  ## hay en esta matriz cuando Song_Max = 200.
if len(New_List) > Song_Max:  New_List = New_List[0:Song_Max]

  ## Si el idiota que editó este archivo tiene un tipo de lista no válido...
if not List_Types.has_key(List_Type): List_Type = 'mpegurl'
Content_Type = List_Types[List_Type]

  ### Ahora imprimimos el contenido. 
print "Content-Type: " + Content_Type + "\n\n"

if List_Type == 'mpegurl':  
  for Url in Urls: print Url
elif List_Type == 'smil':
  print "\n<smil>\n   <body>\n"
  for Item in Urls:  print "      <audio src='" + Url+ "'/>"
  print "   </body>\n</smil>\n"
else:  
  for Url in Urls: print Url


#------------------------------------------------------------------------
#                          Open Radio versión 1.0

#                       Copyright 2003, Mark Nielsen
#                       Todos los derechos reservados.
#    Este aviso de Copyright se copió y modificó a partir del aviso de Copyright de Perl.
#    Este programa es software libre; usted puede redistribuirlo y/o modificarlo bajo los términos
#    de, bien:

#        a)la Licencia Pública General GNU según está publicada por la Fundación del Software Libre;
           bien en la versión 1, o (es su opción) cualquier versión posterior, o
          
#        b)la "Licencia Artística" que viene con este Kit.

#    Este programa se distribuye en la esperanza de que sea útil, pero SIN NINGUNA GARANTÍA; incluso sin la 
#    garantía implícita de COMERCIABILIDAD o AJUSTE PARA UN PROPÓSITO PARTICULAR. Vea la 
#    Licencia Pública General GNU o la Licencia Artística para más detalles.

#    Debería haber recibido una copia de la Licencia Artísitca con este kit, en el archivo llamado "Artistic".
#    Si no es así, estaré contento de proporcionarle una. Puede mirar en http://www.perl.com para la Licencia Artística
# Debería haber recibido también una copia de la Licencia Pública general GNU junto con este programa # en el archivo llamado "Copying". Si no es así, escriba a Free Software Foundation, Inc., Temple Place, # Suite 330, Moston, MA 02111-1307, USA, o visite su página web en INternet en # http://www.gnu.org/copyleft/gpl.html.

Reproducir la Lista.

Esta pequeña instalación es perfecta para mí. En el futuro, quiero crear cuentas. listas de reproducción, mantenerun seguimiento de qué canciones no han sido tocadas aún, dar peso a una canción, y un montón de cosas más. Por ahora, he acabado con esto y me pondré pronto a hacer una lista de reproducción con mis programas de la NPR favoritos.

Tengo grandes ideas de adónde podría llevar esto. Dado que tengo un montón de experiencias desafortunadas con Flash, Real Player, Windows Media Player y Javascript, parece como si algo se pudiera desarrollar aquí. Escuchabaun montón de cosas sobre estaciones de radio en Internet, pero parece como si ninguna se estuviera acercando al mercado directamente. Parecen haberse quedado pegadas en los viejos tiempos de la radio. Necesitan avanzar y noser constreñidas por los gigantes de los medios (legalmente). Parece como si las estaciones de radio por internet no estuviesen viendo la gran imagen. Por ahora, yo sólo voy a desarrollar mi propia radio para mí mismo, y puedeque haga algo real mas tarde.

Referencias

  1. http://www.nostatic.org/grip/
  2. http://www.apache.org
  3. http://www.python.org
  4. http://service.real.com/help/library/earlier.html
  5. Si este artículo cambia, estará disponible en http://www.tcu-inc.com/Articles/34/open_radio.html

 

[BIO] Mark Nielsen trabaja en Crisp Hughes Evans. En su tiempo libre, escribe artículos relacionados con el Software Libre (GPL) o la Literatura Libre (FDL).Por favos escríbale a articles@tcu-inc.com y ponga en el Asunto "ARTICLE:" o el mensaje será borrado y ni se mirará siquiera en -- para parar a los spammers.


Copyright © 2003, Mark Nielsen .Licencia de copia http://www.linuxgazette.com/copying.html
Publicado en el Número 92 de Linux Gazette, Julio de 2003