Audio in hoher Auflösung

Die Android 10-Version enthält die folgenden Verbesserungen für hochauflösende Audioinhalte:

  • Gleitkommazahl:WAV- und FLAC-Codecs und ‑Extrahierungsprogramme wurden aktualisiert, um Gleitkommazahlen (24 Bit und mehr mit verlustfreier Präzision) zu unterstützen. Downmix- und Virtualizer-Effekte wurden auf Gleitkommazahlen aktualisiert. Die aktualisierte Genauigkeit wird von MediaPlayer (NuPlayer) unterstützt.
  • Hochfrequenz:WAV- und FLAC-Codecs und ‑Extraktoren wurden aktualisiert, um 192 kHz zu unterstützen. Die standardmäßigen Android-Effekte werden bei Standardfrequenzen auf 192 kHz getestet. Die zulässigen Standardfrequenzen sind 88,2 kHz, 96 kHz, 176,4 kHz und 192 kHz.
  • Mehrkanal:Die standardmäßigen Android-Wiedergabeeffekte werden für die Unterstützung von bis zu acht Kanälen getestet.
  • Timing:Timing-Informationen sind im gesamten Audio-Framework enthalten.

Ab Android 9 sind für die folgenden Verbesserungen keine Partnerimplementierungen erforderlich:

  • Die Anzahl der gleichzeitigen Client-Ausgabetracks wird von 14 auf 40 erhöht, da begrenzte Client-Instanzen 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 (abhängig vom Gesamtspeicher des Geräts), um mehr gleichzeitige hochauflösende Audiotracks zu ermöglichen.
  • Die Gesamtzahl der gemischten Tracks wird von 32 auf 256 erhöht, um Ressourcenkonflikte zwischen Apps und der System-UI zu vermeiden.

Änderungen der Auswirkung der Ausgabe

Informationen zu Änderungen im Release für Android 11 finden Sie unter Audioeffekte.

Vor der Veröffentlichung von Android 9 wurde die Verarbeitung von Effektketten im Stereo-Int16-Beispielformat implementiert. Das hatte mehrere Einschränkungen:

  • Alle Ausgabeeffekte erzwangen die Konvertierung von Audio-Gleitkommadaten in int16, was zu einem Verlust an Präzision führte.
  • Ausgabe-Effekte wurden von Ausgabezielen mit mehr als zwei Kanälen abgelehnt.

In Android 9 wurde die Verarbeitungspipeline für Effektketten aktualisiert, um das Mehrkanal-Gleitkommaformat zu unterstützen. Wichtige Punkte:

  • Android-Softwareeffekte wurden bereits zu Stereo-Float migriert.
  • Legacy-Effekte werden mit Formatadaptern unterstützt, die Gleitkommazahlen bei Bedarf in int16 konvertieren.

Auswirkung der Ausgabe implementieren

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

Partner, die eigene benutzerdefinierte Ausgabeeffekte implementieren, sollten für die Android 10-Version Folgendes tun:

  • Aktualisieren Sie die Ausgabeeffekte, um das Multichannel-Gleitkommaformat zu unterstützen:
    • Die Unterstützung der Int16-Verarbeitung ist nicht mehr erforderlich.
    • Unterstützen Sie die Anzahl der Ausgabekanäle von 2 bis 8. Für die zukünftige Kompatibilität sollten Sie Anzahlen von 1 bis 30 in Betracht ziehen.
    • Unterstützung von Eingabekanälen, deren Anzahl mit der Anzahl der Ausgabekanäle für Insert-Effekte übereinstimmt. Bei Hilfseffekten wird weiterhin ein Eingabekanal mit der Anzahl 1 (Mono) angezeigt.
    • Unterstützung von Masken für die Kanalposition (kanonisch) und Masken für den Kanalindex von (1 << n) - 1.
  • Wenn Sie weiterhin Legacy-Ausgabeeffekte von Drittanbietern unterstützen müssen und sie nicht aktualisieren können, gehen Sie so vor, um Legacy-Code zu überprüfen:
    • Legacy-Ausgabe (Einfügen) – Effekte müssen nicht unterstützte Konfigurationen in EFFECT_CMD_SET_CONFIG ablehnen.
      • Prüfen Sie, ob das Format „int16“ ist.
      • Prüfen Sie, ob die Masken für Ein- und Ausgabekanäle Stereo sind.
      • Wenn eine der beiden Prüfungen fehlschlägt, gib -EINVAL zurück.
    • Legacy-Ausgabe- (Hilfs-)Effekte werden von AudioFlinger mit einer Mono-Eingabekanalsmaske und möglicherweise Multichannel-Ausgabekanalsmasken konfiguriert, je nachdem, ob die Ausgabesenke Multichannel ist. Sie müssen nicht unterstützte Konfigurationen in EFFECT_CMD_SET_CONFIG ablehnen.
      • Prüfen Sie, ob das Format „int16“ ist.
      • Prüfen Sie, ob die Maske des Eingabekanals Mono und die Maske des Ausgabekanals Stereo ist.
      • Wenn eine der beiden Prüfungen fehlschlägt, gib -EINVAL zurück.
    • Legacy-Code überprüfen Gehen Sie nicht davon aus, dass es funktioniert.