A partire da Android 11, i produttori di dispositivi hanno la possibilità per collegare e attivare automaticamente effetti audio specifici quando un determinato dispositivo audio viene selezionate per l'acquisizione o la riproduzione dell'audio. Uno dei principali miglioramenti è che gli effetti audio sono stati inseriti su un percorso audio interamente implementato sotto l'HAL audio (connessione diretta tra un dispositivo e un dispositivo di output) possono essere controllate dal framework degli effetti audio.
Questa funzionalità è rivolta principalmente agli OEM del settore auto e motori, ma può essere utilizzata anche in altri dispositivi Android e i fattori di forma. Un'app di esempio è l'inserimento di un effetto di miglioramento vocale sul sintonizzatore FM quando il dispositivo è collegato direttamente all'altoparlante tramite il DSP audio.
Prerequisiti
- Come per qualsiasi altro effetto audio, questo deve essere implementato da una libreria del fornitore ed essere elencato
nel file di configurazione
audio_effects.xml
. - L'effetto deve essere di tipo pre-elaborazione o post-elaborazione
(segnalazione
TYPE_PRE_PROC
oTYPE_POST_PROC
impostato inEffectDescriptor.flags
). - Se l'effetto di implementazione è accelerato HW
(segnalazione
HW_ACC_TUNNEL
impostata inEffectDescriptor.flags
), può essere collegato a un percorso audio interamente collegato sotto l'HAL (nessuna riproduzione o acquisire lo stream audio aperto nell'HAL audio).
Creare e attivare un effetto dispositivo
Puoi creare un'istanza degli effetti audio specifici del dispositivo utilizzando uno dei due metodi riportati di seguito.
Utilizzare un file di configurazione degli effetti audio
Questo metodo consente la creazione statica di un effetto audio che viene collegato sistematicamente e abilitato per qualsiasi percorso audio selezionando un dispositivo specificato come sink o origine.
Per farlo, devi aggiungere una sezione specifica nella audio_effects.xml
come segue:
<deviceEffects> <devicePort type="AUDIO_DEVICE_IN_BUILTIN_MIC" address="bottom"> <apply effect="agc"/> </devicePort> </deviceEffects>
Utilizza un'API di sistema
Un nuovo costruttore @SystemApi è stato aggiunto al
android.media.audiofx.AudioEffect
per creare e attivare un effetto dispositivo:
AudioEffect(@NonNull UUID uuid, @NonNull AudioDeviceAttributes device);
Dopo aver creato l'effetto specificando l'ID effetto audio univoco e il descrittore del dispositivo audio, può essere abilitato o disabilitato con le API AudioEffect esistenti.
È disponibile anche un'API per le query se un'implementazione supporta una determinata combinazione dispositivo/effetto.
static boolean isEffectSupportedForDevice( @NonNull UUID uuid, @NonNull AudioDeviceAttributes device);
Nuove API HAL
Effetto audio HAL
L'effetto audio HAL V6.0 ha una nuova firma per il metodo createEffect()
consente la creazione di un effetto collegato a un dispositivo:
IEffectFactory::createEffect(Uuid uid, AudioSession session, AudioIoHandle ioHandle, AudioPortHandle device)
- Il valore
AudioSession
specificato deve essereAudioSessionConsts.DEVICE
. AudioIoHandle
viene ignorato sesession
èAudioSessionConsts.DEVICE
.- Il
device
viene identificato dal suoAudioPortHandle
univoco assegnato dal framework audio quando il dispositivo viene selezionato su l'HAL audio con il metodoIDevice::createAudioPatch()
.
HAL audio
Per supportare la funzionalità degli effetti del dispositivo, l'HAL audio deve implementare il routing audio
usando l'API IDevice::createAudioPatch()
. Ciò è indicato
Metodo IDevice::supportsAudioPatches()
di reporting true
.
Due nuovi metodi dell'API:
IDevice::addDeviceEffect(AudioPortHandle device, uint64_t effectId)
e
IDevice::removeDeviceEffect(AudioPortHandle device, uint64_t effectId)
indicano all'implementazione HAL che un effetto dispositivo è stato attivato o disattivato
su un determinato dispositivo.
Il dispositivo è identificato dal suo ID AudioPortHandle
, che viene utilizzato quando un audio
con il metodo IDevice::createAudioPatch()
.
Le API Audio HAL possono essere utilizzate da un'implementazione se è necessario un coordinamento tra audio ed effetti HAL quando un effetto è attivato o disattivato.