I lettori audio supportano gli attributi che definiscono il modo in cui il sistema audio gestisce le decisioni relative a routing, volume e messa a fuoco per l'origine specificata. Le applicazioni possono associare attributi a una riproduzione audio (ad esempio la musica riprodotta da un servizio di streaming o una notifica per una nuova email) e poi passare gli attributi delle sorgenti audio al framework, dove il sistema audio li utilizza per prendere decisioni di missaggio e per notificare alle applicazioni lo stato del sistema.
In Android 4.4 e versioni precedenti, il framework prendeva decisioni di missaggio utilizzando solo il tipo di stream audio. Tuttavia, basare queste decisioni sul tipo di stream era troppo limitante per produrre output di qualità su più applicazioni e dispositivi. Ad esempio, su un dispositivo mobile, alcune applicazioni (ad es. Google Maps) riproducevano le indicazioni stradali sul tipo di stream STREAM_MUSIC. Tuttavia, sui dispositivi mobili in modalità di proiezione (ad es. Android Auto), le applicazioni non possono combinare le indicazioni stradali con altri stream multimediali.
Utilizzando l'API Audio Attribute, le applicazioni forniscono al sistema audio informazioni dettagliate su una sorgente audio specifica, tra cui l'utilizzo (perché la sorgente viene riprodotta), il tipo di contenuti (cosa viene riprodotto dalla sorgente), gli indicatori (come deve essere riprodotta la sorgente) e i contesti (novità di Android 9). Sintassi:
AudioAttributes { mUsage mContentType mSource mFlags mTags / mFormattedTags / mBundle (key value pairs) }
- Utilizzo. Specifica il motivo per cui l'origine viene riprodotta e controlla le decisioni relative a routing, messa a fuoco e volume.
- Tipo di contenuti. Specifica cosa sta riproducendo l'origine (musica, film, voce, sonificazione, sconosciuto).
- Contesto. Valori di utilizzo astratti nell'HAL Audio.
- Flag. Specifica in che modo deve essere riprodotta l'origine. Include il supporto dell'applicazione dell'udibilità (suoni dell'otturatore della fotocamera obbligatori in alcuni paesi) e della sincronizzazione audio/video hardware.
Per l'elaborazione dinamica, le applicazioni devono distinguere tra film, musica e contenuti vocali. Potrebbero essere importanti anche le informazioni sui dati stessi, come la dinamica e il valore del campione di picco.
Utilizzare gli attributi
L'utilizzo specifica il contesto in cui viene utilizzato lo stream, fornendo informazioni sul motivo per cui viene riprodotto e per cosa viene utilizzato. Le informazioni sull'utilizzo sono più espressive di un tipo di stream e consentono alle piattaforme o alle norme di routing di perfezionare le decisioni relative al volume o al routing.
Fornisci uno dei seguenti valori di utilizzo per qualsiasi istanza:
- USAGE_UNKNOWN
- USAGE_MEDIA
- USAGE_VOICE_COMMUNICATION
- USAGE_VOICE_COMMUNICATION_SIGNALLING
- USAGE_ALARM
- USAGE_NOTIFICATION
- USAGE_NOTIFICATION_TELEPHONY_RINGTONE
- USAGE_NOTIFICATION_COMMUNICATION_REQUEST
- USAGE_NOTIFICATION_COMMUNICATION_INSTANT
- USAGE_NOTIFICATION_COMMUNICATION_DELAYED
- USAGE_NOTIFICATION_EVENT
- USAGE_ASSISTANCE_ACCESSIBILITY
- USAGE_ASSISTANCE_NAVIGATION_GUIDANCE
- USAGE_ASSISTANCE_SONIFICATION
- USAGE_GAME
- USAGE_VIRTUAL_SOURCE
- USAGE_ASSISTANT
I valori di utilizzo dell'attributo audio sono mutuamente esclusivi. Per esempi, consulta le definizioni di USAGE_MEDIA
e USAGE_ALARM
. Per le eccezioni, consulta la definizione di AudioAttributes.Builder
.
Tipo di contenuti
Il tipo di contenuto definisce il suono ed esprime la categoria generale dei contenuti, ad esempio film, voce o beep/suoneria. Il framework audio utilizza le informazioni sul tipo di contenuti per configurare in modo selettivo i blocchi di post-elaborazione audio. Sebbene l'indicazione del tipo di contenuti sia facoltativa, devi includere informazioni sul tipo ogni volta che è noto, ad esempio utilizzando CONTENT_TYPE_MOVIE
per un servizio di streaming di film o CONTENT_TYPE_MUSIC
per un'applicazione di riproduzione di musica.
Fornisci uno dei seguenti valori per il tipo di contenuti per qualsiasi istanza:
CONTENT_TYPE_UNKNOWN
(valore predefinito)CONTENT_TYPE_MOVIE
CONTENT_TYPE_MUSIC
CONTENT_TYPE_SONIFICATION
CONTENT_TYPE_SPEECH
I valori del tipo di contenuto dell'attributo audio sono mutuamente esclusivi. Per informazioni dettagliate sui tipi di contenuti, consulta l'API Attribute Audio.
Contesti
Ogni suono in Android è identificato dall'applicazione responsabile e dal motivo per cui viene generato. Il dispositivo Android utilizza queste informazioni per determinare come presentare il suono. In Android 8.x e versioni precedenti, le applicazioni possono segnalare il motivo della generazione di suoni utilizzando i tipi di stream precedenti (ad es. AudioSystem.STREAM_MUSIC
) o AudioAttributes
. In Android 9, i valori AudioAttributes.usage
vengono astratti a livello di HAL come contesti.
Contesti audio HAL | Utilizzo di AudioAttributes |
---|---|
MUSICA | CONTENUTI MULTIMEDIALI |
VOICE_COMMAND | USAGE_ASSISTANT |
NAVIGAZIONE | ASSISTANCE_NAVIGATION_GUIDANCE |
CHIAMA | VOICE_COMMUNICATION |
RINGTONE | NOTIFICATION_RINGTONE |
NOTIFICA | NOTIFICA |
SVEGLIA | SVEGLIA |
SYSTEM_SOUND | ASSISTANCE_SONIFICATION |
SCONOSCIUTO | SCONOSCIUTO |
Per qualsiasi istanza, puoi fornire uno dei seguenti valori CONTEXT_NUMBER
:
- MUSIC_CONTEXT // Riproduzione di musica
- NAVIGATION_CONTEXT // Indicazioni stradali di navigazione
- VOICE_COMMAND_CONTEXT // Sessione di comando vocale
- CALL_RING_CONTEXT // Suoneria della chiamata vocale
- CALL_CONTEXT // Chiamata vocale
- ALARM_CONTEXT // Suono sveglia da Android
- NOTIFICATION_CONTEXT // Notifiche
- SYSTEM_SOUND_CONTEXT // Suoni di interazione con l'utente (clic sui pulsanti e così via)
Bandiere
Gli indicatori specificano in che modo il framework audio applica gli effetti alla riproduzione audio. Fornisci uno o più dei seguenti flag per un'istanza:
FLAG_AUDIBILITY_ENFORCED
. Chiede al sistema di garantire l'udibilità del suono. Da utilizzare per soddisfare le esigenze dei sistemi legacySTREAM_SYSTEM_ENFORCED
(ad esempio l'attivazione forzata dell'audio dell'otturatore della fotocamera).HW_AV_SYNC
. Chiede al sistema di selezionare uno stream di output che supporti la sincronizzazione A/V hardware.
Gli indicatori degli attributi audio non sono esclusivi e possono essere combinati. Per informazioni dettagliate su questi flag, consulta l'API Attribute Audio.
Esempio
In questo esempio, AudioAttributes.Builder
definisce il valore AudioAttributes
da utilizzare da una nuova istanza AudioTrack
:
AudioTrack myTrack = new AudioTrack( new AudioAttributes.Builder() .setUsage(AudioAttributes.USAGE_MEDIA) .setContentType(AudioAttributes.CONTENT_TYPE_MUSIC) .build(), myFormat, myBuffSize, AudioTrack.MODE_STREAM, mySession);
Compatibilità
Gli sviluppatori di applicazioni devono utilizzare gli attributi audio durante la creazione o l'aggiornamento di applicazioni per Android 5.0 e versioni successive. Tuttavia, le applicazioni non sono obbligatoriamente tenute a sfruttare gli attributi; possono gestire solo i tipi di stream precedenti o non essere a conoscenza degli attributi (ad es. un media player generico che non sa nulla dei contenuti che sta riproducendo).
In questi casi, il framework mantiene la compatibilità con le versioni precedenti dei dispositivi e di Android traducendo automaticamente i tipi di stream audio legacy in attributi audio. Tuttavia, il framework non applica né garantisce questa mappatura su dispositivi, produttori o release di Android.
Mappature della compatibilità:
Android 5.0 e versioni successive | Android 4.4 e versioni precedenti |
---|---|
CONTENT_TYPE_SPEECH USAGE_VOICE_COMMUNICATION
|
STREAM_VOICE_CALL
|
CONTENT_TYPE_SONIFICATION USAGE_ASSISTANCE_SONIFICATION
|
STREAM_SYSTEM
|
CONTENT_TYPE_SONIFICATION USAGE_NOTIFICATION_RINGTONE
|
STREAM_RING
|
CONTENT_TYPE_MUSIC USAGE_UNKNOWN USAGE_MEDIA USAGE_GAME USAGE_ASSISTANCE_ACCESSIBILITY USAGE_ASSISTANCE_NAVIGATION_GUIDANCE
|
STREAM_MUSIC
|
CONTENT_TYPE_SONIFICATION USAGE_ALARM
|
STREAM_ALARM
|
CONTENT_TYPE_SONIFICATION USAGE_NOTIFICATION USAGE_NOTIFICATION_COMMUNICATION_REQUEST USAGE_NOTIFICATION_COMMUNICATION_INSTANT USAGE_NOTIFICATION_COMMUNICATION_DELAYED USAGE_NOTIFICATION_EVENT
|
STREAM_NOTIFICATION
|
CONTENT_TYPE_SPEECH
|
(@hide) STREAM_BLUETOOTH_SCO
|
FLAG_AUDIBILITY_ENFORCED
|
(@hide) STREAM_SYSTEM_ENFORCED
|
CONTENT_TYPE_SONIFICATION USAGE_VOICE_COMMUNICATION_SIGNALLING
|
(@hide) STREAM_DTMF
|
Tipi di stream deprecati
Android 9 ritira i seguenti tipi di stream per uso auto e motori:
- STREAM_DEFAULT
- STREAM_VOICE_CALL
- STREAM_SYSTEM
- STREAM_RING
- STREAM_MUSIC
- STREAM_ALARM
- STREAM_NOTIFICATION
- STREAM_BLUETOOTH_SCO
- STREAM_SYSTEM_ENFORCED
- STREAM_DTMF
- STREAM_TTS
- STREAM_ACCESSIBILITY
Per maggiori dettagli, consulta Audio per auto e motori.