Warum Pivumo AAC ausliefert und nicht Opus
Das Briefing verlangte Opus. Es auszuliefern hätte die App auf jedem iPhone stumm gemacht.
Technische Notiz · · 3 Min. Lesezeit
Pivumo ist eine App für frühes Lernen für Kinder, die noch nicht lesen können, was die Stimme zur Oberfläche macht und nicht zu einem Merkmal davon. Jede Aufforderung, Zahl, Farbe und Belohnung wird gesprochen, in neunundzwanzig Sprachen, von zwei Figuren. Das Audio ist kein Asset-Ordner — es ist die Produktoberfläche.
Das Produktionsbriefing gab Opus vor. Das sieht nach einer sinnvollen Wahl aus: bessere Qualität pro Byte als AAC bei Sprach-Bitraten, und für eine App, die Tausende Sprachzeilen über neunundzwanzig Locales ausliefert, sind zwanzig bis dreißig Prozent kleiner eine echte Zahl.
Das Problem
Unter iOS läuft Flutter-Audio über AVPlayer. AVPlayer hat keinen Opus- oder OGG-Decoder. Ein Build, der nur Opus enthält, ist auf iPhone und iPad nicht eingeschränkt — er ist stumm. Für ein Produkt, bei dem die Stimme die Oberfläche ist, ist stumm kein Fehler mit einer Schweregradeinstufung. Es ist das Nichtvorhandensein der App.
Das ist die Art von Sache, die bis zur Integration unsichtbar und genau im falschen Moment katastrophal ist: nachdem das gesamte mehrsprachige Paket erzeugt, in der QA abgehört und lizenzgeprüft worden ist.
Was ausgeliefert wurde
AAC-LC in .m4a als Standardsatz, mit 48 kHz — mono für Sprache, weil Sprache durch Stereo nichts gewinnt und doppelt so groß wird, und stereo für Musik. Es spielt auf beiden Plattformen nativ. Der Opus-Satz wird weiterhin erzeugt und daneben ausgeliefert, als Option nur für Android, mit identischen Dateinamen, Schlüsseln und Verzeichnisaufbau, sodass seine Wahl eine Pfadänderung ist und nichts weiter.
Die allgemeine Fassung
Formatentscheidungen gehören der Plattform, die sie dekodieren muss, und nicht der Pipeline, die sie herstellt. Der günstigste Moment, das herauszufinden, ist, bevor neunundzwanzig Locales erzeugt werden, und der Weg, es günstig zu machen, besteht darin, früh eine Datei auf dem echten Zielgerät abzuspielen — nicht darin, die Spezifikation zu lesen und anzunehmen, die Laufzeitumgebung halte sich daran.
Beide Kodierungen hinter einem identischen Aufbau zu halten, kostete fast nichts und machte aus einer unumkehrbaren Entscheidung eine umkehrbare. Dieser Handel ist meist lohnend.