Die Android 10-Version enthält die folgenden Verbesserungen für hochauflösendes Audio:
- Float:WAV-, FLAC-Codecs und ‑Extractor wurden aktualisiert, um Float (über 24 Bit verlustfreie Genauigkeit) zu unterstützen. Die Downmix- und Virtualizer-Effekte wurden auf „Float“ aktualisiert. Die aktualisierte Genauigkeit wird von MediaPlayer (NuPlayer) unterstützt.
- Hohe Frequenz:WAV-, FLAC-Codecs und ‑Extractor wurden aktualisiert, um 192 kHz zu unterstützen. Die standardmäßigen von Android bereitgestellten Effekte werden auf Unterstützung von 192 kHz bei Standardfrequenzen getestet. Zulässig sind die Standardfrequenzen 88,2 kHz, 96 kHz, 176,4 kHz und 192 kHz.
- Mehrere Kanäle:Die standardmäßigen Wiedergabeeffekte von Android werden auf Multi-Channel-Unterstützung für bis zu acht Kanäle getestet.
- Timing:Timinginformationen sind im gesamten Audio-Framework enthalten.
Ab Android 9 sind für die folgenden Verbesserungen keine Implementierungen durch Partner erforderlich:
- Die Anzahl der gleichzeitigen Client-Ausgabetracks steigt von 14 auf 40, da begrenzte Clientinstanzen von
AudioTrack
ein Problem für Apps unter Android 8.x waren. - Der maximale Client-/Serverspeicher wird von 4 MB auf 32 MB erhöht (je nach Gesamtspeicher des Geräts), um mehr gleichzeitige Audiotracks in hoher Auflösung zu ermöglichen.
- Die Gesamtzahl der gemischten Tracks wurde von 32 auf 256 erhöht, um Ressourcenkonflikte zwischen Apps und der System-UI zu vermeiden.
Änderungen am Ausgabeeffekt
Informationen zu Änderungen im Android 11-Release finden Sie unter Audioeffekte.
Vor der Veröffentlichung von Android 9 wurde die Verarbeitung von Effektketten im Stereo-int16-Stichprobenformat implementiert. Das hatte mehrere Einschränkungen:
- Bei allen Ausgabeeffekten wurde eine erzwungene Umwandlung von Audiodaten im Gleitkommaformat in int16 durchgeführt, was zu einer Verringerung der Genauigkeit führte.
- Ausgabeeffekte wurden von Ausgabe-Sinks mit mehr als zwei Kanälen abgelehnt.
In Android 9 wurde die Pipeline zur Verarbeitung von Effektketten aktualisiert, um das mehrkanalige Float-Format zu unterstützen. Wichtige Punkte:
- Android-Softwareeffekte wurden bereits zu Stereo-Float migriert.
- Ältere Effekte werden mit Formatadaptern unterstützt, die bei Bedarf Float in int16 umwandeln.
Ausgabeeffekte implementieren
Eine Referenzimplementierung für Ausgabeeffekte findest du unter frameworks/av/media/libeffects
.
Partner, die eigene benutzerdefinierte Ausgabeeffekte implementieren, müssen für die Android 10-Version Folgendes tun:
- Aktualisiere die Ausgabeeffekte, um das mehrkanalige Float-Format zu unterstützen:
- Die Unterstützung der Int16-Verarbeitung ist nicht mehr erforderlich.
- Unterstützt werden Ausgabekanalzahlen von 2–8 (für zukünftige Kompatibilität sollten Zahlen von 1–30 verwendet werden).
- Unterstützung der Anzahl der Eingabekanäle, die mit der Anzahl der Ausgabekanäle für Einfügeeffekte übereinstimmt. Für Hilfseffekte wird weiterhin eine Eingangskanalanzahl von 1 (Mono) verwendet.
- Es werden sowohl Kanalpositionsmasken (kanonisch) als auch Kanalindexmasken von
(1 << n) - 1
unterstützt.
- Wenn Sie weiterhin alte Anbieter-Ausgabeeffekte unterstützen müssen und sie nicht aktualisieren können, bestätigen Sie den alten Code so:
- Bei älteren Ausgabeeffekten (Einfügen) müssen nicht unterstützte Konfigurationen in
EFFECT_CMD_SET_CONFIG
abgelehnt werden.- Prüfen Sie, ob das Format „int16“ ist.
- Prüfen Sie, ob die Eingabe- und Ausgabekanalmasken Stereo sind.
- Wenn eine der Prüfungen fehlschlägt, gib
-EINVAL
zurück.
- Legacy-Ausgabeeffekte (Hilfseffekte) werden von AudioFlinger mit einer Mono-Eingabekanalmaske und möglicherweise mit Mehrkanal-Ausgabekanalmasken konfiguriert, je nachdem, ob der Ausgabe-Sink mehrkanalig ist.
Nicht unterstützte Konfigurationen in
EFFECT_CMD_SET_CONFIG
müssen abgelehnt werden.- Prüfen Sie, ob das Format „int16“ ist.
- Prüfen Sie, ob die Eingangskanalmaske Mono und die Ausgangskanalmaske Stereo ist.
- Wenn eine der Prüfungen fehlschlägt, gib
-EINVAL
zurück.
- Prüfen Sie den alten Code. Gehen Sie nicht davon aus, dass es funktioniert.
- Bei älteren Ausgabeeffekten (Einfügen) müssen nicht unterstützte Konfigurationen in