Audio ad alta risoluzione

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

  • Float: i codec e gli estrattori WAV e FLAC vengono aggiornati per supportare float (precisione lossless di 24+ bit). Gli effetti Downmix e Virtualizer vengono aggiornati a virgola mobile. La precisione aggiornata è consentita da MediaPlayer (NuPlayer).
  • Alta frequenza: i codec e gli estrattori WAV e FLAC vengono aggiornati per supportare 192 kHz. Gli effetti forniti da Android per impostazione predefinita vengono testati per il supporto a 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 Android predefiniti sono testati per il supporto multicanale fino a otto canali.
  • Timing: le informazioni sul timing 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 sono state 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 simultanee ad alta risoluzione.
  • Il numero totale di tracce miste aumenta da 32 a 256 per evitare la contesa di risorse tra le app e la UI di sistema.

Modifiche all'effetto di output

Consulta la sezione Effetti audio per le modifiche alla release di Android 11.

Prima del rilascio di Android 9, l'elaborazione della catena di effetti è stata implementata nel formato di esempio stereo int16. Questo approccio presentava diverse limitazioni:

  • Tutti gli effetti di output forzano la conversione dei dati audio in virgola mobile in int16, causando una perdita di precisione.
  • Gli effetti di output sono stati rifiutati dai sink di output 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:

  • Gli effetti software di Android sono già stati migrati in stereo float.
  • Gli effetti legacy sono supportati con gli adattatori di formato, che convertono float in int16 in base alle 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 fare quanto segue per la release di Android 10:

  • Aggiorna gli effetti di output per supportare il formato mobile multicanale:
    • Il supporto per l'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 visualizzare un conteggio di 1 (mono) per il canale di input.
    • Supporta sia le maschere di posizione del canale (canoniche) sia le maschere di indice del canale di (1 << n) - 1.
  • Se devi continuare a supportare gli effetti di output dei fornitori legacy e non puoi aggiornarli, verifica il codice legacy nel seguente modo:
    • Gli effetti di output (inserimento) legacy 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 output siano stereo.
      • Se uno dei due controlli non va a buon fine, restituisci -EINVAL.
    • Gli effetti di output legacy (ausiliari) vengono configurati da AudioFlinger con una maschera del canale di input mono e potenzialmente maschere del canale di output multicanale, a seconda che il sink 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 che la maschera del canale di uscita sia stereo.
      • Se uno dei due controlli non va a buon fine, restituisci -EINVAL.
    • Verifica il codice legacy. Non dare per scontato che funzioni.