Audio ad alta risoluzione

La release Android 10 include i seguenti miglioramenti per l'audio ad alta risoluzione:

  • In virgola mobile: i codec WAV, FLAC ed estrattori sono aggiornati per supportare il formato float (oltre 24 bit di precisione senza perdita di dati). Gli effetti Downmix e Virtualizer vengono aggiornati in formato float. La precisione aggiornata è consentita da MediaPlayer (NuPlayer).
  • Alta frequenza: i codec e gli estrattori WAV e FLAC sono aggiornati per supportare 192 kHz. Gli effetti forniti per impostazione predefinita da Android sono testati per il supporto di 192 kHz alle frequenze standard. Le frequenze standard consentite sono 88,2 kHz, 96 kHz, 176,4 kHz e 192 kHz.
  • Multicanale: gli effetti di riproduzione predefiniti per Android sono testati per il supporto multicanale fino a otto canali.
  • Tempistiche: le informazioni sulle tempistiche sono incluse nell'intero framework audio.

A partire da Android 9, i seguenti miglioramenti non richiedono l'implementazione da parte dei partner:

  • Il numero di canali di output simultanei dei client aumenta da 14 a 40, in quanto le istanze client limitate di AudioTrack hanno causato un problema per le app in Android 8.x.
  • La memoria massima client/server aumenta da 4 MB a 32 MB (a seconda della memoria totale del dispositivo) per consentire più tracce audio contemporaneamente ad alta risoluzione.
  • Il numero totale di tracce miste aumenta da 32 a 256 per evitare la contesa delle risorse tra le app e l'interfaccia utente di sistema.

Modifiche all'effetto di output

Consulta la sezione Effetti sonori per conoscere le modifiche apportate alla versione di Android 11.

Prima della release di Android 9, l'elaborazione della catena di effetti era implementata in formato di sample stereo int16. Questo approccio presentava diversi limiti:

  • Tutti gli effetti di output hanno forzato la conversione dei dati audio in virgola mobile in int16, causando una perdita di precisione.
  • Gli effetti di output sono stati rifiutati dai canali di destinazione con un numero di canali superiore a due.

Nella release di Android 9, la pipeline di elaborazione della catena di effetti viene aggiornata per supportare il formato float multicanale. Punti chiave:

  • È già stata eseguita la migrazione degli effetti software Android allo stato stereo in virgola mobile.
  • Gli effetti legacy sono supportati con adattatori di formato, che convertono float in int16 secondo necessità.

Implementa gli effetti di output

Un'implementazione di riferimento per gli effetti di output è disponibile in frameworks/av/media/libeffects.

I partner che implementano i propri effetti di output personalizzati devono svolgere quanto segue per la release di Android 10:

  • Aggiorna gli effetti di output per supportare il formato float multicanale:
    • L'assistenza per l'elaborazione Int16 non è più necessaria.
    • Supporta un numero di canali di output compreso tra 2 e 8 (per la compatibilità futura, considera un numero compreso tra 1 e 30).
    • Supporta i conteggi dei canali di input corrispondenti ai conteggi dei canali di output per gli effetti di inserimento. Gli effetti ausiliari continuano a vedere un canale di input con un conteggio pari a 1 (mono).
    • Supporta sia le maschere di posizione del canale (canonica) sia le maschere di indice del canale(1 << n) - 1.
  • Se devi continuare a supportare gli effetti di output del fornitore precedente e non riesci ad aggiornarli, verifica il codice precedente come segue:
    • Gli effetti di output (inserimento) precedenti devono rifiutare le configurazioni non supportate in EFFECT_CMD_SET_CONFIG.
      • Verifica che il formato sia int16.
      • Verifica che le maschere dei canali di input e di output siano stereo.
      • Se uno dei controlli non va a buon fine, restituisci -EINVAL.
    • Gli effetti di output (ausiliari) precedenti vengono configurati da AudioFlinger con una maschera del canale di input mono e maschere del canale di output potenzialmente multicanale, a seconda che la destinazione di output sia multicanale. Devono rifiutare le configurazioni non supportate in EFFECT_CMD_SET_CONFIG.
      • Verifica che il formato sia int16.
      • Verifica che la maschera del canale di input sia mono e la maschera del canale di output sia stereo.
      • Se uno dei controlli non va a buon fine, restituisci -EINVAL.
    • Verifica il codice legacy. Non dare per scontato che funzioni!