Gleichzeitige Aufnahme

Android 10 verbessert die Nutzerfreundlichkeit bei der gleichzeitigen aktiven Audioaufnahme, z. B. wenn der Nutzer einen VoIP-Anruf oder eine Videoaufzeichnung mit Sprachbefehlen steuern möchte, die von einem Bedienungshilfendienst bereitgestellt werden.

Das Audio-Framework implementiert die Richtlinie, die es nur bestimmten privilegierten Apps erlaubt, gleichzeitig mit regulären Apps Audio aufzunehmen.

Die Richtlinie zur Gleichzeitigkeit wird umgesetzt, indem die erfassten Audiodaten stummgeschaltet werden, anstatt zu verhindern, dass eine Anwendung mit der Erfassung beginnt. So kann das Framework dynamisch auf Änderungen bei der Anzahl und den Arten aktiver Aufnahmeanwendungsfälle reagieren, ohne zu verhindern, dass eine App mit der Aufnahme beginnt, wenn sie nach Abschluss der Aufnahme durch eine andere App wieder vollen Zugriff auf das Mikrofon erhält.

Für die Audio-HAL und das Audio-Subsystem bedeutet das, dass sie mehrere aktive Eingabestreams gleichzeitig unterstützen müssen, auch wenn in einigen Fällen nur ein Stream Audio ohne Stille an einen aktiven Client liefert.

CDD-Anforderungen

Die Anforderungen für die Unterstützung der gleichzeitigen Aufnahme finden Sie im CDD.

Situationen aus dem Audio-HAL erfassen

Ein Szenario mit gleichzeitiger Erfassung kann in Bezug auf die Anzahl der aktiven Eingabestreams, die Auswahl des Eingabegeräts oder die Konfiguration der Vorverarbeitung zu unterschiedlichen Situationen führen.

Gleichzeitigkeit kann zwischen Folgendem auftreten:

  • Mehrere Eingabestreams vom Anwendungsprozessor (AP)
  • Eingabestreams und Sprachanruf
  • Eingabestreams und ein Audio-DSP, der eine Hotword-Erkennung mit geringem Stromverbrauch implementiert

Gleichzeitige Aktivität von AP-Eingabestreams

Die Audiokonfigurationsdatei audio_policy_configuration.xml wird vom Audio-Framework verwendet, um zu bestimmen, wie viele Eingabestreams gleichzeitig geöffnet und aktiv sein können.

Das Audio-HAL muss mindestens eine Instanz jedes Eingabeprofils (mixPort der Rolle sink) unterstützen, das in der offenen und aktiven Konfigurationsdatei aufgeführt ist.

Geräteauswahl

Wenn mehrere aktive Clients an denselben HAL-Eingabestream angehängt sind, wählt das Framework das geeignete Gerät für diesen Eingabestream basierend auf der Priorität des Anwendungsfalls aus.

Wenn mehrere Eingabestreams aktiv sind, kann für jeden Stream eine andere Geräteauswahl getroffen werden.

Wenn die Technologie kompatibel ist, wird empfohlen, dass das Audio-HAL und das Subsystem die Aufnahme von verschiedenen Streams von verschiedenen Geräten wie einem Bluetooth-Headset und einem integrierten Mikrofon ermöglichen.

Bei Inkompatibilitäten (z. B. wenn zwei Geräte dieselbe digitale Audioschnittstelle oder dasselbe Backend verwenden) muss der Audio-HAL auswählen, welcher Stream die Geräteauswahl steuert.

Gehen Sie in diesem Fall wie folgt vor:

  • Der resultierende Status muss konsistent sein und bei Wiederholung desselben Szenarios dieselbe Geräteauswahl bieten.
  • Wenn der Zustand der gleichzeitigen Wiedergabe endet, muss der verbleibende aktive Stream an das Gerät weitergeleitet werden, das ursprünglich für diesen Stream angefordert wurde.

Wenn eine Prioritätsreihenfolge vom Audio-HAL zwischen aktiven Anwendungsfällen definiert wird, folge derselben Reihenfolge wie in source_priority() in frameworks/av/services/audiopolicy/common/include/policy.h.

Auswahl der Vorverarbeitung

Das Audio-Framework kann die Vorverarbeitung eines Eingabestreams mit den HAL-Methoden addEffect() oder removeEffect() anfordern.

Für die Vorverarbeitung eines bestimmten Eingabestreams ermöglicht das Audio-Framework nur die Konfiguration, die dem aktiven Anwendungsfall mit der höchsten Priorität im Eingabestream entspricht. Bei der Aktivierung und Deaktivierung von Anwendungsfällen kann es jedoch zu Überschneidungen kommen, sodass zwei gleichzeitig aktive Prozesse (z. B. zwei Instanzen der Echounterdrückung) für denselben Eingabestream ausgeführt werden. In diesem Fall wählt die HAL-Implementierung aus, welche Anfrage akzeptiert wird. Sie verfolgt die aktiven Anfragen und stellt den richtigen Status wieder her, wenn einer der Prozesse deaktiviert wird.

Wenn mehrere Erfassungsstreams gleichzeitig aktiv sind, werden möglicherweise verschiedene Vorverarbeitungsanfragen für verschiedene Streams ausgeführt.

Die Implementierungen von HAL und Audiosubsystem sollten es ermöglichen, verschiedene Vorverarbeitungen auf verschiedene Streams anzuwenden, auch wenn sie dasselbe Eingabegerät verwenden. Die Vorverarbeitung sollte also nach dem Demultiplexen der Streams aus der primären Aufnahmequelle erfolgen.

Wenn dies aus technischen Gründen in einem bestimmten Audiosubsystem nicht möglich ist, sollte die Audio-HAL Prioritätsregeln anwenden, die denen in der Geräteauswahl ähneln.

Gleichzeitiger Sprachanruf und Aufnahme über die AP

Die Aufnahme über den AP kann erfolgen, während ein Sprachanruf aktiv ist. Diese Situation ist in Android 10 nicht neu und steht nicht in direktem Zusammenhang mit der Funktion für die gleichzeitige Aufnahme. Es ist jedoch sinnvoll, die Richtlinien für dieses Szenario zu erwähnen.

Während eines Anrufs sind zwei verschiedene Arten von Aufnahmen vom AP erforderlich.

Anruf-RX und ‑TX erfassen

Die Erfassung von RX- und TX-Daten für Anrufe wird durch die Verwendung der Audioquelle AudioSource.VOICE_UPLINK oder AudioSource.VOICE_DOWNLINK und/oder des Geräts AudioDevice.IN_TELEPHONY_RX ausgelöst.

Audio-HALs sollten im Eingabeprofil (mixPort der Rolle sink) mit einem verfügbaren Pfad vom Gerät AudioDevice.IN_TELEPHONY_RX verfügbar sein.

Wenn ein Anruf verbunden ist (der Audiomodus ist AudioMode.IN_CALL), sollte mindestens ein aktiver Aufnahmestream vom Gerät AudioDevice.IN_TELEPHONY_RX möglich sein.

Aufzeichnen von Eingabegeräten, wenn ein Anruf aktiv ist

Wenn ein Anruf aktiv ist (der Audiomodus ist AudioMode.IN_CALL), sollten Eingabestreams von der AP gemäß Abschnitt Gleichzeitige Aktivität von AP-Eingabestreams geöffnet und aktiviert werden können.

Die Priorität für die Geräteauswahl und die Vorverarbeitung sollte jedoch immer durch den Sprachanruf bestimmt werden, falls es zu Konflikten mit den Anfragen aus den AP-Eingabestreams kommt.

Gleichzeitige Erfassung von DSP und AP

Wenn das Audiosubsystem einen DSP enthält, der Low-Power-Audio-Kontext- oder Hotword-Erkennungsfunktionen unterstützt, sollte die Implementierung die gleichzeitige Erfassung durch den AP und den Audio-DSP unterstützen. Dies umfasst sowohl die Erfassung durch den DSP während der ersten Erkennungsphase als auch die Erfassung durch die AP mit AudioSource.HOTWORD , nachdem die Erkennung durch den DSP ausgelöst wurde.

Dies sollte durch das Flag für die gleichzeitige Aufnahme widergespiegelt werden, das von der Sound Trigger HAL über den Implementierungsdeskriptor gemeldet wird: ISoundTriggerHw.Properties.concurrentCapture = true.

Der Audio-HAL sollte auch ein Eingabeprofil für die Hotword-Erfassung bereitstellen, das durch das Flag AudioInputFlag.HW_HOTWORD gekennzeichnet ist. Die Implementierung sollte das Öffnen und Aktivieren einer Anzahl von Streams in diesem Profil unterstützen, die mindestens der Anzahl der Soundmodelle entspricht, die gleichzeitig von der Sound-Trigger-HAL geladen werden können.

Die Aufnahme von diesem Eingabeprofil sollte möglich sein, während andere Eingabeprofile aktiv sind.

Auswirkungen auf Assistant-Implementierungen

Anforderungen an die Datennutzung und Nutzerbenachrichtigung

Da die gleichzeitige Mikrofonnutzung bei Missbrauch private Nutzerdaten preisgeben kann, müssen die folgenden Bedingungen und Garantien für die privilegierten vorinstallierten Apps gelten, die die Assistant-Rolle anfordern.

  • Über das Mikrofon erhobene Daten dürfen das Gerät nur verlassen, wenn der Nutzer mit dem Assistant interagiert. Das kann beispielsweise nach der Aktivierung des Hotwords geschehen.
  • Anwendungen, die gleichzeitig zuhören, sollten dem Nutzer nach der Erkennung des Hotwords visuelle Hinweise geben. So können Nutzer nachvollziehen, dass weitere Unterhaltungen über eine andere App wie Assistant geführt werden.
  • Nutzer sollten die Möglichkeit haben, das Mikrofon oder die Assistant-Trigger zu deaktivieren.
  • Wenn Audioaufnahmen gespeichert werden, sollten Nutzer jederzeit auf die Aufnahmen zugreifen, sie überprüfen und löschen können.

Funktionale Verbesserungen für Android 10

Assistants blockieren sich nicht gegenseitig

Unter Android 9 oder niedriger kann nur einer von zwei Assistenten, die immer aktiv sind, auf sein Hotword reagieren. Daher war es erforderlich, zwischen den beiden Assistenten zu wechseln. Unter Android 10 kann der Standardassistent gleichzeitig mit dem anderen Assistenten zuhören. Dadurch wird die Nutzung beider Assistenten für Nutzer deutlich einfacher.

Apps, die das Mikrofon geöffnet halten

Wenn Apps wie Shazam oder Waze das Mikrofon geöffnet halten, kann der Standard-Assistant weiterhin auf das Hotword warten.

Bei Assistant-Apps, die nicht als Standard-Apps festgelegt sind, ändert sich das Verhalten unter Android 10 nicht.

Beispiel für die Audio-HAL-Implementierung

Ein Beispiel für eine Audio-HAL-Implementierung, die den Richtlinien in diesem Dokument entspricht, finden Sie im AOSP.