Audioeffekte

Ab Android 11 haben die Gerätehersteller die Möglichkeit, bestimmte Audioeffekte automatisch hinzuzufügen und zu aktivieren, wenn ein bestimmtes Audiogerät für die Audioaufnahme oder -wiedergabe ausgewählt wird. Eine wesentliche Verbesserung besteht darin, dass Audioeffekte, die in einen Audiopfad eingefügt werden, der vollständig unterhalb des Audio-HAL (direkte Verbindung zwischen einem Eingabegerät und einem Ausgabegerät) implementiert ist, durch das Audioeffekt-Framework gesteuert werden können.

Diese Funktion richtet sich in erster Linie an Automobilhersteller, kann aber auch in anderen Android-Formfaktoren verwendet werden. Eine Beispiel-App fügt einen Sprachverbesserungseffekt in den UKW-Tuner-Ausgang ein, wenn sie direkt über den Audio-DSP mit dem Lautsprecher verbunden ist.

Voraussetzungen

  • Wie bei jedem anderen Audio - Effekt, der Effekt muss in der von einem Anbieter Bibliothek und aufgelistet implementiert wird audio_effects.xml Konfigurationsdatei.
  • Die Wirkung muss vom Typ Vorverarbeitung oder Nachbereitung sein (Flag TYPE_PRE_PROC oder TYPE_POST_PROC Satz in EffectDescriptor.flags ).
  • Wenn die Wirkung Implementierung ist HW (Flag beschleunigte HW_ACC_TUNNEL Satz in EffectDescriptor.flags ), kann es an einen Audiopfad unterhalb dem HAL (keine Wiedergabe oder Capture - Audio - Stream in dem Audio - HAL geöffnet) vollständig verbunden angebracht werden.

Erstellen und Aktivieren eines Geräteeffekts

Gerätespezifische Audioeffekte können mit einer der beiden folgenden Methoden instanziiert werden.

Verwenden einer Konfigurationsdatei für Audioeffekte

Diese Methode ermöglicht die statische Erstellung eines Audioeffekts, der systematisch an jeden Audiopfad angehängt und aktiviert wird, indem ein bestimmtes Gerät als Senke oder Quelle ausgewählt wird.

Dies wird durch Hinzufügen eines bestimmten Abschnitts in der getan audio_effects.xml Datei wie folgt:

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

Verwenden einer System-API

Ein neuer @SystemApi Konstruktor hat zur hinzugefügt android.media.audiofx.AudioEffect Klasse ein Gerät Effekt zu erzeugen und aktivieren:

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

Nachdem der Effekt durch Angabe der eindeutigen Audioeffekt-ID und des Audiogerätedeskriptors erstellt wurde, kann er mit vorhandenen AudioEffect-APIs aktiviert oder deaktiviert werden.

Eine API ist auch verfügbar, um abzufragen, ob eine Implementierung eine bestimmte Kombination aus Gerät und Effekt unterstützt.

static boolean isEffectSupportedForDevice(
            @NonNull UUID uuid, @NonNull AudioDeviceAttributes device);

Neue HAL-APIs

Audioeffekt HAL

Der Audio - Effekt HAL V6.0 hat eine neue Signatur für die createEffect() Methode ermöglicht die Erzeugung eines zu einem Gerät angebracht Wirkung:

IEffectFactory::createEffect(Uuid uid, AudioSession session,
AudioIoHandle ioHandle, AudioPortHandle device)
  • Die AudioSession angegeben sein muss AudioSessionConsts.DEVICE .
  • AudioIoHandle wird ignoriert , wenn die session ist AudioSessionConsts.DEVICE .
  • Das device zeichnet sich durch seinen einzigartigen identifiziert AudioPortHandle durch den Audio - Rahmen zugewiesen wird, wenn das Gerät an dem Audio - HAL mit gewählt ist IDevice::createAudioPatch() Methode.

Audio-HAL

Um das Gerät Effekt - Funktion, die Audio-HAL zu unterstützen muss Audio - Routing implementieren Steuerung über die IDevice::createAudioPatch() API. Dies wird durch die angegebenen IDevice::supportsAudioPatches() Methode Berichterstattung true .

Zwei neue API - Methoden, IDevice::addDeviceEffect(AudioPortHandle device, uint64_t effectId) und IDevice::removeDeviceEffect(AudioPortHandle device, uint64_t effectId) erzählen die HAL Implementierung , dass ein Gerät Effekt auf einem bestimmten Gerät aktiviert oder deaktiviert wurde.

Die Vorrichtung wird durch ihre identifizierten AudioPortHandle ID, die verwendet wird , wenn ein Audio Patch mit der erstellt wird IDevice::createAudioPatch() Methode.

Die Audio-HAL-APIs können von einer Implementierung verwendet werden, wenn eine Koordination zwischen den Audio- und Effekt-HALs erforderlich ist, wenn ein Effekt aktiviert oder deaktiviert ist.