Spotify, Tidal, Google Music (y más) en bitperfect en Linux y OS X
5 participantes
Página 1 de 1.
Spotify, Tidal, Google Music (y más) en bitperfect en Linux y OS X
Pero... ¿cuál es el problema?
Una de las quejas más frecuentes de los usuarios de los distintos servicios de streaming de audio, después de la que supone el uso de codecs con compresión con pérdidas (Spotify y Google Music) es la que tiene que ver con el software de reproducción.
Aunque en ocasiones dispondremos de programas nativos para acceder al servicio correspondiente, como es el caso de Spotify para Windows, OS X y Linux (excelente soporte multiplataforma) o Tidal para Windows y OS X, en otras deberemos recurrir a una interfaz web, más o menos afortunada, y a un navegador desde la que explorarla, como ocurre con Google Music. Lo que es común a todos los casos es la incapacidad de unas u otras alternativas de saltarse el mezclador de audio del sistema y utilizar el dispositivo de sonido de modo transparente, directo y exclusivo, esto es, funcionar en lo que se conoce como modo bitperfect o modo de reproducción transparente.
Esta característica se considera indispensable para alcanzar una reproducción de alta fidelidad puesto que de este modo las aplicaciones de reproducción evitan dos fenómenos que tienen lugar en el ámbito digital, en un escenario en el que varios procesos del sistema operativo compiten naturalmente por la capacidad de emitir sonido, y potencialmente pueden dañar la integridad del flujo de audio:
Además, estos dos procesos pueden llevar parejos otros fenómenos menos evidentes: normalización, compresión del rango dinámico, conversiones entre distintos formatos de representación numérica, incremento de la latencia (aunque esto en principio no tiene por qué empeorar la calidad percibida), etc. etc.
Todos los sistemas operativos utilizados en la actualidad disponen de mecanismos para conseguir la reproducción en modo transparente. En Windows tenemos WASAPI, soportado directamente por la arquitectura de audio de Windows, y ASIO (siempre y cuando el controlador del dispositivo lo admita), en OS X los propios servicios de Core Audio y en entornos Linux, ALSA. El problema nos lo encontramos si el reproductor no está diseñado para gestionar el audio utilizando estas funciones, como es el caso cuando hablamos de servicios de streaming.
En mi experiencia, y lejos de otras prácticas audiófilas más o menos esotéricas, el uso de un reproductor capaz de funcionar en modo bitperfect sí suele comportar mejoras audibles, al menos cuando el audio reproducido tiene cierta calidad. Sea por esto, sea por conseguir nuestra tan deseada tranquilidad audiófila, veamos pues qué podemos hacer para mejorar esta situación.
Algunas soluciones conocidas
Existen soluciones específicas, que no obstante dependen del sistema operativo y servicio de streaming particular empleado. Algunas muy conocidas son estas dos:
En ambos casos se trata, como podéis ver, de utilizar un proxy de audio, un intermediario que se conecta al servicio, evitando los modos de acceso, digamos, oficiales, y se las apaña por su cuenta para conseguir una reproducción de mayor calidad.
En este artículo voy a presentar una alternativa similar, pero aplicable de modo general a Spotify, Tidal, Google Music (y otros servicios como las radios de Tune-In o Pandora) y en sistemas Linux. Y gratuita, claro.
Bienvenidos a Mopidy
Si dirigimos la mirada hacia los servidores de audio de código abierto más populares disponibles en la actualidad nos encontraremos de un modo ubicuo con dos grandes protagonistas, con el permiso de Kodi y sus numerosas variantes y, por supuesto, los incontables servidores DLNA / UPnP de variado pelaje:
Es precisamente este último, Pi MusicBox, en el que nos vamos a fijar. Se trata de un reproductor para la Raspberry Pi bastante poco conocido y (quizás) de configuración algo antipática, pero que resulta ser una auténtica navaja suiza por lo que hace a sus capacidades. Además de permitir la reproducción de audio local (por supuesto) y ser capaz de hacerse pasar por renderer de audio DLNA / OpenHome y altavoz AirPlay, también puede conectarse a servicios como Google Music, Spotify o SoundCloud, haciendo la función de proxy descrita anteriomente, reproducir podcasts y radios por Internet de diferentes tipos, e incluso interactuar con servidores Subsonic. Casi nada.
Gran parte de todo ello se lo debe sin embargo a Mopidy, un desarrollo quizás incluso más oscuro que Pi MusicBox y que está profundamente asentado en sus entrañas digitales. Se trata de un servidor de audio extensible que a diferencia de Pi MusicBox puede ser instalado en un PC de uso no dedicado que corra OS X o Linux, de modo que podamos estar escuchando musiquita con él mientras trabajamos, navegamos en Audio Planet o hacemos cualquier otra cosa menos (o más) productiva.
Lo más interesante es que Mopidy ofrece una flexibilidad increíble a la hora de ajustar su configuración, flexibilidad que incluye la posibilidad de seleccionar el modo en que se gestionará (lo habéis adivinado) el dispositivo de audio.
Pero dejémonos de divulgación y establezcamos objetivos. Vamos a montar un tinglado capaz de:
Mopidy es capaz de más, mucho más, pero en esta ocasión nos vamos a centrar exclusivamente en resolver el problema descrito más arriba, problema que, dicho sea de paso, también podríamos afrontar con un tinglado similar, quizás algo más aparatoso y complicado de poner en marcha, basado en Logitech Media Server.
Instalando y configurando Mopidy
Antes de comenzar, una advertencia importante: Mopidy requiere un entorno Python y una serie de librerías adicionales en el sistema de las que depende su buen funcionamiento. Pip, el instalador de paquetes Python, también nos va a venir muy bien. Pero esto es Linux, señores, y las circunstancias particulares del entorno y la distribución del sistema operativo de cada uno pueden variar (seguro que lo hacen), condicionando el proceso de instalación. Lo que sigue, por tanto, solo pretenden ser unas indicaciones generales y un registro de los pasos que he tenido que seguir en mi caso (Linux Mint 17.3 Cinnamon). Si no hay contratiempos (yo sí los tuve), el proceso se debería completar en unos minutos. Entramos pues en zona hostil para manazas... precaución, amigo audiófilo.
De entrada es posible que os encontréis con Mopidy entre el catálogo de programas instalables a golpe de clic en vuestra distribución. En mi caso fue así, pero la versión disponible era muy antigua y, además, faltaban en el repositorio de Mint la mayor parte de los paquetes necesarios para instalar las extensiones, que es donde está el meollo de la nuestra cuestión. Por esa razón, lo sano es instalar la aplicación directamente de los reproductores oficiales, en mi caso utilizando los de Debian.
Lo primero es añadir la clave GPG del repositorio de Mopidy:
A continuación añadimos el repositorio a nuestro gestor de paquetes. Yo lo he hecho a través de Synaptic.
Tras abrir la aplicación, pinchamos en Configuración :: Repositorios :: Repositorios adicionales.
Hacemos clic repetidamente sobre el botón +Agregar nuevo repositorio y escribimos secuencialmente (1 cada vez) las siguientes direcciones de los repositorios:
Ahora abrimos una terminal de comandos e instalamos Mopidy:
Mopidy tiene un elevado número de extensiones que expanden su funcionalidad. Necesitaremos las siguientes para lograr nuestros objetivos:
Ahora es cuando nos vendrá bien Pip. Para ver una lista de todos los módulos disponibles podemos utilizar el comando:
Para instalar un módulo de la lista usaremos:
Para desinstalar un módulo instalado:
En nuestro caso:
Es posible que para resolver dependencias Pip instale automáticamente otros módulos. No hay problema con eso. Es importante instalar estos paquetes de uno en uno para comprobar que el proceso se desarrolla sin errores, así que teclearemos los comandos despacito, con buena letra y de uno en uno y prestaremos atención a los mensajes de Pip.
Ahora toca modificar a mano el archivo de configuración de Mopidy para hacer nuestra.
No obstante, antes necesitamos saber como identifica ALSA el dispositivo de sonido que deseamos utilizar con Mopidy en modo exclusivo. Para ello recurriremos al comando;
En mi caso esto es lo que aparece en pantalla:
**** Lista de PLAYBACK dispositivos hardware ****
tarjeta 0: STX [Xonar STX], dispositivo 0: Multichannel [Multichannel]
Subdispositivos: 1/1
Subdispositivo #0: subdevice #0
tarjeta 0: STX [Xonar STX], dispositivo 1: Digital [Digital]
Subdispositivos: 1/1
Subdispositivo #0: subdevice #0
tarjeta 1: Intel [HDA Intel], dispositivo 0: ALC889A Analog [ALC889A Analog]
Subdispositivos: 1/1
Subdispositivo #0: subdevice #0
tarjeta 1: Intel [HDA Intel], dispositivo 1: ALC889A Digital [ALC889A Digital]
Subdispositivos: 1/1
Subdispositivo #0: subdevice #0
En mi PC hay dos interfaces de audio (tarjeta 0 y tarjeta 1): una Asus Xonar STX y el integrado en la placa base, un ALC889A de Intel. Cada una de ellos tiene, a su vez, dos dispositivos (dispositivos 0, 1). El primero se corresponde en cada caso con la salida analógica, en tanto que el segundo representa la salida digital. En rojo el que vamos a utilizar.
ALSA utiliza una nomenclatura determinada para etiquetar los dispositivos de audio del sistema. En nuestro caso será:
hw:0,0 (donde los ceros representan tarjeta y dispositivo, respectivamente)
o también, si somos más expresivos:
hw:CARD=STX,DEV=0 (esta nomenclatura quizás resulte más clara)
Con esta información importante en el bolsillo, nos dirigimos ahora sí a editar el archivo de configuración, que se encuentra en:
~/.config/mopidy/mopidy.conf (donde el símbolo ~ representa la carpeta del perfil del usuario)
Para ello tecleamos:
El archivo de texto está estructurado en diversas secciones, cada una de ellas precedida por su nombre entre corchetes [..], que contienen un serie de parámetros y sus respectivos valores. Por defecto, las precedidas por un # están comentadas, pero sirven para informarnos de los valores por defecto que tomará Mopidy en ausencia de un par (parámetro, valor) asignado por el usuario (esto es, sin el # como prefijo).
Vamos a revisar las que tenemos que modificar.
[audio]
mixer = alsamixer
mixer_volume = 100
output = alsasink device=hw:CARD=STX,DEV=0
#buffer_time =
[alsamixer]
enabled = true
card = 0
control = Master
#min_volume = 0
#max_volume = 100
#volume_scale = cubic
Aquí le decimos a Mopidy que vamos a utilizar ALSA y cuál es el dispositivo de salida que queremos emplear (recordad, lo hemos obtenido hace un momento). Destaco nuevamente en rojo su identificador. Que no os desconcierte el término "mixer" aquí y allá, no se va a producir mezcla alguna de flujos de audio. Ajustamos el volumen a 100, pero activamos la posibilidad de control del mismo a través del control maestro de la Asus Xonar STX.
Vamos ahora a por Spotify, Tidal y Google Music. Recordad, al resto de parámetros del archivo de configuración, dentro de cada sección, no les tocaremos ni un pelo. Solo modificaremos los enumerados en este tutorial (destaco en rojo los cruciales para el funcionamiento del servicio).
[spotify]
enabled = true
username = usuario_de_spotify
password = clave_de_spotify
bitrate = 320
volume_normalization = false
[tidal]
enabled = true
username = usuario_de_Tidal
password = clave_de_Tidal
quality = LOSSLESS
[gmusic]
enabled = true
username = usuario_de_Google_Music
password = clave_de_Google_Music
bitrate = 320
all_access = true
Es necesario disponer de cuenta de pago en Spotify y Tidal. En Google Music, sin embargo, podremos ojear y reproducir las pistas que hayamos subido al servicio si solo disponemos de cuenta gratuita. Si contamos con una subscripción de pago además tendremos acceso a todo el catálogo.
Ahora desactivaremos unos cuantos complementos que no vamos a necesitar puesto que solo queremos escuchar música en streaming. Viva la personalización.
[m3u]
enabled = false
[file]
enabled = false
[local]
enabled = false
Y, por último, desactivamos el control de volumen software, por si las moscas:
[softwaremixer]
enabled = false
El servicio TuneIn no tiene ajustes aquí, así que hemos terminado. Es momento de comprobar si nuestro servidor Mopidy tuneado arranca. Vamos a la línea de comandos y tecleamos:
Si lo que aparece es algo como esto podemos cantar victoria, lo hemos conseguido.
INFO Starting Mopidy 2.1.0
INFO Loading config from builtin defaults
INFO Loading config from /home/pablo/.config/mopidy/mopidy.conf
INFO Loading config from command line options
INFO Enabled extensions: spotify, mpd, alsamixer, http, stream, iris, gmusic, material-webclient, local-images, tidal, tunein
INFO Disabled extensions: m3u, softwaremixer, local, file
INFO Starting Mopidy mixer: AlsaMixer
INFO Mixing using ALSA, card 0, mixer control "Master".
INFO Mixer volume set to 100
INFO Starting Mopidy audio
INFO Starting Mopidy backends: TuneInBackend, SpotifyBackend, GMusicBackend, TidalBackend, StreamBackend
INFO Audio output set to "alsasink device=hw:CARD=STX,DEV=0"
INFO Connecting to TIDAL.. Quality = LOSSLESS
INFO Logged in to Spotify in offline mode
INFO Logged in to Spotify in online mode
INFO TIDAL Login OK
INFO Logged in to Google Music
INFO Start refreshing Google Music library
INFO Start refreshing Google Music playlists
INFO Starting Mopidy core
INFO Finished refreshing Google Music library in 1s
INFO Loaded 1 playlists from Google Music
INFO Finished refreshing Google Music playlists in 1s
INFO Starting Mopidy frontends: IrisFrontend, GMusicScrobblerFrontend, MpdFrontend, HttpFrontend
INFO Starting Iris 2.13.15
INFO MPD server running at [::ffff:127.0.0.1]:6600
INFO HTTP server running at [::ffff:127.0.0.1]:6680
INFO Starting GLib mainloop
Destaco nuevamente en rojo las líneas que nos confirman cosas buenas. Todas son importantes, pero esas más puesto que tienen que ver con las extensiones cargadas y la configuración del dispositivo de audio.
El control del cursor no vuelve al usuario tras invocar Mopidy en la terminal de comandos. Mopidy se está ejecutando y por tanto la ventana se bloquea. Si la cerramos o pulsamos CTRL+C finalizaremos el proceso y Mopidy se detendrá. Es posible configurarlo para que arranque automáticamente de modo silencioso, al iniciar el ordenador, quedando de ese modo disponible en segundo plano para su uso en cualquier momento. No obstante yo he preferido crear un script de inicio (no olvidemos hacerlo ejecutable) y un acceso directo al mismo para abrirlo manualmente cuando sea necesario.
¿Y si las cosas no han ido bien a la primera y en la ventana de inicio nos aparecen mensajes indicando que ciertos servicios no han arrancado?
Lamentablemente no hay una respuesta única válida para todos los casos. Esto es Linux (otra vez), si no te sientes cómodo con ello cómprate un Mac o instala Windows y aprende a vivir con las limitaciones de ambos sistemas. Desgraciadamente, no hay más. La curva de aprendizaje puede ser pronunciada, pero hay muchísima gente dispuesta a echar un cable y la sensación de satisfacción cuando se consigue algo, aprendiendo en el proceso, libera tantas endorfinas como correr 15 kilómetros de una tacada. O más.
Sigamos por tanto adelante. Si las cosas fallan y Mopidy no arranca en absoluto o fallan algunas de las extensiones hay que revisar todos los pasos, comprobar que nuestro sistema cumple los requisitos por lo que hace a los paquetes instalados previamente y tirar mucho de Google buscando el mensaje o mensajes de error concretos que nos aparezcan para tratar de acotar el problema y encontrar una solución.
En mi caso particular (por ejemplo), Mopidy no funcionó inicialmente quejándose de la versión de Tornado (un módulo Python relacionado con servicios de comunicación web) presente en mi sistema. Lo solucioné actualizándolo a la versión 4.5.1:
Por cierto, a la hora de averiguar por qué las cosas están fallando resulta muy útil determinar la versión de los distintos módulos Python instalados, así:
Por ejemplo:
Name: tornado
Version: 4.5.1
Location: /usr/local/lib/python2.7/dist-packages
Requires: backports.ssl-match-hostname, singledispatch, certifi, backports-abc
A partir de ahí Mopidy arrancó ya más o menos normalmente. El problema más grave, que me llevó un buen rato solucionar, tuvo que ver con la extensión de Google Music, que inicialmente no cargaba, apareciendo un mensaje en al arranque de Mopidy diciendo que la versión disponible en el sistema del módulo Python requests no era compatible. Tras forzar una actualización a la versión 2.13.0 con...
... la cosa empeoró, esta vez con una parrafada en color rojo emitida por Mopidy al iniciarse que no pintaba nada, nada bien y que concluía con un fastidioso:
from google.protobuf import symbol_database as _symbol_database
ImportError: cannot import name symbol_database
Tras darle más de dos y más de tres vueltas al asunto, finalmente conseguí solucionarlo desinstalando un vestigio del módulo Python protobuf que estaba haciendo la pascua en mi sistema:
Otro consejo: en estos escenarios pantanosos de pruebas repletas de incertidumbre conviene anotar las versiones de los módulos instalados que toqueteamos por si, tras una actualización, hay que practicar una regresión de alguno de ellos para evitar males mayores. Con este fin, el comando Pip permite indicar la versión que deseamos instalar. Por ejemplo...
...instala la versión 2.2.1 del módulo requests (sí, el que me hizo pasar un buen rato la madrugada que estuve echando a andar todo esto).
Ojo los que seáis de tiro fácil: todas estas cosas hay que hacerlas con cautela.
Lamento no poder dar instrucciones más concretas ante la ingente cantidad de problemas que pueden surgir, pero si os encontráis con ellos no tenéis más que comentar en el hilo. Seguro que la cosa tiene solución.
Demos pues por cerrada la (espero poco) accidentada instalación de este tinglado y pasemos a ver si el esfuerzo ha merecido la pena.
¿Y esto qué pinta tiene?
Lancemos Mopidy y salgamos de dudas:
Como algún lector avispado es posible que ya haya averiguado al hurgar en el archivo de configuración de Mopidy, la interfaz web de control de Mopidy se encuentra en: http://127.0.0.1:6680
Recordemos que 127.0.0.1 es una dirección IP especial que representa siempre al propio sistema. Abramos por tanto un navegador para acceder. Esto es lo que veremos:
Vamos a olvidarnos de images, se trata de un módulo interno que no nos interesa en estos momentos. Veremos otros 2 enlaces, iris y material-webclient. Si repasais la sección en la que hablábamos de las extensiones que íbamos a instalar, comprobaréis que se trata de sendas interfaces de control web de Mopidy. La chula es la primera, iris, que además se adapta como un guante al modo en que funciona Spotify. La segunda es un cliente web que podemos utilizar alternativamente para ojear con mayor facilidad el catálogo de Tidal o Google Music o TuneIn. Lo suyo, en estos momentos, sería que abrierais ambas interfaces en sendas pestañas y las agregarais a los favoritos / marcadores de vuestro navegador para un rápido acceso.
Comencemos con Iris (en http://127.0.0.1:6680/iris). Primeramente haremos clic en Settings para comprobar el estado de la extensión. Veremos que aunque nuestro perfil de Spotify ha sido reconocido es necesaria una autenticación adicional para acceder sin restricciones al catálogo del servicio. Haremos clic en el botón LOG IN y seguiremos las instrucciones.
¡Atención! Si tenéis un bloqueador de ventas emergentes desconectadlo temporalmente ahora para acceder sin problemas a la ventana de autorización.
De regreso a la ventana de ajustes comprobaremos que ahora sí todo está en orden. Verificaremos también que los backends adicionales (las extensiones de Mopidy que nos dan acceso a Google Music, Tidal, y TuneIn) están activadas.
Solo queda pues disfrutar del servicio. Algunas capturas, por favor...
Como podéis apreciar, Iris es una replica extremadamente funcional y de magnífico diseño de la interfaz web de Spotify. Tenemos de todo: recomendaciones, novedades, catálogo por géneros musicales, nuevos lanzamientos, artistas similares, biografías, imágenes contextuales, diferentes vistas y criterios de ordenación y acceso inmediato a toda la biblioteca personal que hayamos ido construyendo en Spotify. Y ahora podemos disfrutar de todo esto en modo bitperfect.
Comprobaréis que otros catálogos (Tidal, Google Music, TuneIn) no aparecen por ningún lado. Para llegar a ellos tendremos que utilizar la función de búsqueda. Iris ofrecerá primeramente los resultados de Spotify y, a continuación los obtenidos de otros repositorios de búsqueda (los famosos backends), empleando iconos para diferenciar los procedentes de Spotify y Google Music. Cuando nos encontremos con una pista, disco, etc. sin icono... se tratará casi con total seguridad de un elemento extraído de Tidal. No es lo ideal (quizás en un futuro Iris se actualice para dar mejor soporte a otros catálogos musicales), pero al menos resulta funcional.
Lo bueno es que si hacemos clic sobre un álbum o artista de Google Music o Tidal pasaremos a explorar el catálogo correspondiente, siendo ya muy fácil localizar, por ejemplo, todos sus discos. En esta página, a la que hemos llegado haciendo clic en el nombre del artista en cualquiera de los resultados de búsqueda en los que Iris no ha mostrado icono identificativo, vemos todo lo que Tidal tiene de McEnroe, incluyendo una página con información general (About).
Y, por supuesto, sin perdidas.
Si echáis de menos la posibilidad de acceder a vuestros álbumes favoritos / música subida de / a Google Music o Tidal de un modo más diferenciado o simplemente recorrer las estaciones de radio de TuneIn, aún a costa de perder el extremadamente depurado aspecto y funcionalidad de Iris, posiblemente prefiráis la segunda interfaz web de control, material-webclient, que está accesible en
Desde la sección Library podremos ahora recorrer los catálogos de los cuatro servicios configurados de modo explícito.
Aquí tenemos la música propia que he subido a Google Music. El cuadro de búsqueda que aparece en cada sección lógicamente solo la realizará dentro del catálogo correspondiente:
Y aquí las listas de reproducción de Spotify:
Por último, en esta imagen podemos ver el funcionamiento del directorio de emisoras de TuneIn:
Bueno, ha sido largo pero creo que ha merecido la pena, ¿no os parece?
Una de las quejas más frecuentes de los usuarios de los distintos servicios de streaming de audio, después de la que supone el uso de codecs con compresión con pérdidas (Spotify y Google Music) es la que tiene que ver con el software de reproducción.
Aunque en ocasiones dispondremos de programas nativos para acceder al servicio correspondiente, como es el caso de Spotify para Windows, OS X y Linux (excelente soporte multiplataforma) o Tidal para Windows y OS X, en otras deberemos recurrir a una interfaz web, más o menos afortunada, y a un navegador desde la que explorarla, como ocurre con Google Music. Lo que es común a todos los casos es la incapacidad de unas u otras alternativas de saltarse el mezclador de audio del sistema y utilizar el dispositivo de sonido de modo transparente, directo y exclusivo, esto es, funcionar en lo que se conoce como modo bitperfect o modo de reproducción transparente.
Esta característica se considera indispensable para alcanzar una reproducción de alta fidelidad puesto que de este modo las aplicaciones de reproducción evitan dos fenómenos que tienen lugar en el ámbito digital, en un escenario en el que varios procesos del sistema operativo compiten naturalmente por la capacidad de emitir sonido, y potencialmente pueden dañar la integridad del flujo de audio:
- Remuestreo de los flujos de sonido a una frecuencia y profundidad de bits prefijadas por el sistema operativo en su configuración del mezclador.
- Mezcla de estos streams de audio en uno solo, que es el que finalmente se envía al dispositivo de audio para su reproducción.
Además, estos dos procesos pueden llevar parejos otros fenómenos menos evidentes: normalización, compresión del rango dinámico, conversiones entre distintos formatos de representación numérica, incremento de la latencia (aunque esto en principio no tiene por qué empeorar la calidad percibida), etc. etc.
Todos los sistemas operativos utilizados en la actualidad disponen de mecanismos para conseguir la reproducción en modo transparente. En Windows tenemos WASAPI, soportado directamente por la arquitectura de audio de Windows, y ASIO (siempre y cuando el controlador del dispositivo lo admita), en OS X los propios servicios de Core Audio y en entornos Linux, ALSA. El problema nos lo encontramos si el reproductor no está diseñado para gestionar el audio utilizando estas funciones, como es el caso cuando hablamos de servicios de streaming.
En mi experiencia, y lejos de otras prácticas audiófilas más o menos esotéricas, el uso de un reproductor capaz de funcionar en modo bitperfect sí suele comportar mejoras audibles, al menos cuando el audio reproducido tiene cierta calidad. Sea por esto, sea por conseguir nuestra tan deseada tranquilidad audiófila, veamos pues qué podemos hacer para mejorar esta situación.
Algunas soluciones conocidas
Existen soluciones específicas, que no obstante dependen del sistema operativo y servicio de streaming particular empleado. Algunas muy conocidas son estas dos:
- Si utilizamos Spotify en Windows podemos recurrir a Fidelify, un cliente de audio gratuito de alta calidad para el servicio que sí admite WASAPI.
- En OS X, reproductores como Audirvana (de pago) permiten acceder al catálogo de Tidal (también Qobuz) y reproducir cualquier tema utilizando su motor de audio de alta calidad, que lógicamente es capaz de utilizar el modo exclusivo de Core Audio.
En ambos casos se trata, como podéis ver, de utilizar un proxy de audio, un intermediario que se conecta al servicio, evitando los modos de acceso, digamos, oficiales, y se las apaña por su cuenta para conseguir una reproducción de mayor calidad.
En este artículo voy a presentar una alternativa similar, pero aplicable de modo general a Spotify, Tidal, Google Music (y otros servicios como las radios de Tune-In o Pandora) y en sistemas Linux. Y gratuita, claro.
Bienvenidos a Mopidy
Si dirigimos la mirada hacia los servidores de audio de código abierto más populares disponibles en la actualidad nos encontraremos de un modo ubicuo con dos grandes protagonistas, con el permiso de Kodi y sus numerosas variantes y, por supuesto, los incontables servidores DLNA / UPnP de variado pelaje:
- Logitech Media Server (LMS para los amigos) que, una vez trascendidos los Squeezeboxes originales, es el corazón de desarrollos tan interesantes como piCorePlayer, Daphile (gratuitos) o Max2Play (este de pago).
- Music Player Daemon (MPD), que podemos hallar en el interior de un sinnúmero de desarrollos gratis total como Volumio, RuneAudio o Pi MusicBox, pero también, con modificaciones de mayor o menor alcance, propulsando streamers dedicados de conocidas marcas y frecuentemente elevado coste.
Es precisamente este último, Pi MusicBox, en el que nos vamos a fijar. Se trata de un reproductor para la Raspberry Pi bastante poco conocido y (quizás) de configuración algo antipática, pero que resulta ser una auténtica navaja suiza por lo que hace a sus capacidades. Además de permitir la reproducción de audio local (por supuesto) y ser capaz de hacerse pasar por renderer de audio DLNA / OpenHome y altavoz AirPlay, también puede conectarse a servicios como Google Music, Spotify o SoundCloud, haciendo la función de proxy descrita anteriomente, reproducir podcasts y radios por Internet de diferentes tipos, e incluso interactuar con servidores Subsonic. Casi nada.
Gran parte de todo ello se lo debe sin embargo a Mopidy, un desarrollo quizás incluso más oscuro que Pi MusicBox y que está profundamente asentado en sus entrañas digitales. Se trata de un servidor de audio extensible que a diferencia de Pi MusicBox puede ser instalado en un PC de uso no dedicado que corra OS X o Linux, de modo que podamos estar escuchando musiquita con él mientras trabajamos, navegamos en Audio Planet o hacemos cualquier otra cosa menos (o más) productiva.
Lo más interesante es que Mopidy ofrece una flexibilidad increíble a la hora de ajustar su configuración, flexibilidad que incluye la posibilidad de seleccionar el modo en que se gestionará (lo habéis adivinado) el dispositivo de audio.
Pero dejémonos de divulgación y establezcamos objetivos. Vamos a montar un tinglado capaz de:
- Funcionar en un sistema Linux / OS X (aunque el tutorial lo desarrollaré en el primero) de modo no dedicado.
- Conectarse a Spotify, Tidal y Google Music para explorar nuestra biblioteca, listas de reproducción y realizar búsquedas en sus catálogos a través de una interfaz web cómoda y vistosa.
- Reproducir emisoras de radio por Internet de TuneIn.
- Reproducir los flujos de audio de los servicios anteriores de modo bitperfect, a través de ALSA.
Mopidy es capaz de más, mucho más, pero en esta ocasión nos vamos a centrar exclusivamente en resolver el problema descrito más arriba, problema que, dicho sea de paso, también podríamos afrontar con un tinglado similar, quizás algo más aparatoso y complicado de poner en marcha, basado en Logitech Media Server.
Instalando y configurando Mopidy
Antes de comenzar, una advertencia importante: Mopidy requiere un entorno Python y una serie de librerías adicionales en el sistema de las que depende su buen funcionamiento. Pip, el instalador de paquetes Python, también nos va a venir muy bien. Pero esto es Linux, señores, y las circunstancias particulares del entorno y la distribución del sistema operativo de cada uno pueden variar (seguro que lo hacen), condicionando el proceso de instalación. Lo que sigue, por tanto, solo pretenden ser unas indicaciones generales y un registro de los pasos que he tenido que seguir en mi caso (Linux Mint 17.3 Cinnamon). Si no hay contratiempos (yo sí los tuve), el proceso se debería completar en unos minutos. Entramos pues en zona hostil para manazas... precaución, amigo audiófilo.
De entrada es posible que os encontréis con Mopidy entre el catálogo de programas instalables a golpe de clic en vuestra distribución. En mi caso fue así, pero la versión disponible era muy antigua y, además, faltaban en el repositorio de Mint la mayor parte de los paquetes necesarios para instalar las extensiones, que es donde está el meollo de la nuestra cuestión. Por esa razón, lo sano es instalar la aplicación directamente de los reproductores oficiales, en mi caso utilizando los de Debian.
Lo primero es añadir la clave GPG del repositorio de Mopidy:
- Código:
wget -q -O - https://apt.mopidy.com/mopidy.gpg | sudo apt-key add -
A continuación añadimos el repositorio a nuestro gestor de paquetes. Yo lo he hecho a través de Synaptic.
Tras abrir la aplicación, pinchamos en Configuración :: Repositorios :: Repositorios adicionales.
Hacemos clic repetidamente sobre el botón +Agregar nuevo repositorio y escribimos secuencialmente (1 cada vez) las siguientes direcciones de los repositorios:
- Código:
deb http://apt.mopidy.com/ stable main contrib non-free
deb-src http://apt.mopidy.com/ stable main contrib non-free
Ahora abrimos una terminal de comandos e instalamos Mopidy:
- Código:
sudo apt-get update && sudo apt-get install mopidy
Mopidy tiene un elevado número de extensiones que expanden su funcionalidad. Necesitaremos las siguientes para lograr nuestros objetivos:
- Mopidy-ALSAMixer: Mezclador de audio para ALSA.
- Mopidy-Spotify: Acceso a Spotify.
- Mopidy-GMusic: Acceso a Google Music.
- Mopidy-Tidal: Acceso al catálogo de Tidal.
- Mopidy-TuneIn: Acceso a emisoras de radio de TuneIn.
- Mopidy-Iris: Interfaz web de control de Mopidy, ideal para Spotify.
- Mopidy-Material-WebClient: Interfaz web alternativa que permite diferenciar mejor el catálogo de Spotify, Tidal y Google Music.
Ahora es cuando nos vendrá bien Pip. Para ver una lista de todos los módulos disponibles podemos utilizar el comando:
- Código:
pip search mopidy
Para instalar un módulo de la lista usaremos:
- Código:
sudo pip install nombre_del_módulo
Para desinstalar un módulo instalado:
- Código:
sudo pip uninstall nombre_del_módulo
En nuestro caso:
- Código:
sudo pip install Mopidy-alsamixer
sudo pip install Mopidy-spotify
sudo pip install Mopidy-GMusic
sudo pip install Mopidy-Tidal
sudo pip install Mopidy-TuneIn
sudo pip install Mopidy-Iris
sudo pip install Mopidy-Material-WebClient
Es posible que para resolver dependencias Pip instale automáticamente otros módulos. No hay problema con eso. Es importante instalar estos paquetes de uno en uno para comprobar que el proceso se desarrolla sin errores, así que teclearemos los comandos despacito, con buena letra y de uno en uno y prestaremos atención a los mensajes de Pip.
Ahora toca modificar a mano el archivo de configuración de Mopidy para hacer nuestra.
No obstante, antes necesitamos saber como identifica ALSA el dispositivo de sonido que deseamos utilizar con Mopidy en modo exclusivo. Para ello recurriremos al comando;
- Código:
aplay -l
En mi caso esto es lo que aparece en pantalla:
**** Lista de PLAYBACK dispositivos hardware ****
tarjeta 0: STX [Xonar STX], dispositivo 0: Multichannel [Multichannel]
Subdispositivos: 1/1
Subdispositivo #0: subdevice #0
tarjeta 0: STX [Xonar STX], dispositivo 1: Digital [Digital]
Subdispositivos: 1/1
Subdispositivo #0: subdevice #0
tarjeta 1: Intel [HDA Intel], dispositivo 0: ALC889A Analog [ALC889A Analog]
Subdispositivos: 1/1
Subdispositivo #0: subdevice #0
tarjeta 1: Intel [HDA Intel], dispositivo 1: ALC889A Digital [ALC889A Digital]
Subdispositivos: 1/1
Subdispositivo #0: subdevice #0
En mi PC hay dos interfaces de audio (tarjeta 0 y tarjeta 1): una Asus Xonar STX y el integrado en la placa base, un ALC889A de Intel. Cada una de ellos tiene, a su vez, dos dispositivos (dispositivos 0, 1). El primero se corresponde en cada caso con la salida analógica, en tanto que el segundo representa la salida digital. En rojo el que vamos a utilizar.
ALSA utiliza una nomenclatura determinada para etiquetar los dispositivos de audio del sistema. En nuestro caso será:
hw:0,0 (donde los ceros representan tarjeta y dispositivo, respectivamente)
o también, si somos más expresivos:
hw:CARD=STX,DEV=0 (esta nomenclatura quizás resulte más clara)
Con esta información importante en el bolsillo, nos dirigimos ahora sí a editar el archivo de configuración, que se encuentra en:
~/.config/mopidy/mopidy.conf (donde el símbolo ~ representa la carpeta del perfil del usuario)
Para ello tecleamos:
- Código:
gedit .config/mopidy/mopidy.conf
El archivo de texto está estructurado en diversas secciones, cada una de ellas precedida por su nombre entre corchetes [..], que contienen un serie de parámetros y sus respectivos valores. Por defecto, las precedidas por un # están comentadas, pero sirven para informarnos de los valores por defecto que tomará Mopidy en ausencia de un par (parámetro, valor) asignado por el usuario (esto es, sin el # como prefijo).
Vamos a revisar las que tenemos que modificar.
[audio]
mixer = alsamixer
mixer_volume = 100
output = alsasink device=hw:CARD=STX,DEV=0
#buffer_time =
[alsamixer]
enabled = true
card = 0
control = Master
#min_volume = 0
#max_volume = 100
#volume_scale = cubic
Aquí le decimos a Mopidy que vamos a utilizar ALSA y cuál es el dispositivo de salida que queremos emplear (recordad, lo hemos obtenido hace un momento). Destaco nuevamente en rojo su identificador. Que no os desconcierte el término "mixer" aquí y allá, no se va a producir mezcla alguna de flujos de audio. Ajustamos el volumen a 100, pero activamos la posibilidad de control del mismo a través del control maestro de la Asus Xonar STX.
Vamos ahora a por Spotify, Tidal y Google Music. Recordad, al resto de parámetros del archivo de configuración, dentro de cada sección, no les tocaremos ni un pelo. Solo modificaremos los enumerados en este tutorial (destaco en rojo los cruciales para el funcionamiento del servicio).
[spotify]
enabled = true
username = usuario_de_spotify
password = clave_de_spotify
bitrate = 320
volume_normalization = false
[tidal]
enabled = true
username = usuario_de_Tidal
password = clave_de_Tidal
quality = LOSSLESS
[gmusic]
enabled = true
username = usuario_de_Google_Music
password = clave_de_Google_Music
bitrate = 320
all_access = true
Es necesario disponer de cuenta de pago en Spotify y Tidal. En Google Music, sin embargo, podremos ojear y reproducir las pistas que hayamos subido al servicio si solo disponemos de cuenta gratuita. Si contamos con una subscripción de pago además tendremos acceso a todo el catálogo.
Ahora desactivaremos unos cuantos complementos que no vamos a necesitar puesto que solo queremos escuchar música en streaming. Viva la personalización.
[m3u]
enabled = false
[file]
enabled = false
[local]
enabled = false
Y, por último, desactivamos el control de volumen software, por si las moscas:
[softwaremixer]
enabled = false
El servicio TuneIn no tiene ajustes aquí, así que hemos terminado. Es momento de comprobar si nuestro servidor Mopidy tuneado arranca. Vamos a la línea de comandos y tecleamos:
- Código:
mopidy
Si lo que aparece es algo como esto podemos cantar victoria, lo hemos conseguido.
INFO Starting Mopidy 2.1.0
INFO Loading config from builtin defaults
INFO Loading config from /home/pablo/.config/mopidy/mopidy.conf
INFO Loading config from command line options
INFO Enabled extensions: spotify, mpd, alsamixer, http, stream, iris, gmusic, material-webclient, local-images, tidal, tunein
INFO Disabled extensions: m3u, softwaremixer, local, file
INFO Starting Mopidy mixer: AlsaMixer
INFO Mixing using ALSA, card 0, mixer control "Master".
INFO Mixer volume set to 100
INFO Starting Mopidy audio
INFO Starting Mopidy backends: TuneInBackend, SpotifyBackend, GMusicBackend, TidalBackend, StreamBackend
INFO Audio output set to "alsasink device=hw:CARD=STX,DEV=0"
INFO Connecting to TIDAL.. Quality = LOSSLESS
INFO Logged in to Spotify in offline mode
INFO Logged in to Spotify in online mode
INFO TIDAL Login OK
INFO Logged in to Google Music
INFO Start refreshing Google Music library
INFO Start refreshing Google Music playlists
INFO Starting Mopidy core
INFO Finished refreshing Google Music library in 1s
INFO Loaded 1 playlists from Google Music
INFO Finished refreshing Google Music playlists in 1s
INFO Starting Mopidy frontends: IrisFrontend, GMusicScrobblerFrontend, MpdFrontend, HttpFrontend
INFO Starting Iris 2.13.15
INFO MPD server running at [::ffff:127.0.0.1]:6600
INFO HTTP server running at [::ffff:127.0.0.1]:6680
INFO Starting GLib mainloop
Destaco nuevamente en rojo las líneas que nos confirman cosas buenas. Todas son importantes, pero esas más puesto que tienen que ver con las extensiones cargadas y la configuración del dispositivo de audio.
El control del cursor no vuelve al usuario tras invocar Mopidy en la terminal de comandos. Mopidy se está ejecutando y por tanto la ventana se bloquea. Si la cerramos o pulsamos CTRL+C finalizaremos el proceso y Mopidy se detendrá. Es posible configurarlo para que arranque automáticamente de modo silencioso, al iniciar el ordenador, quedando de ese modo disponible en segundo plano para su uso en cualquier momento. No obstante yo he preferido crear un script de inicio (no olvidemos hacerlo ejecutable) y un acceso directo al mismo para abrirlo manualmente cuando sea necesario.
¿Y si las cosas no han ido bien a la primera y en la ventana de inicio nos aparecen mensajes indicando que ciertos servicios no han arrancado?
Lamentablemente no hay una respuesta única válida para todos los casos. Esto es Linux (otra vez), si no te sientes cómodo con ello cómprate un Mac o instala Windows y aprende a vivir con las limitaciones de ambos sistemas. Desgraciadamente, no hay más. La curva de aprendizaje puede ser pronunciada, pero hay muchísima gente dispuesta a echar un cable y la sensación de satisfacción cuando se consigue algo, aprendiendo en el proceso, libera tantas endorfinas como correr 15 kilómetros de una tacada. O más.
Sigamos por tanto adelante. Si las cosas fallan y Mopidy no arranca en absoluto o fallan algunas de las extensiones hay que revisar todos los pasos, comprobar que nuestro sistema cumple los requisitos por lo que hace a los paquetes instalados previamente y tirar mucho de Google buscando el mensaje o mensajes de error concretos que nos aparezcan para tratar de acotar el problema y encontrar una solución.
En mi caso particular (por ejemplo), Mopidy no funcionó inicialmente quejándose de la versión de Tornado (un módulo Python relacionado con servicios de comunicación web) presente en mi sistema. Lo solucioné actualizándolo a la versión 4.5.1:
- Código:
sudo pip install --upgrade Tornado
Por cierto, a la hora de averiguar por qué las cosas están fallando resulta muy útil determinar la versión de los distintos módulos Python instalados, así:
- Código:
pip show nombre_del_módulo
Por ejemplo:
- Código:
pip show tornado
Name: tornado
Version: 4.5.1
Location: /usr/local/lib/python2.7/dist-packages
Requires: backports.ssl-match-hostname, singledispatch, certifi, backports-abc
A partir de ahí Mopidy arrancó ya más o menos normalmente. El problema más grave, que me llevó un buen rato solucionar, tuvo que ver con la extensión de Google Music, que inicialmente no cargaba, apareciendo un mensaje en al arranque de Mopidy diciendo que la versión disponible en el sistema del módulo Python requests no era compatible. Tras forzar una actualización a la versión 2.13.0 con...
- Código:
sudo pip install --upgrade requests
... la cosa empeoró, esta vez con una parrafada en color rojo emitida por Mopidy al iniciarse que no pintaba nada, nada bien y que concluía con un fastidioso:
from google.protobuf import symbol_database as _symbol_database
ImportError: cannot import name symbol_database
Tras darle más de dos y más de tres vueltas al asunto, finalmente conseguí solucionarlo desinstalando un vestigio del módulo Python protobuf que estaba haciendo la pascua en mi sistema:
- Código:
sudo apt-get remove python-protobuf
Otro consejo: en estos escenarios pantanosos de pruebas repletas de incertidumbre conviene anotar las versiones de los módulos instalados que toqueteamos por si, tras una actualización, hay que practicar una regresión de alguno de ellos para evitar males mayores. Con este fin, el comando Pip permite indicar la versión que deseamos instalar. Por ejemplo...
- Código:
sudo pip install requests==2.2.1
...instala la versión 2.2.1 del módulo requests (sí, el que me hizo pasar un buen rato la madrugada que estuve echando a andar todo esto).
Ojo los que seáis de tiro fácil: todas estas cosas hay que hacerlas con cautela.
Lamento no poder dar instrucciones más concretas ante la ingente cantidad de problemas que pueden surgir, pero si os encontráis con ellos no tenéis más que comentar en el hilo. Seguro que la cosa tiene solución.
Demos pues por cerrada la (espero poco) accidentada instalación de este tinglado y pasemos a ver si el esfuerzo ha merecido la pena.
¿Y esto qué pinta tiene?
Lancemos Mopidy y salgamos de dudas:
- Código:
mopidy
Como algún lector avispado es posible que ya haya averiguado al hurgar en el archivo de configuración de Mopidy, la interfaz web de control de Mopidy se encuentra en: http://127.0.0.1:6680
Recordemos que 127.0.0.1 es una dirección IP especial que representa siempre al propio sistema. Abramos por tanto un navegador para acceder. Esto es lo que veremos:
Vamos a olvidarnos de images, se trata de un módulo interno que no nos interesa en estos momentos. Veremos otros 2 enlaces, iris y material-webclient. Si repasais la sección en la que hablábamos de las extensiones que íbamos a instalar, comprobaréis que se trata de sendas interfaces de control web de Mopidy. La chula es la primera, iris, que además se adapta como un guante al modo en que funciona Spotify. La segunda es un cliente web que podemos utilizar alternativamente para ojear con mayor facilidad el catálogo de Tidal o Google Music o TuneIn. Lo suyo, en estos momentos, sería que abrierais ambas interfaces en sendas pestañas y las agregarais a los favoritos / marcadores de vuestro navegador para un rápido acceso.
Comencemos con Iris (en http://127.0.0.1:6680/iris). Primeramente haremos clic en Settings para comprobar el estado de la extensión. Veremos que aunque nuestro perfil de Spotify ha sido reconocido es necesaria una autenticación adicional para acceder sin restricciones al catálogo del servicio. Haremos clic en el botón LOG IN y seguiremos las instrucciones.
¡Atención! Si tenéis un bloqueador de ventas emergentes desconectadlo temporalmente ahora para acceder sin problemas a la ventana de autorización.
De regreso a la ventana de ajustes comprobaremos que ahora sí todo está en orden. Verificaremos también que los backends adicionales (las extensiones de Mopidy que nos dan acceso a Google Music, Tidal, y TuneIn) están activadas.
Solo queda pues disfrutar del servicio. Algunas capturas, por favor...
Como podéis apreciar, Iris es una replica extremadamente funcional y de magnífico diseño de la interfaz web de Spotify. Tenemos de todo: recomendaciones, novedades, catálogo por géneros musicales, nuevos lanzamientos, artistas similares, biografías, imágenes contextuales, diferentes vistas y criterios de ordenación y acceso inmediato a toda la biblioteca personal que hayamos ido construyendo en Spotify. Y ahora podemos disfrutar de todo esto en modo bitperfect.
Comprobaréis que otros catálogos (Tidal, Google Music, TuneIn) no aparecen por ningún lado. Para llegar a ellos tendremos que utilizar la función de búsqueda. Iris ofrecerá primeramente los resultados de Spotify y, a continuación los obtenidos de otros repositorios de búsqueda (los famosos backends), empleando iconos para diferenciar los procedentes de Spotify y Google Music. Cuando nos encontremos con una pista, disco, etc. sin icono... se tratará casi con total seguridad de un elemento extraído de Tidal. No es lo ideal (quizás en un futuro Iris se actualice para dar mejor soporte a otros catálogos musicales), pero al menos resulta funcional.
Lo bueno es que si hacemos clic sobre un álbum o artista de Google Music o Tidal pasaremos a explorar el catálogo correspondiente, siendo ya muy fácil localizar, por ejemplo, todos sus discos. En esta página, a la que hemos llegado haciendo clic en el nombre del artista en cualquiera de los resultados de búsqueda en los que Iris no ha mostrado icono identificativo, vemos todo lo que Tidal tiene de McEnroe, incluyendo una página con información general (About).
Y, por supuesto, sin perdidas.
Si echáis de menos la posibilidad de acceder a vuestros álbumes favoritos / música subida de / a Google Music o Tidal de un modo más diferenciado o simplemente recorrer las estaciones de radio de TuneIn, aún a costa de perder el extremadamente depurado aspecto y funcionalidad de Iris, posiblemente prefiráis la segunda interfaz web de control, material-webclient, que está accesible en
Desde la sección Library podremos ahora recorrer los catálogos de los cuatro servicios configurados de modo explícito.
Aquí tenemos la música propia que he subido a Google Music. El cuadro de búsqueda que aparece en cada sección lógicamente solo la realizará dentro del catálogo correspondiente:
Y aquí las listas de reproducción de Spotify:
Por último, en esta imagen podemos ver el funcionamiento del directorio de emisoras de TuneIn:
Bueno, ha sido largo pero creo que ha merecido la pena, ¿no os parece?
Última edición por pablopi el Dom 4 Feb - 9:22:26, editado 12 veces
Re: Spotify, Tidal, Google Music (y más) en bitperfect en Linux y OS X
Muchas gracias Pablo por enseñaros cosas tan interesantes. !!!!!
MERIDIAN- Cantidad de envíos : 2987
Edad : 60
Localización : Pineda de Mar ( Barcelona)
Fecha de inscripción : 12/02/2012
Re: Spotify, Tidal, Google Music (y más) en bitperfect en Linux y OS X
Gracias Pablo por tu trabajo y tu generosidad.
Como siempre, un 10.
Como siempre, un 10.
dimun- Cantidad de envíos : 1166
Localización : Donibane
Fecha de inscripción : 03/04/2012
Azazel- Cantidad de envíos : 1861
Localización : Madrid
Fecha de inscripción : 15/12/2008
Temas similares
» Strawberry (mini análisis): Tidal en bitperfect en Linux (y más cosas)
» Reproductor linux bitperfect
» Configurar Foobar en Linux para reproducción bitperfect
» GOOGLE MUSIC
» Fidelify: Reproductor de Spotify Premium Bitperfect (ASIO y WASAPI) para Windows
» Reproductor linux bitperfect
» Configurar Foobar en Linux para reproducción bitperfect
» GOOGLE MUSIC
» Fidelify: Reproductor de Spotify Premium Bitperfect (ASIO y WASAPI) para Windows
Página 1 de 1.
Permisos de este foro:
No puedes responder a temas en este foro.