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 (precisione senza perdita di 24+ bit). Gli effetti di downmix e virtualizzazione sono stati aggiornati al formato float. La precisione aggiornata è consentita da MediaPlayer (NuPlayer).
- Alta frequenza: i codec e gli estrattori WAV e FLAC sono stati aggiornati per supportare 192 kHz. Gli effetti forniti da Android per impostazione predefinita 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 di Android 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
AudioTrackhanno 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 un numero maggiore di tracce audio ad alta risoluzione simultanee.
- Il numero totale di tracce mixate aumenta da 32 a 256 per evitare conflitti di risorse tra le app e l'UI di sistema.
Modifiche agli effetti di output
Per le modifiche alla release di Android 11, consulta Effetti audio.
Prima della release di Android 9, l'elaborazione della catena di effetti veniva implementata nel formato di esempio stereo int16. Questo presentava diverse limitazioni:
- Tutti gli effetti di output forzavano la conversione dei dati audio in virgola mobile in int16, causando una perdita di precisione.
- Gli effetti di output venivano 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 al formato float stereo.
- Gli effetti legacy sono supportati con gli adattatori di formato, che convertono il formato float in int16, se necessario.
Implementare gli effetti di output
Un'implementazione di riferimento per gli effetti di output è disponibile in
frameworks/av/media/libeffects.
Per la release di Android 10, i partner che implementano i propri effetti di output personalizzati devono procedere come segue:
- Aggiorna gli effetti di output per supportare il formato float multicanale:
- Il supporto per l'elaborazione int16 non è più obbligatorio.
- Supporta i numeri di canali di output da 2 a 8 (per la compatibilità futura considera i numeri da 1 a 30).
- Supporta i numeri di canali di input che corrispondono ai numeri di canali di output per gli effetti di inserimento. Gli effetti ausiliari continuano a visualizzare un numero di canali di input pari a 1 (mono).
- Supporta sia le maschere di posizione dei canali (canoniche) sia le maschere di indice dei canali
di
(1 << n) - 1.
- Se devi continuare a supportare gli effetti di output del fornitore legacy e non puoi
aggiornarli, verifica il codice legacy come segue:
- 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 controlli non va a buon fine, restituisci
-EINVAL.
- Gli effetti di output (ausiliari) legacy vengono configurati da AudioFlinger
con una maschera di canale di input mono e potenzialmente maschere di canale di output
canale, 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 input sia mono e che 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.
- Gli effetti di output (inserimento) legacy devono rifiutare
le configurazioni non supportate in