Audio ad alta risoluzione

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

  • Float: i codec e gli estrattori WAV e FLAC sono stati aggiornati per supportare il formato float (più di 24 bit di precisione senza perdita di dati). Gli effetti Downmix e Virtualizer sono aggiornati al 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 client simultanei aumenta da 14 a 40, poiché le istanze client limitate di AudioTrack hanno rappresentato un problema per le app in Android 8.x.
  • La memoria massima del 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 competizione per le 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 conteggio dei 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:

  • Per gli effetti software Android è già stata eseguita la migrazione a formato float stereo.
  • Gli effetti precedenti sono supportati con gli adattatori di formato, che convertono i valori float in int16 in base alle esigenze.

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:
    • Il supporto dell'elaborazione Int16 non è più necessario.
    • Supporta conteggi dei canali di output da 2 a 8 (per la compatibilità futura, considera conteggi da 1 a 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 ingresso 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 precedente. Non dare per scontato che funzioni.