Como administrador de una instancia de Navidrome, constantemente me veo descargando FLACs de servicios de streaming como Deezer, Tidal, Amazon Music, entre otros. Por lo mismo, con el tiempo he probado numerosas herramientas para rippear de dichos servicios.
A lo largo de los dos años que llevo haciendo esto, he acuñado una lista de característica que toda herramienta de ripping, ajeno al servicio para el que esté diseñada, debe cumplir con respecto a la experiencia de usuario y que, lamentablemente, pocas logran cumplir en su totalidad:
Manejo correcto de metadata repetida
Esto afecta principalmente a canciones que tienen multiples artistas, pero tambien afecta a aquellac on multiples artistas de álbum (no son lo mismo), compositores, liricistas, productores, etc.
Básicamente, los estándares de metadata modernos (ID3 para mp3 y Vorbis Comment
para las personas con buen gusto) soportan que haya múltiples valores para una
misma entrada de metadata, de tal forma que un track cuyos artistas son Tupu y
Tamadre debería ser etiquetado como:
ARTIST=Tupu
ARTIST=Tamadre
Esto como reemplazo a la manera antigua de hacer las cosas, la cual era dejar
un solo valor para todas las entradas y cuando habían multiples artistas se
recurrían a “separadores”, que no eran más que caracteres especiales asignados
a dicha función. El track anterior sería etiquetado como ARTIST=Tupu & Tamadre estuviéramos en el 2002 y el caracter designado fuera &.
Los problemas surgen cuando no hay un consenso en cuál debería ser caracter de separación, pues hay que considerar que el caracter que se elija es un caracter que los artistas de tu plataforma no podrán utilizar para sus nombres, pues ello traería problemas con los programas que esperan que el caracter especial sea unica y exclusivamente para denotar separación de múltiples valores.
Un descargador de música que se respeta debe manejar esto cuidadosamente, pues es crucial mantener el estándar moderno para evitar caer en problemas con los reproductores. Nótese que, a pesar de todo, la opción de usar un caracter separador debería seguir allí para los casos de uso en los que sea necesario, pero debe ser configurable para usar caracteres arbitrarios y desactivada por defecto.
Plantillas de filepath
Una vez que el tema de la metadata está sorteado, el siguiente requisito indispensable es que le programa haga uso de esta. Este debe proveer una manera de definir plantillas para el guardado de los archivos descargados basadas en la metadata de estos, un ejemplo sería:
{album_artist}/{album}{track_num:2}. {track}
Que se convertiría a algo como Ques/Obo/01. Esta. Si eres perspicaz, notaste
el :2 y el paddeo del número del track en el resultado de ejemplo, lo que nos
lleva al siguiente requisito.
Paddeo de números
Yo era hater del paddeo hasta que ordené mi colección alfabéticamente y me percaté que todos los tracks cuyo número empezaba con 1 iban primero, luego todos los que empezaban con 2 y así sucesivamente, entonces me di cuenta de su importancia. La premisa es simple, una vez implementadas las plantillas, el programa debe proveer una manera de especificar la anchura del paddeo para todo valor númerico que emerja de una plantilla. Un ejemplo puede ser:
{album}/{disc:2}/{track_num:3}. {track}
Que se convertiría en algo como Obo/1/002. Iiii te chingué.
Conclusión
Evidentemente existen un millón de cosas más que un buen descargador de música debe cumplir, pero son cosas más obvias como permitir descargar paralelas, hacer uso eficiente de la API del servicio para evitar throttling o embeber la metadata sin modificarla. Son estos detalles los que muchos programadores pierden a la hora de hacer sus creaciones.