Gleichzeitige Erfassung

Android 10 verbessert die Benutzererfahrung, die mehr als eine aktive Audioaufnahme gleichzeitig erfordert, beispielsweise wenn der Benutzer einen VoIP-Anruf oder Videorecorder mit Sprachbefehlen steuern möchte, die von einem Eingabehilfendienst bereitgestellt werden.

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

Die Gleichzeitigkeitsrichtlinie wird implementiert, indem das aufgezeichnete Audio stumm geschaltet wird, anstatt zu verhindern, dass eine Anwendung mit der Aufzeichnung beginnt. Dadurch kann das Framework Änderungen in der Anzahl und Art der Anwendungsfälle für die aktive Erfassung dynamisch berücksichtigen, ohne zu verhindern, dass eine App mit der Erfassung beginnt, wenn sie den vollen Zugriff auf das Mikrofon wiederherstellen kann, nachdem eine andere App die Erfassung beendet hat.

Die Konsequenz für die Audio-HAL und das Audio-Subsystem besteht darin, dass sie mehrere aktive Eingangsströme gleichzeitig unterstützen müssen, selbst wenn in einigen Fällen nur ein Strom einem aktiven Client nicht stummes Audio bereitstellt.

CDD-Anforderungen

Siehe CDD für die Anforderungen für die gleichzeitige Erfassungsunterstützung.

Erfassen Sie Situationen aus Audio HAL

Ein gleichzeitiges Erfassungsszenario kann zu unterschiedlichen Situationen in Bezug auf die Anzahl der aktiven Eingabeströme, die Auswahl des Eingabegeräts oder die Vorverarbeitungskonfiguration führen.

Parallelität kann zwischen Folgendem auftreten:

  • Mehrere Eingabeströme vom Anwendungsprozessor (AP)
  • Input-Streams und einen Sprachanruf
  • Eingangsströme und ein Audio-DSP, der eine Low-Power-Hotword-Erkennung implementiert

Gleichzeitige Aktivität von AP-Eingangsströmen

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

Die Audio-HAL muss mindestens eine Instanz jedes Eingabeprofils ( mixPort der sink ) unterstützen, das in der geöffneten und aktiven Konfigurationsdatei aufgeführt ist.

Geräteauswahl

Wenn mehrere aktive Clients an denselben HAL-Eingabestrom angeschlossen sind, wählt das Framework basierend auf der Anwendungsfallpriorität das geeignete Gerät für diesen Eingabestrom aus.

Wenn mehrere Eingangsstreams aktiv sind, kann jeder Stream eine andere Geräteauswahl haben.

Wenn die Technologie kompatibel ist, wird empfohlen, dass die Audio-HAL und das Subsystem die Aufnahme verschiedener Streams von verschiedenen Geräten zulassen, z. B. einem Bluetooth-Headset und einem eingebauten Mikrofon.

Wenn es eine Inkompatibilität gibt (z. B. zwei Geräte teilen sich dieselbe digitale Audioschnittstelle oder dasselbe Backend), muss der Audio-HAL entscheiden, welcher Stream die Geräteauswahl steuert.

In diesem Fall:

  • Der resultierende Zustand muss konsistent sein und dieselbe Geräteauswahl bieten, wenn dasselbe Szenario wiederholt wird.
  • Wenn der Parallelitätsstatus endet, muss der verbleibende aktive Stream auf diesem Stream an das ursprünglich angeforderte Gerät weitergeleitet werden.

Wenn von der Audio-HAL eine Prioritätsreihenfolge zwischen aktiven Anwendungsfällen definiert wird, befolgen Sie dieselbe Reihenfolge wie in source_priority() in frameworks/av/services/audiopolicy/common/include/policy.h

Auswahl vor der Verarbeitung

Das Audio-Framework kann mithilfe der HAL-Methoden addEffect() oder removeEffect() eine Vorverarbeitung für einen Eingabestream anfordern.

Für die Vorverarbeitung eines bestimmten Eingabestreams aktiviert das Audio-Framework nur die Konfiguration, die dem aktiven Anwendungsfall mit der höchsten Priorität im Eingabestream entspricht. Es kann jedoch während der Aktivierung und Deaktivierung von Anwendungsfällen zu Überschneidungen kommen, was dazu führt, dass zwei gleichzeitig aktive Prozesse (z. B. zwei Instanzen von Echo Canceller) auf demselben Eingabedatenstrom ausgeführt werden. In diesem Fall entscheidet die HAL-Implementierung, welche Anfrage akzeptiert wird; Es verfolgt die aktiven Anforderungen und stellt den korrekten Status wieder her, wenn einer der Prozesse deaktiviert ist.

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

Die HAL- und Audio-Subsystem-Implementierungen sollten ermöglichen, dass unterschiedliche Vorverarbeitungen auf unterschiedliche Streams angewendet werden, selbst wenn sie dasselbe Eingabegerät verwenden. Das heißt, die Vorverarbeitung sollte nach dem Demuxen der Streams von der primären Erfassungsquelle angewendet werden.

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

Gleichzeitiger Sprachanruf und Erfassung vom AP

Die Erfassung vom 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 gleichzeitigen Erfassungsfunktion, aber es ist hilfreich, die Richtlinien für dieses Szenario zu erwähnen.

Während eines Anrufs sind zwei verschiedene Erfassungsarten vom AP erforderlich.

Anruf RX und TX erfassen

Das Erfassen von Anrufen RX und TX wird durch die Verwendung der Audioquelle AudioSource.VOICE_UPLINK oder AudioSource.VOICE_DOWNLINK und/oder des Geräts AudioDevice.IN_TELEPHONY_RX .

Audio-HALs sollten im Eingabeprofil ( mixPort der sink ) mit einer verfügbaren Route vom Gerät AudioDevice.IN_TELEPHONY_RX verfügbar gemacht werden.

Wenn ein Anruf verbunden ist (Audiomodus ist AudioMode.IN_CALL ), sollte es möglich sein, mindestens einen aktiven Aufnahmestream vom Gerät AudioDevice.IN_TELEPHONY_RX zu haben.

Erfassung von Eingabegeräten, wenn ein Anruf aktiv ist

Wenn ein Anruf aktiv ist (der Audiomodus ist AudioMode.IN_CALL ), sollte es möglich sein, Eingabeströme vom AP zu öffnen und zu aktivieren, wie im Abschnitt Gleichzeitige Aktivität von AP-Eingabeströmen angegeben.

Die Priorität für die Geräteauswahl und Vorverarbeitung sollte jedoch immer durch den Sprachanruf gesteuert werden, falls es einen Konflikt mit den Anforderungen von den AP-Eingangsströmen gibt.

Gleichzeitige Erfassung von DSP und AP

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

Dies sollte durch das Concurrent-Capture-Flag widergespiegelt werden, das von der Sound-Trigger-HAL über den Implementierungsdeskriptor gemeldet wird: ISoundTriggerHw.Properties.concurrentCapture = true .

Die Audio-HAL sollte auch ein spezielles Profil für die Hotword-Erfassung bereitstellen und eingeben, das durch das Flag AudioInputFlag.HW_HOTWORD identifiziert wird. Die Implementierung sollte das Öffnen und Aktivieren einer Anzahl von Streams auf diesem Profil unterstützen, die mindestens gleich der Anzahl von Soundmodellen ist, die gleichzeitig durch die Soundtrigger-HAL geladen werden können.

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

Implikation für Assistentenimplementierungen

Anforderungen an die Datennutzung und Benutzerbenachrichtigung

Da die gleichzeitige Mikrofonnutzung bei Missbrauch private Daten von Benutzern preisgeben kann, müssen die folgenden Bedingungen und Garantien auf die privilegierten vorinstallierten Apps angewendet werden, die darum bitten, die Assistentenrolle zu übernehmen.

  • Über das Mikrofon erfasste Daten sollten das Gerät nicht verlassen, es sei denn, der Benutzer interagiert mit dem Assistenten. Zum Beispiel, nachdem das Hotword ausgelöst wurde.
  • Anwendungen, die gleichzeitig lauschen, sollten dem Benutzer visuelle Hinweise geben, nachdem das Hotword erkannt wurde. Dies hilft Benutzern zu verstehen, dass weitere Unterhaltungen über eine andere App wie Assistant laufen würden.
  • Benutzer sollten die Möglichkeit haben, das Mikrofon oder die Assistant-Trigger auszuschalten.
  • Wenn Audioaufzeichnungen gespeichert werden, sollten Benutzer die Möglichkeit haben, jederzeit auf Aufzeichnungen zuzugreifen, sie zu überprüfen und zu löschen.

Funktionsverbesserungen für Android 10

Assistenten blockieren sich nicht gegenseitig

Unter Android 9 oder niedriger, wenn zwei Always-On-Assistenten auf dem Gerät vorhanden sind, kann nur einer von ihnen auf sein Hotword lauschen. Daher musste zwischen den beiden Assistenten gewechselt werden. In Android 10 kann der Standardassistent gleichzeitig mit dem anderen Assistenten zuhören. Dies führt zu einer viel reibungsloseren Erfahrung für Benutzer mit beiden Assistenten.

Apps, die das Mikrofon offen halten

Wenn Apps wie Shazam oder Waze das Mikrofon offen halten, kann der Standardassistent immer noch auf das Hotword warten.

Bei nicht standardmäßigen Assistant-Apps ändert sich das Verhalten für Android 10 nicht.

Beispiel für eine Audio-HAL-Implementierung

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