Attributi audio

I lettori audio supportano attributi che definiscono il modo in cui il sistema audio gestisce le decisioni di routing, volume e messa a fuoco per la sorgente specificata. Le applicazioni possono allegare attributi a una riproduzione audio (come la musica riprodotta da un servizio di streaming o una notifica per una nuova e-mail) quindi passare gli attributi della sorgente audio al framework, dove il sistema audio utilizza gli attributi per prendere decisioni di mixaggio e per avvisare le applicazioni sullo stato del sistema.

In Android 4.4 e versioni precedenti, il framework prendeva decisioni di mixaggio utilizzando solo il tipo di flusso audio. Tuttavia, basare tali decisioni sul tipo di flusso era troppo limitante per produrre output di qualità su più applicazioni e dispositivi. Ad esempio, su un dispositivo mobile, alcune applicazioni (ad esempio Google Maps) riproducono le indicazioni stradali sul tipo di streaming STREAM_MUSIC; tuttavia, sui dispositivi mobili in modalità di proiezione (ad esempio Android Auto), le applicazioni non possono combinare le indicazioni stradali con altri flussi multimediali.

Utilizzando l' API Audio Attribute , le applicazioni forniscono al sistema audio informazioni dettagliate su una sorgente audio specifica, incluso l'utilizzo (perché la sorgente viene riprodotta), il tipo di contenuto (cosa sta riproducendo la sorgente), i flag (come dovrebbe essere riprodotta la sorgente), e contesti (novità in Android 9). Sintassi:

AudioAttributes {
    mUsage
    mContentType
    mSource
    mFlags
    mTags / mFormattedTags / mBundle    (key value pairs)
}
  • Utilizzo . Specifica il motivo per cui la sorgente viene riprodotta e controlla le decisioni relative al routing, alla messa a fuoco e al volume.
  • Tipo di contenuto . Specifica cosa sta riproducendo la sorgente (musica, film, parlato, sonificazione, sconosciuto).
  • Contesto . Valori di utilizzo estratti nell'HAL audio.
  • Bandiere . Specifica come deve essere riprodotta la sorgente. Include il supporto per l'applicazione dell'udibilità (i suoni dell'otturatore della fotocamera sono richiesti in alcuni paesi) e la sincronizzazione audio/video hardware.

Per l'elaborazione delle dinamiche, le applicazioni devono distinguere tra contenuto cinematografico, musicale e vocale. Anche le informazioni sui dati stessi possono essere importanti, come il volume e il valore di picco del campione.

Usa gli attributi

L'utilizzo specifica il contesto in cui viene utilizzato lo streaming, fornendo informazioni sul motivo per cui viene riprodotto l'audio e per cosa viene utilizzato. Le informazioni sull'utilizzo sono più espressive di un tipo di flusso e consentono alle piattaforme o alle policy di routing di perfezionare le decisioni sul volume o sul routing.

Fornire uno dei seguenti valori di utilizzo per qualsiasi istanza:

  • USAGE_UNKNOWN
  • USAGE_MEDIA
  • USAGE_VOICE_COMMUNICATION
  • USAGE_VOICE_COMMUNICATION_SIGNALLING
  • UTILIZZO_ALLARME
  • NOTIFICA_USAGE
  • USAGE_NOTIFICATION_TELEPHONY_RINGTONE
  • USAGE_NOTIFICATION_COMMUNICATION_REQUEST
  • USAGE_NOTIFICATION_COMMUNICATION_INSTANT
  • USAGE_NOTIFICATION_COMMUNICATION_DELAYED
  • USAGE_NOTIFICATION_EVENT
  • UTILIZZO_ASSISTENZA_ACCESSIBILITÀ
  • USAGE_ASSISTANCE_NAVIGATION_GUIDANCE
  • USAGE_ASSISTANCE_SONIFICATION
  • USAGE_GAME
  • USAGE_VIRTUAL_SOURCE
  • USAGE_ASSISTANTE

I valori di utilizzo degli attributi audio si escludono a vicenda. Per esempi, fare riferimento alle definizioni USAGE_MEDIA e USAGE_ALARM ; per le eccezioni, fare riferimento alla definizione AudioAttributes.Builder .

Tipo di contenuto

Il tipo di contenuto definisce cos'è il suono ed esprime la categoria generale del contenuto come film, parlato o segnale acustico/suoneria. Il framework audio utilizza le informazioni sul tipo di contenuto per configurare selettivamente i blocchi di post-elaborazione audio. Sebbene fornire il tipo di contenuto sia facoltativo, dovresti includere informazioni sul tipo ogni volta che il tipo di contenuto è noto, ad esempio utilizzando CONTENT_TYPE_MOVIE per un servizio di streaming di film o CONTENT_TYPE_MUSIC per un'applicazione di riproduzione musicale.

Fornisci uno dei seguenti valori del tipo di contenuto per qualsiasi istanza:

  • CONTENT_TYPE_UNKNOWN (predefinito)
  • CONTENT_TYPE_MOVIE
  • CONTENT_TYPE_MUSIC
  • CONTENT_TYPE_SONIFICATION
  • CONTENT_TYPE_SPEECH

I valori del tipo di contenuto degli attributi audio si escludono a vicenda. Per dettagli sui tipi di contenuto, fare riferimento all'API degli attributi audio .

Contesti

Ogni suono in Android è identificato dall'applicazione responsabile e dal motivo della generazione del suono; e 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 del suono utilizzando tipi di flusso legacy (ad esempio AudioSystem.STREAM_MUSIC ) o AudioAttributes . In Android 9, i valori AudioAttributes.usage vengono astratti a livello HAL come Contexts .

Contesti audio HAL Utilizzo degli attributi audio
MUSICA MEDIA
COMANDO VOCALE USAGE_ASSISTANTE
NAVIGAZIONE ASSISTENZA_NAVIGAZIONE_GUIDANZA
CHIAMATA COMUNICAZIONE_VOCE
SUONERIA SUONERIA DI NOTIFICA
NOTIFICA NOTIFICA
ALLARME ALLARME
SISTEMA_SUONO ASSISTENZA_SONIFICAZIONE
SCONOSCIUTO SCONOSCIUTO

Puoi fornire uno dei seguenti valori CONTEXT_NUMBER per qualsiasi istanza:

  • MUSIC_CONTEXT // Riproduzione musicale
  • NAVIGATION_CONTEXT // Indicazioni di navigazione
  • VOICE_COMMAND_CONTEXT // Sessione di comandi vocali
  • CALL_RING_CONTEXT // Chiamata vocale che squilla
  • CALL_CONTEXT // Chiamata vocale
  • ALARM_CONTEXT // Suono di allarme da Android
  • NOTIFICATION_CONTEXT // Notifiche
  • SYSTEM_SOUND_CONTEXT // Suoni di interazione dell'utente (clic sui pulsanti, ecc.)

Bandiere

I flag specificano il modo in cui la struttura audio applica gli effetti alla riproduzione audio. Fornisci uno o più dei seguenti flag per un'istanza:

  • FLAG_AUDIBILITY_ENFORCED . Richiede al sistema di garantire l'udibilità del suono. Da utilizzare per soddisfare le esigenze del STREAM_SYSTEM_ENFORCED legacy (come forzare i suoni dell'otturatore della fotocamera).
  • HW_AV_SYNC . Richiede al sistema di selezionare un flusso di output che supporti la sincronizzazione A/V hardware.

I flag degli attributi audio non sono esclusivi e possono essere combinati. Per dettagli su questi flag, fare riferimento all'API degli attributi audio .

Esempio

In questo esempio, AudioAttributes.Builder definisce gli AudioAttributes che devono essere utilizzati 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 dovrebbero utilizzare attributi audio durante la creazione o l'aggiornamento di applicazioni per Android 5.0 e versioni successive. Tuttavia, non è necessario che le applicazioni sfruttino gli attributi; possono gestire solo tipi di streaming legacy o rimanere inconsapevoli degli attributi (ad esempio un lettore multimediale generico che non sa nulla del contenuto che sta riproducendo).

In questi casi, il framework mantiene la compatibilità con i dispositivi precedenti e le versioni Android traducendo automaticamente i tipi di flusso audio legacy in attributi audio. Tuttavia, il framework non impone né garantisce questa mappatura tra dispositivi, produttori o versioni di Android.

Mappature di 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
(@nascondi) STREAM_DTMF

Tipi di flusso deprecati

Android 9 depreca i seguenti tipi di streaming per l'uso automobilistico:

  • STREAM_DEFAULT
  • STREAM_VOICE_CALL
  • STREAM_SISTEMA
  • STREAM_RING
  • STREAM_MUSICA
  • STREAM_ALLARME
  • NOTIFICA_STREAM
  • STREAM_BLUETOOTH_SCO
  • STREAM_SYSTEM_ENFORCED
  • STREAM_DTMF
  • STREAM_TTS
  • STREAM_ACCESSIBILITÀ

Per ulteriori dettagli, vedere Audio automobilistico .