Android 10 améliore l’expérience utilisateur, ce qui nécessite l’utilisation la capture audio active simultanément, par exemple, si l'utilisateur souhaite contrôler un Appel VoIP ou enregistreur vidéo avec commandes vocales fournies par un service d'accessibilité.
Le framework audio implémente la règle, ce qui n'autorise que certaines applications privilégiées à capturer en même temps que les applications standards.
La règle de simultanéité est appliquée en coupant le son du contenu audio capturé au lieu d'empêcher de démarrer la capture d'une application. Cela permet au framework de gérer de manière dynamique les modifications du nombre et des types de cas d'utilisation de la capture active, sans empêcher une application de commencer la capture dans le cas où elle peut récupérer un accès complet au micro après la fin de la capture par une autre application.
La conséquence pour le HAL audio et le sous-système audio est qu'ils doivent prendre en charge plusieurs flux d'entrée actifs simultanément, même si, dans certains cas, un seul flux fournit un son non silencieux à un client actif.
Exigences concernant le CDD
Consultez la section CDD pour connaître les pour la prise en charge de la capture simultanée.
Capturer des situations à partir du HAL audio
Un scénario de capture simultanée peut entraîner des situations différentes en termes de nombre d'enregistrements les flux d'entrée, la sélection des périphériques d'entrée ou la configuration de prétraitement.
La simultanéité peut se produire entre les éléments suivants :
- Plusieurs flux d'entrée du processeur d'application (PA)
- Flux d'entrée et appel vocal
- Flux d'entrée et DSP audio mettant en œuvre une détection de mot clé à faible consommation d'énergie
Activité simultanée des flux d'entrée de l'AP
Le fichier de configuration de la stratégie audio audio_policy_configuration.xml
est utilisé par le framework audio pour déterminer le nombre de flux d'entrée pouvant être ouverts et actifs simultanément.
Le HAL audio doit prendre en charge au moins une instance de chaque profil d'entrée (mixPort
du rôle sink
) listé dans le fichier de configuration ouvert et actif.
Le choix parmi les appareils
Lorsque plusieurs clients actifs sont associés au même flux d'entrée HAL, le framework sélectionne l'appareil approprié pour ce flux d'entrée en fonction de la priorité du cas d'utilisation.
Lorsque plusieurs flux d'entrée sont actifs, chacun d'eux peut être associé à un appareil différent de votre choix.
Si la technologie est compatible, il est recommandé que le HAL audio et le sous-système permettent de capturer différents flux à partir de différents appareils, tels qu'un casque Bluetooth et un micro intégré.
En cas d'incompatibilité (par exemple, si deux appareils partagent la même interface audio numérique ou le même backend), le HAL audio doit choisir le flux qui contrôle la sélection de l'appareil.
Dans ce cas :
- L'état obtenu doit être cohérent et proposer la même sélection d'appareils lorsque le même scénario est répété.
- À la fin de l'état de simultanéité, le flux actif restant doit être acheminé vers l'appareil demandé sur ce flux.
Si un ordre de priorité est défini par le HAL audio entre les cas d'utilisation actifs, suivez le même ordre que celui indiqué dans source_priority()
dans frameworks/av/services/audiopolicy/common/include/policy.h
.
Sélection de prétraitement
Le framework audio peut demander un prétraitement sur un flux d'entrée en utilisant
les méthodes HAL addEffect()
ou removeEffect()
.
Pour le prétraitement sur un flux d'entrée donné, le framework audio n'active que la configuration correspondant au cas d'utilisation actif de priorité la plus élevée sur le flux d'entrée. Toutefois, il peut y avoir des chevauchements lors de l'activation et de la désactivation des cas d'utilisation. entraînant l'exécution de deux processus actifs simultanés (par exemple, deux instances de l'annulation d'écho) sur le même flux d'entrée. Dans ce cas, l'implémentation HAL choisit la requête à accepter. Elle suit les requêtes actives et rétablit l'état correct lorsque l'un des processus est désactivé.
Lorsque plusieurs flux de capture sont actifs simultanément, différentes requêtes de prétraitement peuvent être s'exécutent sur des flux différents.
Les implémentations HAL et sous-systèmes audio doivent permettre appliquées à différents flux, même s'ils partagent le même périphérique d'entrée. Autrement dit, le prétraitement doit être appliqué après le démultiplexage des flux de la source de capture principale.
Si ce n'est pas possible pour des raisons techniques sur un sous-système audio donné, le HAL audio doit appliquer des règles de priorité similaires à celles listées dans la section Sélection de l'appareil.
Appel vocal simultané et capture depuis le point d'accès
La capture depuis le point d'accès peut se produire lorsqu'un appel vocal est actif. Cette situation n'est pas nouvelle dans Android 10 et n'est pas directement liée à la fonctionnalité de capture simultanée, mais il est utile de mentionner les consignes pour ce scénario.
Deux types différents de capture du point d'accès sont nécessaires pendant un appel.
- Capturer les chemins d'appel RX et TX
- Capturer à partir d'un appareil d'entrée (par exemple, un micro intégré)
Capturer les appels RX et TX
La capture des données RX et TX de l'appel est déclenchée par l'utilisation de la source audio AudioSource.VOICE_UPLINK
ou AudioSource.VOICE_DOWNLINK
, et/ou de l'appareil AudioDevice.IN_TELEPHONY_RX
.
Les HAL audio doivent être exposés sur le profil d'entrée (mixPort
du rôle sink
) avec un parcours disponible à partir de l'appareil AudioDevice.IN_TELEPHONY_RX
.
Lorsqu'un appel est connecté (mode audio AudioMode.IN_CALL
), il devrait être possible d'avoir au moins un flux de capture actif à partir de l'appareil AudioDevice.IN_TELEPHONY_RX
.
Capturez à partir des périphériques d'entrée lorsqu'un appel actif
Lorsqu'un appel est actif (mode audio AudioMode.IN_CALL
), il devrait être possible d'ouvrir et d'activer des flux d'entrée à partir du point d'accès, comme indiqué dans la section Activité simultanée des flux d'entrée du point d'accès.
Cependant, la priorité de sélection de l'appareil et de prétraitement doit toujours être déterminée par la voix. en cas de conflit avec les requêtes provenant des flux d'entrée du point d'accès.
Capture simultanée à partir du DSP et du point d'accès
Lorsque le sous-système audio contient un DSP compatible avec les fonctions de détection de contexte audio basse consommation ou de mot clé, l'implémentation doit prendre en charge la capture simultanée de l'AP et du DSP audio.
Cela inclut la capture par le DSP pendant la phase de détection initiale et la capture par l'AP avec AudioSource.HOTWORD
une fois la détection déclenchée par le DSP.
Cela doit être reflété par l'indicateur de capture simultanée signalé par le HAL du déclencheur sonore via le descripteur d'implémentation : ISoundTriggerHw.Properties.concurrentCapture = true
.
Le HAL audio doit également exposer et définir un profil d'entrée spécifique à la capture de mots clés identifié par l'indicateur AudioInputFlag.HW_HOTWORD
. L'implémentation doit permettre d'ouvrir et d'activer un nombre de flux sur ce profil au moins égal au nombre de modèles sonores pouvant être chargés simultanément par le HAL du déclencheur sonore.
La capture à partir de ce profil d'entrée devrait être possible lorsque d'autres profils d'entrée sont actifs.
Implication pour les implémentations de l'Assistant
Exigences concernant la consommation des données et les notifications aux utilisateurs
Étant donné que l'utilisation simultanée du micro peut entraîner une fuite de données privées de l'utilisateur en cas d'utilisation abusive, nous devons appliquer les conditions et garanties suivantes aux applications préchargées privilégiées qui demandent à détenir le rôle d'Assistant.
- Les données collectées par le biais du micro ne doivent pas quitter l'appareil, sauf si l'utilisateur interagissant avec l'Assistant. Par exemple, après le déclenchement du mot clé.
- Les applications qui écoutent simultanément doivent fournir des repères visuels à l'utilisateur après la détection du mot clé. Cela permet aux utilisateurs de comprendre que les prochaines conversations se feront via une autre application, comme l'Assistant.
- Les utilisateurs doivent avoir la possibilité de désactiver le micro ou les déclencheurs de l'Assistant.
- Lorsque des enregistrements audio sont stockés, les utilisateurs doivent pouvoir y accéder, les écouter et les supprimer à tout moment.
Améliorations fonctionnelles pour Android 10
Les assistants ne se bloquent pas
Sur Android 9 ou version antérieure, lorsqu'il existe deux modes Always-on Assistants sur l'appareil, un seul d'entre eux pourrait écouter son mot clé. Il a donc fallu passer d'un Assistant à l'autre. Sous Android 10, l'Assistant par défaut peut écouter en même temps que l'autre Assistant. Cela se traduit par une expérience beaucoup plus fluide pour les utilisateurs qui utilisent les deux Assistants.
Applications qui maintiennent le micro ouvert
Lorsque des applis comme Shazam ou Waze maintiennent le micro ouvert, l'Assistant par défaut continue d'écouter pour le mot clé.
Pour les applications Assistant autres que celles par défaut, le comportement ne change pas sous Android 10.
Exemple d'implémentation du HAL audio
Voici un exemple d'implémentation HAL audio conforme aux consignes de ce document : disponible dans AOSP.