Effetti audio

A partire da Android 11, i produttori di dispositivi hanno la possibilità di collegare e abilitare automaticamente effetti audio specifici quando un determinato dispositivo audio viene selezionato per l'acquisizione o la riproduzione audio. Un importante miglioramento è che gli effetti audio inseriti su un percorso audio interamente implementato al di sotto dell'HAL audio (connessione diretta tra un dispositivo di input e un dispositivo di output) possono essere controllati dal framework degli effetti audio.

Questa funzione è destinata principalmente agli OEM automobilistici, ma può essere utilizzata anche in altri fattori di forma Android. Un'app di esempio sta inserendo un effetto di miglioramento della voce sull'uscita del sintonizzatore FM quando è collegato direttamente all'altoparlante tramite il DSP audio.

Prerequisiti

  • Come per ogni altro effetto audio, l'effetto deve essere implementato da una libreria del fornitore ed elencati nel audio_effects.xml file di configurazione.
  • L'effetto deve essere di tipo preelaborazione o postelaborazione (bandiera TYPE_PRE_PROC o TYPE_POST_PROC set in EffectDescriptor.flags ).
  • Se l'attuazione effetto è HW accelerato (bandiera HW_ACC_TUNNEL set in EffectDescriptor.flags ), esso può essere collegato a un percorso audio completamente collegato sotto l'HAL (senza flusso riproduzione o acquisizione audio aperto presso l'HAL audio).

Creazione e attivazione di un effetto dispositivo

Gli effetti audio specifici del dispositivo possono essere istanziati utilizzando uno dei due metodi seguenti.

Utilizzo di un file di configurazione degli effetti audio

Questo metodo consente la creazione statica di un effetto audio che viene sistematicamente collegato e abilitato a qualsiasi percorso audio selezionando un dispositivo specificato come sink o source.

Questo viene fatto con l'aggiunta di una sezione specifica nel audio_effects.xml file come segue:

<deviceEffects>
<devicePort type="AUDIO_DEVICE_IN_BUILTIN_MIC" address="bottom">
      	<apply effect="agc"/>
      </devicePort>
  </deviceEffects>
  

Utilizzo di un'API di sistema

Un nuovo costruttore @SystemApi è stato aggiunto al android.media.audiofx.AudioEffect classe per creare e attivare un effetto di dispositivo:

AudioEffect(@NonNull UUID uuid, @NonNull AudioDeviceAttributes device);

Dopo che l'effetto è stato creato specificando l'ID univoco dell'effetto audio e il descrittore del dispositivo audio, può essere abilitato o disabilitato con le API AudioEffect esistenti.

È inoltre disponibile un'API per verificare 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 createEffect() metodo che consenta la creazione di un effetto collegato a un dispositivo:

IEffectFactory::createEffect(Uuid uid, AudioSession session,
AudioIoHandle ioHandle, AudioPortHandle device)
  • AudioSession specificato deve essere AudioSessionConsts.DEVICE .
  • AudioIoHandle viene ignorato se la session è AudioSessionConsts.DEVICE .
  • Il device viene identificato dal suo unico AudioPortHandle assegnato dal framework audio quando è selezionato il dispositivo alla HAL audio con IDevice::createAudioPatch() metodo.

Audio HAL

Per supportare la funzione di dispositivo effetto, l'HAL audio deve implementare il controllo di routing audio utilizzando IDevice::createAudioPatch() API. Questo è indicato dai IDevice::supportsAudioPatches() metodo di informazione true .

Due nuovi metodi API, IDevice::addDeviceEffect(AudioPortHandle device, uint64_t effectId) e IDevice::removeDeviceEffect(AudioPortHandle device, uint64_t effectId) raccontano l'attuazione HAL che un effetto dispositivo è stato abilitato o disabilitato su un determinato dispositivo.

Il dispositivo è identificato dal suo AudioPortHandle ID, che viene utilizzato quando una patch audio si crea con IDevice::createAudioPatch() metodo.

Le API Audio HAL possono essere utilizzate da un'implementazione se è necessario il coordinamento tra l'audio e gli HAL degli effetti quando un effetto è abilitato o disabilitato.