Aquí es donde empezó reTONE, así que esta primera entrada cuenta un poco cómo comenzó y, después, las primeras cosas que salieron mal.
Cómo empezó
Llevaba un tiempo trasteando con el AR-M20, un viejo reproductor de audio digital. Me encanta su diseño, pero el Android que lleva dentro es tan antiguo que nunca supe muy bien qué hacer con él. Nada concreto en mente, solo la sensación de que cosas así merecían volver a usarse.
Luego entré en una tienda de electrónica de segunda mano, vi móviles antiguos a precio de saldo y compré un puñado por impulso, a unos 1,000 yenes (unos siete dólares) cada uno: un Sharp AQUOS CRYSTAL 305SH, un Kyocera URBANO, un Nexus 6, un iPhone 5s y un iPod nano. reTONE no puede hacer nada por el iPhone ni por el iPod, pero esa es otra historia. Al probarlos enseguida, los Android resultaron ser poco más que pisapapeles. La mayoría de las aplicaciones ya no son compatibles con un Android tan antiguo, así que no había nada que hacer con ellos salvo mirarlos. Pero ya los había pagado. Así que empecé a construir algo para ellos. Esa es, sinceramente, toda la historia de su origen.


He construido reTONE con IA desde el primer día. Empecé con ChatGPT: describía lo que quería y la versión preliminar salió sorprendentemente rápido: una pantalla de inicio, un reproductor de música, una pantalla de bloqueo. El sistema en su conjunto se construyó en esa fase. Pero cuando llegó la hora de los detalles finos, el diseño, las peticiones del tipo "mañana quiero que esta parte funcione así", otra IA, Claude, sencillamente lo hacía mejor, así que me pasé a ella. Desde entonces, Claude ha hecho la mayor parte del trabajo, con ChatGPT echando una mano de vez en cuando.
Así que, para dejar claro quién hace qué: la IA escribe la mayor parte del código. El resto es cosa mía. Decidir qué debe ser reTONE y cómo debe montarse, y en qué ponerse terco con el sonido: sin ecualizador ni efectos añadidos por encima, mostrando la frecuencia de salida que el móvil comunica realmente, sin afirmar nunca bit-perfect cuando una aplicación no puede comprobarlo, y manteniéndolo todo lo bastante ligero para un móvil de 2012. Luego está el ensayo y error, que es la mayor parte del trabajo. Cada compilación va a móviles antiguos reales, escucho, noto cuando algo no va bien y vamos y venimos hasta que queda bien. Esos móviles están en mi mesa, no en la de la IA.
El reproductor que existía dos veces (0.24.1)
En un móvil con Android 4.4, abrir reTONE desde el botón HOME y abrirlo desde su icono daba dos copias separadas de reTONE. La aplicación estaba preparada para que esto no ocurriera, y en este móvil ocurrió de todos modos. Así que podía acabar controlando una copia mientras la que realmente sonaba era la otra.
Ahora reTONE lleva la cuenta de la única copia que está viva, y la que se abre desde HOME toma el control de la reproducción. De paso, al pulsar HOME ahora se vuelve a la pantalla de reproducción desde cualquier sitio.
Volumen en pasos de 1 dB (0.31–0.32)
Android da a la música 15 pasos de volumen, y cada paso es un salto grande. Cuando se escucha bajito, a menudo no hay ningún paso que sea el adecuado.
reTONE combina los dos controles de volumen que puede tocar sin root. Los 15 pasos de Android hacen la parte gruesa y el volumen propio de la aplicación rellena el espacio entre ellos, lo que da aproximadamente 1 dB por pulsación. Al subirlo, reTONE baja primero su propio volumen y luego sube el de Android, para que nunca haya un breve salto de sonoridad. Cero siempre significa silencio.
Hay una pega. Algunos móviles ignoran por completo el volumen propio de la aplicación, y en ellos se vuelve a los 15 pasos. Además, en un momento dado probé a aplicar este control fino incluso con otras pantallas delante. Android movía primero su propio paso y mostraba su propio control deslizante, así que el volumen bajaba de forma audible y luego se corregía. Lo quité al día siguiente.
De dónde salió la salida directa (0.46.0)
Hacia finales de mes, en el Android One X5, comprobé qué pistas convierte la reproducción estándar de Android al salir. Solo las pistas de 16 bit a 48 kHz o menos se convertían a 48 kHz, es decir, justo el audio de CD. Los archivos de mayor resolución ya salían intactos.
Así que probamos a decodificar las pistas de 16 bit y devolverlas a Android como 24 bit, sin cambiar el audio en sí. Salieron a 44.1 kHz, sin convertir. Android 10 añadió una forma de que las aplicaciones pregunten si un formato determinado puede salir sin convertirse, y sus respuestas coincidieron siempre con lo que medí. Eso significaba que reTONE podía decidir según lo que comunica el móvil, no según qué móvil es.
Eso se convirtió en la función de salida directa de reTONE, para móviles con Android 10 o posterior. La etiqueta DIRECT que muestra se basa en lo que comunica Android, ya que una aplicación no puede ver la ruta real que sigue el audio.
Otros cambios
- Botones del auricular: una pulsación para reproducir o pausar, dos para saltar adelante, tres para volver atrás.
- La barra de progreso se puede arrastrar desde el momento en que se toca, y solo salta a la nueva posición al soltarla.
- La reproducción siempre se pausa al desconectar los auriculares, el Bluetooth o un DAC.
- Repetición y reproducción aleatoria. (Hasta ahora, el botón de reproducción aleatoria no hacía nada.)
- Reproducción sin pausas (gapless).
- La parte inferior de la pantalla de reproducción muestra la salida y su frecuencia de muestreo.
- Compatibilidad con Android 4.1.
- Ordenación y un índice de la A a la Z en la biblioteca.