Introduction: Hotspot Multimedia Con Equipo De Música De Los 80s

Tengo un equipo de música de los años 80s (Grundig HiFi 5000) conectado a la PC mediante un cable RCA de audio que uso habitualmente para escuchar música tanto vía streaming, como mi colección de música local.

El problema fue que al clable de 10 metros con el que lo conectaba se le rompió el jack, por lo que surgieron dos posibles soluciones:

1) Cambiar el la ficha Jack y arreglar el cable.

2) Revisar que trastos andan por la casa y renegar con otra solución.

Obviamente, busque la solución más divertida que usualmente requiere renegar un poco más. Me acordaba que tenía un Raspberry Pi de 2012, esencialmente la idea era transformar el Raspberry Pi (A.k.a RBpi) en un parlante bluetooth con la salida de audio conectada al equipo de musica, pero el proyecto terminó un poco más grande por lo que termine usando una versión mas nueva (RBpi 3) y transformando un viejo equipo de música de los años 80s, en un Hotspot Multimedia.

Sonido:

Permite conectarse vía Bluetooth y funciona como un parlante BT, lo he probado desde mi PC y desde el celular con android sin ningun inconveniente.

Tiene configurado #SpotifyConnect para usar spotify desde cualquier dispositivo y que el sonido sea en el equipo de música.

Pase toda mi colección de musica (MP3s, Ogg, Flac) a un disco externo conectado al RPpi y Puedo administrar y reproducir forma remota.

Películas:

El mismo Disco externo esta compartido en la red interna, por lo que lo uso como carpeta por defecto de Downloads de películas y series via Torrent, , esencialmente un NAS (Network-attached storage), A través de SSH se puede ejecutar esas películas para que se vean por HDMI en el televisor, con subtitulos incluidos.

Supplies

Requerimientos y consideraciones previas:

Se necesitan conocimiento básicos sobre cómo trabajar con la terminal de Linux (Debian y derivados preferentemente), ya que toda la instalación y configuración se hace por la linea de comandos.

  • Raspberry (en mi caso use un RBpi 1 y terminan migrando a un RBpi 3 que obviamente tiene mejor rendimiento).
  • Cable RCA para conectar al equipo de música y cable HDMI para conectar al Televisor.
  • Cable de red y fuente de alimentación para el RBpi (Se puede conectar via wifi también).
  • Dongle Bluetooth (En caso de RBpi 3 en adelante ya viene con bluetooth).
  • Disco Externo USB - Hub USB con alimentación Externa (o una fuente de al menos 3 Amperes para el RBpi).
  • Un Teclado USB (solo al principio, despues ya no hace más falta)

Step 1: Instalar Raspbian Lite

Bueno, primero que nada es instalar Raspbian Lite Buster, siguiendo esta guia no deberia presentar problemas, conectar el teclado, el cable de red y Televisor por HDMI, conectar la fuente de electricidad, esperar que termine de bootear, ver que se conecte a la red. Actualizar el sistema, usar raspi-config para activar ssh y configuraciones adicionales (cambio de clave, nombre, etc), reiniciar y conectarse vía SSH, al ser un derivado de Debian linux, esencialmente los comandos que vamos a usar son los mismos que para este tipo de distribuciones.

Si es necesario, se puede actualizar el firmware del RBpi.

 sudo rpi-update 

En este punto ya se puede desconectar el teclado y trabajar todo lo demás via SSH desde otra PC, por mas que este conectado a HDMI con o sin el televisor prendido.

Step 2: Configurar Bluetooth Y Salida De Sonido (ALSA)

Paso siguiente ponerse a instalar los servicios para que ande bluetooth, con la ayuda de bluealsa que permite "rutear" el sonido que entra vía BT a la salida de audio (hdmi o 3.5mm jack) de forma sencilla

Siguiendo este => tutorial con la única modificación
En /lib/systemd/system/bluealsa.service solamente agrego a2dp-sink y no he tenido problemas y no necesito autorizar todos los dispositivos cada vez que reinicio, quedaría de la siguiente manera:

ExecStart=/usr/bin/bluealsa -p a2dp-sink

Para probar que todo esté andando, Conectar vía bluetooth el celular siguiendo desde la parte Bluetooth Pairing and Connection y probar con bluealsa-aplay, deberíamos tener sonido por la salida analógica del RBpi, desde la terminal, se puede ajustar el volumen con alsamixer.

Una vez que todo esta andando, para no usar bluealsa-aplay todo el tiempo, conviene convertirlo en un servicio para que se ejecute junto con el arranque del sistema. Primero bajar el archivo a2dp-playback.service

wget -P ~/ https://gist.github.com/Pindar/e259bec5c3ab862f4ff5f1fbcb11bfc1/raw/3928bd1b66fda8a9c338406dd514a58811de987b/a2dp-playback.service

Copiarlo a la carpeta correspondiente:

sudo cp ~/a2dp-playback.service /etc/systemd/system

Habilitar para que inicie con el sistema:

sudo systemctl enable a2dp-playback.service

Reiniciar y ya debería estar andando todo lo que respecta a Bluetooth y salida de audio.

Step 3: Instalar Raspotify

Como tengo cuenta de Spotify y el RBpi va a estar conectado al equipo de audio, aprovechamos las ventajas de #SpotifyConnect (Necesita una cuenta Premium) para poder elegirlo desde la aplicación o vía web para que la música se reproduzca en el RBpi

La implementación se llama Raspotify, y dispone de un instalador que simplifica mucho las cosas:

curl -sL https://dtcooper.github.io/raspotify/install.sh | sh

Configurar con nombre y usuario de Spotify (sacando # de la línea correspondiente):

sudo nano /etc/default/raspotify

reiniciar el servicio

sudo systemctl restart raspotify

Puede pasar que después de reiniciar y si HDMI esté conectado, que el sonido salga por los parlantes del TV si esta prendido, Para evitarlo y forzar que todo lo que sea sonido se canalice a la salida analógica que esta conectada al equipo de música, podemos hacer lo siguiente:

Buscar las que salidas de sonido están disponibles:

cat /proc/asound/cards

Ver el nombre de cada una:

aplay -l
Crear un archivo de configuración para alsa:
sudo touch /etc/asound.conf

Editarlo y copiar la siguiente configuración:

pcm.!default {
   type hw
   card 1
}

ctl.!default {
   type hw          
   card 1
}

reemplazando "card 1" con el número o nombre de la salida analogica (Headphones).

Step 4: Instalar NFS Y Configurar El Uso Compartido

Esto es totalmente opcional, ya que se puede conectar el disco externo o la memoria a la PC y copiar lo que haga falta o directamente via SSH se pueden transferir los archivos, pero bueno, ya que estaba aproveché para aprender un poco sobre como armar un servidor NFS.

NFS (Network File System o sistema de archivos de red), sirve para poder manejar archivos que están en otra computadora de la red, de manera transparente como si se trataran de archivos locales, la idea es poner todos los mp3 y la carpeta de descarga de películas en un disco externo que esté conectado al RBpi y sea accesible para todos los dispositivos.

El único problema es que el RBpi que tengo no le da el voltaje para poder usar intensivamente el disco externo (esencialmente cuando hay mucha carga se apaga), así que la forma de salvar esto es usar concentrador (hub) para conectar el disco que tenga una fuente externa, así no sobrecarga el RBpi, salvado este paso, conectando el disco y todo funciona bien (unidades montadas, configurado fstab, etc), lo siguiente es configurar RBpi para que funcione como servidor NFS.

En mi caso el disco externo con música y películas lo tengo tengo montada en la carpeta /home/pi/music y home/pi/movies respectivamente, por lo que la configuración de MPD se basa en eso.

También conviene que carpetas compartidas solamente queden disponibles para nuestra red interna ( 192.168.1.0/24 en mi caso ).

Step 5: Instalar MPD Para Manejar La Coleccion De Musica

MPD (Music Player Daemon) es un reproductor de audio que funciona del modo cliente-servidor. MPD se ejecuta como un servicio/demonio, gestionando el listado de archivos de música, Playlist, formas de reproducción, etc de una forma muy eficiente y con muy pocos recursos.(servidor) y se puede manejar mediante una interfaz gráfica (cliente) que se puede instalar en cualquier dispositivo y SO (Windows, linux, android, iphone, etc), así que la idea es instalar MPD en RBpi para que administre la música local (en mi caso mas de 80gb de mp3s en un disco Externo) y controlarlo con el cliente GMPC desde mi notebook y M.A.L.P en android.

Instalamos MPD con los comandos habituales:

sudo apt-get update & upgrade
sudo apt-get install mpd

Una vez que MPD está instalado lo conveniente es usar una configuración por usuario, por lo que creamos en la carpeta home todos los directorios y archivos necesarios:

mkdir ~/.config/mpd 

Bajamos el archivo de ejemplo de configuración:

wget -P ~/ https://raw.githubusercontent.com/MusicPlayerDaemon/MPD/master/doc/mpdconf.example
lo copiamos al directorio correspondiente:
cp ~/mpdconf.example ~/.config/mpd/mpd.conf

creamos el archivo para la base de datos y el directorio para las playlist

touch /home/pi/.config/mpd/database
mkdir /home/pi/.config/mpd/playlists

Le metemos mano a la configuración:

nano  /home/pi/.config/mpd/mpd.conf

Solamente cambiamos lo necesario para indicar donde estan los archivos de musica, Playlist y base de datos, guardamos y salimos:

music_directory "/home/pi/music"
playlist_directory "home/pi/.config/mpd/playlists"
db_file "/home/pi/.config/mpd/database"

Luego hay que agregar mpd al grupo de usuarios pi y darle acceso a la carpeta donde está la música:

sudo gpasswd -a mpd pi
chmod 710 /home/pi/music

Finalmente creamos un enlace simbolico para que la configuración global lea la misma carpeta donde tenemos la música.

sudo ln -s /home/pi/music/ /var/lib/mpd/

Reiniciamos el servicio y debería salir andando si nos conectamos con un cliente desde cualquier dispositivo:

sudo systemctl restart mpd

Adicionalmente podemos modificar la configuración global para poder manejar el volumen de forma remota:

sudo nano /etc/mpd.conf

La parte de audio output debería quedar con el mixer por software

audio_output {
       type            "alsa"
       name            "Raspotify"
       mixer_type      "software"
}

Step 6: Instalar Y Usar OMXplayer

Ahora lo último ver archivos de video, hasta ahora seguíamos con el cable HDMI conectado y seguramente con una terminal abierta en televisor, lo bueno es que gracias a omxplayer podemos reproducir películas en fullHD directamente en la terminal que esta abierta en el Televisor sin necesidad de instalar ningun entorno grafico, como siempre todo se puede hacer remotamente desde una terminal vía SSH desde cualquier PC de la red interna

Se instala de forma usual:

sudo apt-get install omxplayer

Lamentablemente, las fuentes para los subtítulos no se instalan automáticamente, por lo que tenemos que instalarlas manualmente:

sudo apt-get install fonts-freefont-ttf

Para que tome los subtitulos de forma automática, tienen que estar en el mismo directorio que la película y con el mismo nombre, pero con extensión .srt

Además como los substitulos son texto plano deben estar codificados en UTF-8 si queremos que tome los acentos y demás caracteres latinos, en caso de que no sea así, podemos solucionarlo gracias a GNU recode como se ve en la imagen:

sudo apt-get install recode

Vemos en qué codificación está el archivo de subtitulos:

file -i pelicula.srt

Lo pasamos de iso-8859-1 a utf8

recode iso-8859-1..utf8 pelicula.srt
luego ya podemos lanzar omxplayer para probar
omxplayer pelicula.mp4

En el link del programa están las teclas que se usan para adelantar, pausar o salir de omxplayer

si todo anda bien, deberíamos ver el vídeo con su respectivo subtitulo a pantalla completa en el TV con salida de audio analógica, si queremos forzar la salida de audio por HDMI:

omxplayer --adev hdmi pelicula.mp4

Obviamente no nos interesa que esté todo el tiempo la pantalla prendida, así que cuando solamente usamos la parte de audio, podemos apagar la salida HDMI

vcgencmd display_power 0

cuando necesitamos prender nuevamente:

vcgencmd display_power 1

Una forma de automatizar esto y que la pantalla inicie apagada es: Editar /boot/config.txt

sudo nano /boot/config.txt
#Disable HDMI
hdmi_blanking=2

Si necesitamos prenderlo usamos:

vcgencmd display_power 1

Step 7: Consideraciones Finales

Bueno, con esto ya tenemos un centro multimedia bastante completo y funcional, sin duda hay otras soluciones más prácticas, como volumio, openelec o Mopidy, pero en mi caso como inicialmente pensaba montarlo en un RPbi 1 preferí hacerlo desde 0 solamente con lo necesario y lo mas minimalista posible, obviamente poner a punto todo y hacerlo andar de la forma que quería (especialmente MPD) llevo tiempo y en muchas parte del proceso frustración, pero haberlo logrado y sumado a lo que pude aprender en el camino, vale la pena tanto como pasatiempo como producto final que uso a diario.

Dudas/Sugerencias/consultas y puteadas => mirko@pacoricona.com.ar