Tu propio Network-Music-Player o como reciclar una PC obsoleta

Si quieren tener la consola remota del NMP en sus celulares Android pueden usar la aplicación ConnectBot que pueden descargar gratis desde el Play Store. Mi celu tiene Android 2.3.6 y todo los que encontré para este NMP anda perfecto con esa versión ;)
 
Que lindo proyecto me recuerda a lo que hice cuando tenia 11 años y entraba al mundo de la electronica y computacion. hice lo mismo solo que con un scrip para arrancar desde el inicio el reproductor de musica
con 16GB estaba bastante bien cargada y configure el mouse para play/pause con el click izquierdo y Next con el derecho al boton central (que imagina que tan viejo era que ni ruedita tenia , incluso era a bolita!)
reproducia el anterior.
 
Habiendo terminado de ajustar el S.O. y con las pruebas correspondientes concluidas exitosamente, me dediqué a finalizar el NMP de una vez por todas :oops:.
Lo desarmé entero, lo pinté de negro, le cambié los LEDs por unos de alto brillo y me faltó el loguito de PolloX pero eso lo pondré después.
Les paso unas fotos de como quedó (perodón por las fotos, pero tenía fiaca de cargar las pilas de la cámara, así que fueron con el celu nomás).

Con el CD destapado...

43-PC-negra-A.jpg

Con el frente "tapado"...

44-PC-negra-B.jpg

De costado....

45-PC-negra-cote.jpg



En fin... reproduciendo "Friday Night in San Francisco" de Al Di Meola, John McLaughlin y Paco de Lucía (QEPD) (y) (y)
 
Espectacular! pensar que le puse Windows XP a una de esas...

Pregunto... no tiene placa de sonido onboard esa placa??

Es una BXPro PC100... debería tener un par de jumpers rojos que habilitan el sonido y la red onboard (lo único que es un lio conseguir el header de red... el de audio hay a patadas x todos lados)
 
Si tiene sonido on-board pero no tiene red. El problema con el sonido es que la implementacion es bastante mala y tiene mucho ruido de fondo que hace chillar los tweeters.
 
Que trabajo tremendo, Profe !!!:alabanza::alabanza::aplauso::aplauso::aplauso:

No digo que te lo voy a copiar de inmediato porque de mis epocas con el Xenix y luego el HP-UX me ha quedado una fobia al Unix por comandos... pero has sembrado una idea perversa!!!

Ademas a esta altura no necesito impresionar a las mujeres :LOL::LOL::LOL::LOL:
 
Creo que en casa de mi madre tengo una media notebook... una Dell Inspiron 7500... supongo que necesita un disco rigido y amor (aparte de un monitor)

Veremos si armo algo similar... en realidad me conformo con unos parlantes inalambricos pero es lo que hay jeje

Lo que salga sera posteado aca o bien armo un nuevo post!
 
Y hoy terminé el ultimo detalle: el logo de PolloX :) :) :aplauso: :aplauso:

.

46-logo-PolloX.jpg


Ahora voy a ver si puedo cargarle una lista de radios web... están muy de onda y pasan muy buena música (y) (y)
.
 
Última edición:
Estaba con un rato libre y se me ocurrió actualizar la versión de MPD a una mas nueva y con problemas ya corregidos. EL problema es que Ubuntu no tiene ninguna versión actualizada de MPD en sus repositorios y aún conserva la versión 0.18.7 cuando ya existen como 20 versiones mas nuevas.
Así que me armé de coraje y la instalé desde el código fuente, compilación de por medio (hacía años que no trabajaba de esta forma). Bajé la versión 0.19.10 que era la ultima disponibles en la web de MPD y me dispuse a compilarla.

47-mpd-v0.19.10.jpg

Instalé las herramientas de desarrollo (que no estaban por que es una versión para servidor), desempaqueté el soft y corrí el comando configure, y por supuesto que me tiró una parva de dependencias faltantes... que tuve que descargar e instalar en función de como iba a configurar el soft (esta es una tarea para machos.. ehhh :)). Cuando la configuración esrtuvo lista, corrí el make... y una hora 40 minutos mas tarde (y si... la PC es una batata) ya estaba compilado y le mandé el make install... que por supuesto instaló en otra parte diferente a la estandar de Ubuntu (debería haber tocado el script de configuración... pero ni me gasté por que tendría que haberlo estudiado).

Moraleja: luego de la instalación tuve que reconfigurar el script de arranque del MPD para que levantara la nueva versión.

Con esto ya listo, hice una breve prueba para ver que tal funcionaba (con el mismo archivo de configuración que la versión anterior) y los resultados fueron:

Woman In Love (Barbra Streisand) FLAC, 24 bits / 96 kHz:

48-CPU-WomanInLove.jpg

The Curtain Falls (Riverside) FLAC, 16 bits / 44.1 kHz:

49-CPU-Riverside.jpg

Parece que hay una mejora en la performance del resamplig y mantiene un poco mas baja la carga de CPU (de 104% a 80%). En 16/44.1 también hay una mejora importante, bajando del 37% al 23%

Todavía me quedan hacer algunas pruebas, pero vale la pena actualizar a esta versión.
.
 
Y le sigo dando vueltas al asunto.... la ventaja de "escribir" software jajajajaja!
Resulta que no puedo encender el NMP en forma remota por que no tengo ninguna placa de red de la que salga un conector para vincular a los contactos wake-on-LAN del motherboard, y como esto me tiene un poco envenenado me dispuse a hacer algo para, al menos, apagar el NMP en forma remota, ya sea desde el celu o desde una tablet (esta prohibido arrojarle ladrillos y esas cosas).

Como creo que alguna vez comenté, lo mas directo es instalar un servidor web y diseñar una interfaz HTML que me de acceso a un par de botones: uno para Apagar el NMP y el otro para Resetearlo (por si se fuera al diablo el MPD.... cosa que nunca sucede :eek:).

El primer asunto fué buscar un servidor web que fuera pequeño y liviano en ejecución, para no gastar recursos del NMP en algo que se ejecuta esporádicamente y al fin del día. De casualidad, recordé un servidor muuuy bueno, rápido, seguro y simple que había desarrollado Jef Poskanzer de ACME Labs :confused: allá por mediados de los 90s y que se llama thttpd (por "Tiny HTTPD") y que pueden estudiar y descargar desde ACÁ.
El programa se entrega en código fuente y hay que compilarlo con las clásicas ./configure y luego make. La instalación es un poco enrredada, por que hay que escribir a mano los scripts de arranque y luego instalarlos en el sistema (esto suena complicado pero mejor vean el man del comando update-rc.d que hace casi todo por nosotros) y también hay que copiar a mano los archivos en su lugar... pero dado que son solo tres archivos, no es que vayamos a trabajar mucho. De todas formas, las instrucciones y archivos de ejemplo estan especificados en la web de thttpd así que si leen, no hay como escaparle... y si nó, pregunten ;). La foto "muestra" a el thttpd ejecutándose en el sistema:

50-thttpd-running.JPG

Con el servidor funcionando y apuntado al directorio /usr/local/www/data solo queda por hacer una página web para apagar o reiniciar el NMP, y para esto recurrí al desarrollo de la interfaz del Brazil Firewall and Router (BrazilFW) que es el gateway que uso en casa y para cuyo proyecto open-source alguna vez participé como traductor de la interfaz web (hace como 10 años de esto :oops: :oops:).
Cuando comencé el análisis me encontré que ellos también usan el thttpd como servidor web de la interfaz, si bien tiene una compilación un poco mas "personalizada" y está compilado junto al BusyBox que usa BFW, así que hice bien en compilar por mi cuenta.
De este proyecto tomé prestada la página web de inicio que acá les copio y que usé tal cual estaba:
Código:
<html>
<head>
<meta http-equiv="Expires" content="Thu, 01 Jan 1970 00:00:00 GMT" />
<meta http-equiv="Cache-Control" content="no-store" />
<meta http-equiv="Pragma" content="no-cache" />
<script language="JavaScript">
window.location="/cgi-bin/";
</script>
<!--
Bug Microsoft Internet Explorer. 
Para que o Internet Explorer possa aceitar o erro customizado,
e necessario que o arquivo de erro contenha mais de 512 Bytes.
#############################################################
#############################################################
#############################################################
#############################################################
#############################################################
#############################################################
#############################################################
#############################################################
#############################################################
#############################################################
#############################################################
#############################################################
#############################################################
#############################################################
#############################################################
#############################################################
#############################################################
#############################################################
#############################################################
#############################################################
#############################################################
#######
--!>
</html>
Luego usé un script de BFW que se llama reboot.cgi y que tuve que adaptar y renombrar a index.cgi para el uso que voy a darle. Quedó como a continuación les muestro:
Código:
#!/bin/sh

# Perform shell variable expansion for any form data
eval "`/usr/bin/proccgi $*`"

echo -n "Content-type: text/html
Pragma: nocache
cache-control: no-cache, must-revalidate, no-store

<html><head><title>PolloX - NMP</title><body>"
case "$FORM_OKBTN" in
    "Reset")
        echo "<center>Restarting Player...</center><br></body></html>"
        /sbin/reboot
        exit 0
        ;;
    "Shutdown")
        echo "<center>Shutting down Player...</center><br></body></html>"
        /sbin/poweroff
        exit 0
        ;;
    *)
cat << CLEOF
<center><form method="POST" action="/cgi-bin/index.cgi"><br>
<table border=0>
<tr><th><h2>PolloX - NMP</h2></th></tr>
<tr><td align=center><h2><b>Attention</b></h2></td></tr>
<tr><td align=center><input type=submit value="Shutdown" name=OKBTN><br><input type=submit value="Reset" name=OKBTN></td></tr>
</table></form></center>
CLEOF
    ;;
esac

echo "<br></body></html>"
que claramente es un script de consola que se ejecuta como un CGI del servidor web. La parte del final es la primera que se ejecuta, y al presionar un boton, la próxima vez se ejecuta el bloque de "Reset" o "Shutdown" según el boton presionado (el que sepa HTML lo va a entender fácilmente).
El unico problema que tuve fué conseguir y compilar el programa proccgi que analiza lo que envía el cliente y obtiene las partes del formulario bajo un nombre conocido, pero se puede descargar desde ACA.

Bueno... lo que se vé desde el navegador es lo siguiente:

51-Navegador-shutdown.JPG

Y lo que queda cuando presionamos el boton de shutdown...

52-Msg-shutdown.JPG
y la ventana de la consola remota confirmando el apagado del player...

53-Putty-confirma-shutdown.JPG

Bien... hasta acá llegamos por hoy... solo queda hacer que la página se vea bien en el celular, por que todo aparece chiquitísimo!!!!!!.. o buscar algún componente para Android que sea capaz de enviar un pedido POST de HTTP.

Edito:
Y bueno... encontré una aplicación Android gratuita que se llama HTTP Requester y que pueden descargar desde ACA. Permite enviar peticiones GET y POST, y esta última es la que necesitamos. La app solo pesa 58K :eek: y la configuración fué muy simple:

  1. Ingresar la URL http://vaca-linux/cgi-bin/index.cgi
  2. Elegir como formato del envío a text/plain
  3. Ingresar como contenido a OKBTN=Shutdown
  4. Hacer click en POST
.... y el player apagado de primera intención!!!! :aplauso: :aplauso: :aplauso:
La aplicación guarda el comando ejecutado para repetirlo luego cuando sea necesario ;), así que ya tengo como apagarlo en el futuro... pero no se si podré crear un acceso directo a ese comando para ejecutarlo con un click. Si lo logro, les aviso :) :)
 
Última edición:
Leyendo por ahí encontré las herramientas de Linux para el control de energía de la PC (las pm-utils que se instalan por medio de sudo apt-get install pm-utils) y que permiten a la PC:

  1. Suspender: en este estado se hace una copia del estado del sistema en RAM, se apagan los discos y la CPU y el sistema sigue alimentado (con un consumo bajo) para mantener la memoria operativa.
  2. Hibernar: se hace una copia del estado del sistema en disco (en el área de swap) y luego el sistema se apaga por completo.
En ambos casos el sistema se reactiva al presionar el boton de encendido (o por wake-on-lan :cry:) y en mi caso tarda 10 segundos en volver a la actividad desde el modo Suspend y un minuto desde el modo Hibernate y como dos minutos y medio en arrancar :oops: :oops:. Hay otro modo que es la mezcla de los anteriores, pero no lo probé.

Lo interesante del caso es que no corta la conexión de red (ni aún con la placa de red ISA :cool:) y la restituye inmediatamente al volver "a la vida".... siguiendo desde donde quedó en el momento de ejecutar el comando pm-xxxx.

Por supuesto que ya modifiqué el index.cgi para ensayar estas nuevas opciones y andan muy bien :aplauso: :aplauso:, pero hay que hacer algunos cambios para asegurarme de que "salgan" los mensajes HTML que el script envía...

Ya está: les dejo el nuevo script index.cgi por si alguien quiere poner a dormir el player en lugar de apagarlo:

Código:
#!/bin/sh

# Perform shell variable expansion for any form data
eval "`/usr/bin/proccgi $*`"

echo -n "Content-type: text/html
Pragma: nocache
cache-control: no-cache, must-revalidate, no-store

<html><head><title>PolloX - NMP</title><body>"
case "$FORM_OKBTN" in
    "Reset")
        echo "<center>Restarting Player...</center><br></body></html>"
        /sbin/reboot
        exit 0
        ;;
    "Shutdown")
        echo "<center>Shutting down Player...</center><br></body></html>"
        /sbin/poweroff
        exit 0
        ;;
    "Suspend")
        echo "<center>Suspending Player...</center><br></body></html>"
        /usr/sbin/pm-suspend&
        exit 0
        ;;
    "Hibernate")
        echo "<center>Hibernating Player...</center><br></body></html>"
        /usr/sbin/pm-hibernate&
        exit 0
        ;;
    *)
cat << CLEOF
<center><form method="POST" action="/cgi-bin/index.cgi"><br>
<table border=0>
<tr><th><h2>PolloX - NMP</h2></th></tr>
<tr><td align=center><h2><b>Attention</b></h2></td></tr>
<tr><td align=center><input type=submit value="Shutdown" name=OKBTN></td></tr>
<tr><td align=center><input type=submit value="Suspend" name=OKBTN></td></tr>
<tr><td align=center><input type=submit value="Hibernate" name=OKBTN></td></tr>
<tr><td align=center><input type=submit value="Reset" name=OKBTN></td></tr>
</table></form></center>
CLEOF
    ;;
esac

echo "<br></body></html>"
 
Última edición:
Enhorabuena por el proyecto. Tengo pensado hacer algo parecido, pero con la diferencia de que mi musica no esta en otro ordenador, sino que subí hace tiempo todos mis ficheros de musica a google music. ¿Seria posible que indicaras como usar mpd con google music?
Muchas gracias de antemano.
 
Enhorabuena por el proyecto. Tengo pensado hacer algo parecido, pero con la diferencia de que mi musica no esta en otro ordenador, sino que subí hace tiempo todos mis ficheros de musica a google music. ¿Seria posible que indicaras como usar mpd con google music?
Muchas gracias de antemano.
La verdad es que no he trabajado con Google Music, pero buscando un poco en la web encontré dos sitios con información y desarrollos valiosos:
http://gmusicproxy.net/
http://www.gregorystrike.com/2013/03/02/streaming-google-music-with-mpd/
Ambos muestran formas diferentes de resolver tu problema, aunque yo me inclinaría por la primera opción.

De todas formas, aquí estas "solo" a menos que algún otro forista haya evaluado alguna de estas solucione, o piense hacerlo en el futuro. El otro problema (en mi imaginación :confused:) es que los clientes MPD de Android y Windows que les he propuesto no necesariamente tienen la capacidad de interactuar en forma directa con playlists vía streaming, o al menos yo aún sigo intentando enlazarlos con radios on-line.

Sin embargo, creo que tenés una excelente oportunidad de probar cosas interesantes... y luego enseñarnos a todos como se hace :aplauso:.
 
Gracias por tu rápida respuesta, consultaré los enlaces que indicas a ver si hay suerte...
También me preguntaba si después de instalar todo lo que necesitabas, no sé si sería mejor desactivar el entorno gráfico ya que no lo utilizas. Ten en cuenta que hablo un poco desde la ignorancia, soy total novato en linux, pero no sé si tengo entendido que el entorno gráfico también consume mucha memoria, y eso con máquinas viejas es importante. Si ya lo hiciste, ¿puedes indicar cómo?
Y otra pregunta más: he estado leyendo acerca de distribuciones de linux mínimas, incluso que se ejecutan desde ram y de esta manera son mas rápidas, ejemplos Puppy linux, Slitaz, Porteus, Slax, Tiny core linux... ¿No has pensado en utilizarlas? ¿quizás no es fácil hacerlas funcionar/instalarles mpd? Creo que ninguna de ellas usa el sistema de instalación apt-get, y cualquier guía que encuentras en internet sólo explican los pasos de esa manera, si no, yo me pierdo, no conozco otra cosa (reitero, estoy empezando en linux y he usado ubuntu y linux mint únicamente)
gracias
 
Última edición:
También me preguntaba si después de instalar todo lo que necesitabas, no sé si sería mejor desactivar el entorno gráfico ya que no lo utilizas. Ten en cuenta que hablo un poco desde la ignorancia, soy total novato en linux, pero no sé si tengo entendido que el entorno gráfico también consume mucha memoria, y eso con máquinas viejas es importante. Si ya lo hiciste, ¿puedes indicar cómo?
Hay que leer todo...
...También elegí la edición Server por que NO TIENE interfaz gráfica, que consume muchisima memoria y que además no vamos a usar, pero esto significa que vamos a ser muy valientes y vamos a configurar el sistema desde la línea de comandos...

Y otra pregunta más: he estado leyendo acerca de distribuciones de linux mínimas, incluso que se ejecutan desde ram y de esta manera son mas rápidas, ejemplos Puppy linux, Slitaz, Porteus, Slax, Tiny core linux... ¿No has pensado en utilizarlas? ¿quizás no es fácil hacerlas funcionar/instalarles mpd? Creo que ninguna de ellas usa el sistema de instalación apt-get, y cualquier guía que encuentras en internet sólo explican los pasos de esa manera, si no, yo me pierdo, no conozco otra cosa (reitero, estoy empezando en linux y he usado ubuntu y linux mint únicamente)
Las distribuciones que corren desde RAM tienen varios "problemas" ya que básicamente están diseñadas para evaluación de Linux o para auditorías de seguridad, pero no se les puede agregar nada, ya que son un conjunto de aplicaciones empaquetadas bajo un file-system virtual, es decir, si no viene MPD instalado, no vas a poder agregarlo a menos que empaquetes de nuevo toda la distribución... cosa que es factible hacer pero requiere trabajo y conocimiento ==> no apto para principiantes.
Por otra parte, todas corren con interfaz gráfica, lo que demanda mas memoria y recursos...
 
Ayer estaba haciendo algunos experimentos con el cliente Java de MPD en la PC y por algún extraño motivo comenzó a dar un error sin referencia a donde estaba... y no hubo forma de solucionarlo. Lo quité e instalé de nuevo, pero nunca mas se inició la interfaz gráfica. Estuve revisando el código fuente, pero me parece que tengo el de una versión anterior por que había cosas que no estaban. En fin... me embolé y comencé a buscar otro cliente de MPD para Windows y encontré dos:

  1. Uno que ya tenía pero no había probado, y que se llama MediaControlCenter, que es muy sobrio (feo?), muy liviano y rápido, pero le falta funcionalidad y el desarrollo no se continuó activamente desde el 2006.
  2. Y otro que no conocía ni había aparecido en las búsquedas anteriores y que se llama Ario. Es multiplataforma y con una GUI muy parecida al RythmBox de Linux, pero dedicado a controlar a MPD. Se baja de ACÁ y requiere instalar GTK+ que también se baja de ACÁ.
La verdad que Ario anda MUY BIEN (hasta ahora :)) y tiene funcionalidad para tirar para arriba, incluso ya trae conexiones a radio on-line (tengo que probarlo ;)). Se los recomiendo si quieren controlar MPD desde la PC.
 
Última edición:
Atrás
Arriba