Audio ad alta risoluzione

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

  • Float: i codec WAV, FLAC e gli estrattori vengono aggiornati per supportare il float (24+ bit di precisione senza perdita). Gli effetti Downmix e Virtualizer vengono aggiornati per fluttuare. La precisione aggiornata è consentita da MediaPlayer (NuPlayer).
  • Alta frequenza: i codec WAV, FLAC e gli estrattori sono aggiornati per supportare 192 kHz. Gli effetti predefiniti forniti da Android sono testati per il supporto di 192 kHz a frequenze standard. Le frequenze standard consentite sono 88,2 kHz, 96 kHz, 176,4 kHz e 192 kHz.
  • Multicanale: gli effetti di riproduzione Android predefiniti sono testati per il supporto multicanale fino a otto canali.
  • Tempistica: le informazioni sulla tempistica sono incluse in tutto il framework audio.

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

  • Il numero di tracce di output client simultanee 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 client/server aumenta da 4 MB a 32 MB (a seconda della memoria totale del dispositivo) per consentire più tracce audio simultanee ad alta risoluzione.
  • Il totale delle tracce miste aumenta da 32 a 256 per evitare conflitti di risorse tra le app e l'interfaccia utente del sistema.

L'effetto in uscita cambia

Consulta Effetti audio per le modifiche alla versione di Android 11.

Prima del rilascio di Android 9, l'elaborazione della catena di effetti veniva implementata nel formato campione stereo int16. Ciò aveva diverse limitazioni:

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

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

  • Gli effetti del software Android sono già migrati in stereo float.
  • Gli effetti legacy sono supportati con adattatori di formato, che convertono float in int16 secondo necessità.

Implementare 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 effettuare le seguenti operazioni per la versione Android 10:

  • Aggiorna gli effetti di output per supportare il formato float multicanale:
    • Il supporto per l'elaborazione Int16 non è più necessario.
    • Supporta il numero di canali di uscita da 2 a 8 (per la compatibilità futura, considera i conteggi da 1 a 30).
    • Supporta i conteggi dei canali di ingresso corrispondenti ai conteggi dei canali di uscita per gli effetti in insert. Gli effetti ausiliari continuano a vedere un conteggio del canale di ingresso pari a 1 (mono).
    • Supporta sia le maschere di posizione del canale (canoniche) che le maschere di indice del canale di (1 << n) - 1 .
  • Se devi continuare a supportare gli effetti di output dei fornitori precedenti e non puoi aggiornarli, verifica il codice precedente come segue:
    • Gli effetti di output legacy (inserimento) devono rifiutare configurazioni non supportate in EFFECT_CMD_SET_CONFIG .
      • Controlla che il formato sia int16.
      • Verificare che le maschere dei canali di ingresso e uscita siano stereo.
      • Se uno dei due controlli fallisce, restituisce -EINVAL .
    • Gli effetti di uscita legacy (ausiliari) sono configurati da AudioFlinger con una maschera del canale di ingresso mono e maschere del canale di uscita potenzialmente multicanale, a seconda che il sink di uscita sia multicanale. Devono rifiutare configurazioni non supportate in EFFECT_CMD_SET_CONFIG .
      • Controlla che il formato sia int16.
      • Verificare che la maschera del canale di ingresso sia mono e la maschera del canale di uscita sia stereo.
      • Se uno dei due controlli fallisce, restituisce -EINVAL .
    • Verifica il codice precedente. Non dare per scontato che funzioni!