Por qué Pivumo publica AAC y no Opus
El briefing pedía Opus. Publicarlo habría dejado la app muda en cada iPhone.
Nota técnica · · 3 min de lectura
Pivumo es una app de aprendizaje temprano para niños que todavía no saben leer, lo que convierte la voz en la interfaz y no en una característica de ella. Cada indicación, número, color y recompensa se dice en voz alta, en veintinueve idiomas, por dos personajes. El audio no es una carpeta de recursos — es la superficie del producto.
El briefing de producción especificaba Opus. Parece una elección sensata: mejor calidad por byte que AAC a tasas de bits de voz, y para una app que publica miles de líneas de voz en veintinueve configuraciones regionales, un veinte o treinta por ciento menos es un número real.
El problema
En iOS, el audio de Flutter pasa por AVPlayer. AVPlayer no tiene decodificador de Opus ni de OGG. Una compilación solo con Opus no está degradada en iPhone y iPad — está muda. Para un producto en el que la voz es la interfaz, mudo no es un error con una clasificación de gravedad. Es que la app no exista.
Es el tipo de cosa que es invisible hasta la integración y catastrófica exactamente en el peor momento: después de que todo el paquete multilingüe se haya generado, escuchado en QA y resuelto en licencias.
Qué se publicó
AAC-LC en .m4a como conjunto por defecto, a 48 kHz — mono para la voz, porque el habla no gana nada con el estéreo y duplica el tamaño, y estéreo para la música. Se reproduce de forma nativa en ambas plataformas. El conjunto Opus se sigue produciendo y se publica junto al otro, como opción solo para Android, con nombres de archivo, claves y estructura de directorios idénticos, de modo que elegirlo es un cambio de ruta y nada más.
La versión general
Las decisiones de formato pertenecen a la plataforma que tiene que descodificarlas, no a la canalización que las produce. El momento más barato para descubrirlo es antes de generar veintinueve configuraciones regionales, y la manera de hacerlo barato es reproducir un archivo temprano en el dispositivo real de destino — no leer la especificación y suponer que el entorno de ejecución la respeta.
Mantener ambas codificaciones detrás de una estructura idéntica costó casi nada y convirtió una decisión irreversible en reversible. Ese intercambio suele merecer la pena.