Hochauflösendes Audio

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 Unterstützung für bis zu acht Kanäle getestet.
  • Timing: Timing-Informationen 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 in der Android 11-Version finden Sie unter Audioeffekte.

Vor der Veröffentlichung von Android 9 wurde die Verarbeitung von Effektketten im Stereo-int16-Stichprobenformat implementiert. Dies hatte einige Einschränkungen:

  • Alle Ausgabeeffekte haben die Umwandlung von Gleitkomma-Audiodaten in int16 erzwungen, was zu einem Genauigkeitsverlust geführt hat.
  • 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 nach Bedarf Float in int16 umwandeln.

Ausgabeeffekte implementieren

Eine Referenzimplementierung für Ausgabeeffekte ist unter frameworks/av/media/libeffects verfügbar.

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 bis 8. Für die zukünftige Kompatibilität sollten Sie Zahlen von 1 bis 30 verwenden.
    • Unterstützung für Eingabekanalzahlen, die mit den Ausgabekanalzahlen für Einfügeeffekte übereinstimmen Bei Zusatzeffekten ist die Anzahl der Eingabekanäle weiterhin 1 (Mono).
    • Unterstützt sowohl Kanalpositionsmasken (kanonisch) als auch Kanalindexmasken von (1 << n) - 1.
  • 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.
      • Überprüfen Sie, ob die Masken der Ein- und Ausgabekanäle auf Stereo eingestellt sind.
      • Wenn eine der Prüfungen fehlschlägt, wird -EINVAL zurückgegeben.
    • Legacy-Ausgabeeffekte (Hilfseffekte) werden von AudioFlinger mit einer Mono-Eingabekanal-Maske und gegebenenfalls Masken für die Ausgabekanäle mit mehreren Kanälen konfiguriert, je nachdem, ob die Ausgabesenke kanalübergreifend 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 Eingabekanalmaske Mono und die Ausgabekanalmaske Stereo ist.
      • Wenn eine der Prüfungen fehlschlägt, wird -EINVAL zurückgegeben.
    • Prüfen Sie den alten Code. Gehen Sie nicht davon aus, dass es funktioniert!