Base de l'expérience utilisateur pour le framework haptique

Toutes les améliorations du framework Android basées sur le retour haptique sont générées par un ensemble de principes UX qui évoluent à un rythme équivalent. L'actuel principes impliquent le remplacement des vibrations bourdonnantes par des retours haptiques clairs. Découvrez les technologies haptiques enrichies.

Principes de l'expérience utilisateur

Figure 1 : Principes actuels

Le tableau suivant répertorie toutes les API haptiques disponibles.

API Méthodes Année d'ajout
android.view.HapticFeedbackConstants
  • CLIC_CONTEXTE
  • CLOCK_TICK
  • CLÉ_VIRTUEL
  • CLAVIER_TAP
  • APPUI LONGUE
Avant 2016
  • APPUYER SUR LE CLAVIER
  • DÉCLARATION_CLAVIER
  • PASSER_HANDLE_TEXTE
  • SORTIE_DE_CLÉ_VIRTUELLE
2017 (Android 8)
  • CONFIRMER
  • REFUSER
  • GESTURE_START
  • GESTURE_END
2020 (Android 11)
Vue android
  • performanceHapticFeedback()
Avant 2016
Vibrator android.os.vibrator
  • vibreur()
  • hasVibrator()
Avant 2016
  • hasAmplitudeControl()
2017 (Android 8)
  • areAllEffectsSupported()
  • areAllPrimitivesSupported()
  • areEffectsSupported()
  • arePrimitivesSupported()
2020 (Android 11)
android.os.VibrationEffect
  • createOneShot()
  • createWaveform()
2017 (Android 8)
  • EFFET_TICK
  • EFFECT_CLICK
  • EFFET_HEAVY_CLICK
  • EFFET_DOUBLE_CLICK
  • createPrédéfini()
2019 (Android 10)
android.os.VibrationEffect.Composition
  • TITRE_PRIMITIF
  • CLIC_PRIMITIF
  • addPrimitive()
  • compose()
2020 (Android 11)
android.media.AudioAttributes.Builder.
  • setHapticChannelsmuted()
2019 (Android 10)

Vibreur bruyant

Des solutions de gestion des ressources humaines de mauvaise qualité, mais économes en énergie, qui s'apparentent aux bipeurs et aux feature phones. Les vibrations basées sur le vibreur remplacent les sonneries sonores. mode silencieux. Les anciens composants matériels qui produisent des images bruyantes et désagréables les bruits audibles peuvent nuire à l'expérience utilisateur haptique en générant des impressions de mauvaise qualité (par un téléphone bon marché et cassé, par exemple).

Effacer le retour haptique

Des retours haptiques clairs favorisent la sensation de changements d'état distincts (par exemple, les changements binaires pendant le processus de mise sous tension et hors tension). En raison de la nature affordance discrète, des retours haptiques clairs sont générés en tant qu'entité unique (par (un effet haptique pour un événement d'entrée, par exemple).

Android vise à fournir un retour haptique clair qui dégage des sensations fortes, que les sensations bruyantes ou molles.

Les constantes haptiques prédéfinies créées pour accepter des retours haptiques clairs incluent les éléments suivants : comme suit.

Dans HapticFeedbackConstants:

  • CLOCK_TICK
  • CONFIRM
  • CONTEXT_CLICK
  • GESTURE_END
  • GESTURE_START
  • KEYBOARD_PRESS
  • KEYBOARD_RELEASE
  • KEYBOARD_TAP
  • LONG_PRESS
  • REJECT
  • TEXT_HANDLE_MOVE
  • VIRTUAL_KEY
  • VIRTUAL_KEY_RELEASE

Dans VibrationEffect:

  • EFFECT_CLICK
  • EFFECT_DOUBLE_CLICK
  • EFFECT_HEAVY_CLICK
  • EFFECT_TICK

Il est essentiel d'établir des connaissances communes entre les fabricants et les développeurs d'appareils ce qui améliore la qualité globale du retour haptique dans l'écosystème Android. Utilisez les checklist de base, évaluation du matériel, et le CDD. pour en savoir plus sur l'implémentation haptique.

Presse et communiqué

Figure 3. Appuyer et relâcher.

Retour haptique enrichi

Les technologies haptique enrichies sont de plus en plus nombreuses basés sur des impulsions. Android vise à prendre en charge des technologies haptiques riches avec une composabilité et ajustabilité avec un niveau de précision élevé. Les éléments suivants : les cas d'utilisation sont compatibles avec Android 11 ou version antérieure.

Retour haptique enrichi

Figure 4. Retour haptique riche avec texture glissante

Faire glisser et balayer

Figure 5. Glisser et balayer

Cas d'utilisation 1: texture glissante

Si un effet haptique se répète lorsque le doigt glisse sur une surface tactile (par exemple, exemple : faire glisser, balayer, explorer la surface avec une texture haptique fantôme), les effets haptiques répétés sont de préférence nettes et subtils.

Si l'effet individuel est bourdonnant plutôt que net, alors les intervalles entre les répétitions sont susceptibles d’être effacées. Le résultat est un long buzz, que plusieurs signaux discrets.

Si l'amplitude n'est pas assez subtile, l'énergie haptique perçue s'accumule. par la répétition, ce qui se traduit par un retour haptique extrêmement puissant à la fin de la répétition.

Implémenter une texture haptique de surface simple pour les gestes de balayage et de déplacement

Utiliser CLOCK_TICK et TEXT_HANDLE_MOVE dans HapticFeedbackConstants Ces constantes prédéfinissent des caractéristiques de répétition et d'amplitude.

Créer votre propre effet

Pour créer votre propre effet, composez une conception en enchaînant des séquences sur PRIMITIVE_CLICK et PRIMITIVE_TICK dans VibrationEffect.Composition Vous pouvez ajuster les caractéristiques de l'échelle de répétition et d'amplitude avec addPrimitive(int primitiveID, float scale, int delay). L'assistance repose sur la CAP_COMPOSE_EFFECTS de la fonction Interface HAL du vibreur.

Cas d'utilisation 2: longue vibration avec effet de lissage

Une vibration longue est une vibration d'amplitude douce qui passe de 0 à la l'amplitude cible. De longues vibrations peuvent générer un sentiment d'attention facilement perceptible les technologies haptiques. Cependant, une vibration longue et soudaine peut surprendre les utilisateurs dans un environnement et produit souvent des bourdonnements audibles. Pour générer un rapport et une longue vibration, appliquez l'effet Lissage au début des longues vibreur. Cela produit une transition d'amplitude douce qui se construit vers l'amplitude cible.

Appliquer l'effet lissage à l'approche

  1. Vérifier les capacités matérielles du contrôle de l'amplitude avec android.os.Vibrator.hasAmplitudeControl()

    • Le résultat doit être true pour produire un effet de lissage de vitesse avec avec une amplitude variable.
  2. Utilisez VibrationEffect.createWaveform(timings[], amplitudes[], int repeat).

  3. Ajustez la série de timings[] et amplitudes[] pour générer la lissage à l'approche, comme illustré à la figure 6.

Vibration longue

Figure 6. Longue courbe d'aisance des vibrations

Cas d'utilisation 3: retour haptique couplé audio

Les données haptiques couplées à l'audio sont des modèles haptiques associés au rythme de l'audio. pour attirer l'attention de l'utilisateur.

Avantages du retour haptique couplé audio :

Pour implémenter un retour haptique couplé audio, combinez un retour haptique clair à de longues vibrations. Les sensations haptiques fortes mais courtes des signaux haptiques clairs délivrent des motifs rythmiques. Lorsqu'elle est combinée à des stimuli très longs par les vibrations, cela fait un excellent travail pour attirer l'attention de l'utilisateur.

Il est important de tenir compte des schémas rythmiques de la sensation. S'il n'y a aucun sens du rythme, l'utilisateur perçoit les sensations haptiques comme des vibrations aléatoires et a tendance à pour les ignorer.

Couple audio

Figure 7. Exemple de retour haptique de couple audio

Retour haptique couplé audio: conseils d'implémentation

Implémenter un retour haptique couplé audio nécessite une compréhension de base du contenu la lecture des canaux audio et haptique. Gardez à l'esprit les points suivants.

  • Utilisez le MediaPlayer ou SoundPool classes.

    • Éléments au format OGG avec une clé de métadonnées spéciale (ANDROID_HAPTIC suivi d'un certain nombre de canaux haptiques) indiquent Présence de données haptiques et lecture avec MediaPlayer et SoundPool
  • Indiquer la compatibilité du retour haptique et de la lecture audio dans audio_policy_configuration.xml

    • Utiliser un profil de sortie avec un canal haptique AUDIO_CHANNEL_OUT_HAPTIC_A|B
    • Pour un flux de sortie avec des canaux haptiques, rappelez-vous que canaux sont présentés comme des canaux supplémentaires dans les données.

    Exemple

    Si le masque de canal du flux de sortie se présente comme suit:

    AUDIO_CHANNEL_OUT_STEREO_HAPTIC_A

    Chaque échantillon doit alors se présenter comme suit:

    AUDIO_LEFT_CHANNEL,AUDIO_RIGHT_CHANNEL,HAPTIC_CHANNEL_A

  • Modifier AudioAttributes.Builder( ).setHapticChannelsMuted(boolean muted) sur false pour lire le canal haptique.

    • Par défaut, le son des canaux haptiques est coupé (true).
    • Voici quelques cas d'utilisation : sonneries et sons d'interface utilisateur, l'haptique et le feedback.
  • Le HAL du vibreur doit mettre en œuvre la prise en charge d'un contrôle externe.

Retour haptique audio couplé

Figure 8. Implémenter le retour haptique couplé audio

Retour haptique couplé audio: générateur haptique

HapticGenerator est un effet audio introduite dans Android 12, qui peut générer des données haptiques à partir d'un canal audio et en temps réel sous forme de retours haptiques couplés par l'audio. L'effet est appliqué à la AudioTrack comme décrit dans la Figure 9.

Architecture du générateur haptique

Figure 9. Architecture du générateur haptique

Pour vous assurer que votre algorithme de générateur haptique génère un retour haptique de haute qualité, régler l'algorithme de génération sur le moteur du vibreur de l'appareil en ajustant le qui configurent la chaîne de filtres qu'elle applique aux formes d'ondes audio. Cette section décrit ces paramètres en détail et explique comment les régler. à vos spécifications matérielles.

  1. Fréquence de résonance pour le filtre passe-bande

    La fréquence de résonance du vibreur est la fréquence à laquelle un actionneur haptique offre une sortie maximale. Ce paramètre ajuste un anti-resonator afin qu'il aplatir la fonction de transfert de réponse afin d'obtenir une bande passante plus large. Le framework Android associe automatiquement cette valeur à la sortie du Méthode HAL du vibreur IVibrator.getResonantFrequency.

    La valeur par défaut pour ce paramètre est 150 Hz. Vous pouvez modifier ce paramètre dans la section cliquez ici.

  2. Puissance de normalisation pour l'enveloppe lente

    Ce paramètre détermine l'exposant dans la normalisation partielle (contrôle automatique du gain). Sa valeur par défaut est -0.8, ce qui signifie que 80% de la variation de la plage dynamique est supprimée par cette étape du contrôle du gain. Vous pouvez le modifier dans le code ici.

  3. Facteur Q pour le filtre de bande passante

    Le facteur de qualité du vibreur (facteur Q) est déterminé par deux paramètres:

    • Le Zero-Q, le facteur de qualité des zéros dans le filtre de bande passante qui annule partiellement la résonance.

    • Le pôle Q, qui correspond au facteur de qualité des pôles dans le filtre de bande passante.

    Le ratio entre ces deux valeurs limite la suppression des résonances pour augmenter les basses fréquences et élargir la réponse de l'algorithme. Par exemple : les valeurs par défaut de 8 pour zéro Q et de 4 pour le pôle Q. un ratio de 2, ce qui limite la suppression des résonances par un facteur de 2 (6 dB). Le framework Android associe les deux valeurs à la sortie du vibreur HAL IVibrator.getQFactor.

    Si les valeurs par défaut ne tiennent pas compte de l'amortissement de la force du moteur sur votre appareil, nous vous recommandons de modifier les deux valeurs en même temps, et en augmentant ou en diminuant les deux. Le ratio entre le Q zéro et le Q du pôle doit être supérieur à 1. Vous pouvez le modifier dans le code ici.

  4. Fréquence d'angle pour la distorsion

    La fréquence d'angle est appliquée par un filtre passe-bas qui supprime des vibrations faibles et améliore les niveaux supérieurs grâce à une distorsion cubique. La valeur par défaut est 300 Hz. Vous pouvez le modifier dans le code ici.

  5. Gain d'entrée et seuil du cube pour la distorsion

    Ces paramètres sont utilisés par un filtre de distorsion non linéaire appliqué au forme d'onde d'entrée qui réduit l'amplitude des signaux basse fréquence augmente les fréquences les plus élevées.

    • La valeur par défaut du facteur de gain d'entrée est 0,3.
    • La valeur par défaut du seuil du cube est 0,1.

    Nous vous recommandons de modifier les deux valeurs en même temps. Vous les trouverez dans le code cliquez ici.

    Pour en savoir plus sur la fonction appliquée par ce filtre, consultez les la mise en œuvre est disponible ici. Pour en savoir plus sur l'influence de ces deux paramètres sur le résultat, nous recommandent de tracer les réponses en fréquence des filtres et d'observer les réponses en fréquence changent avec différentes valeurs de paramètre.

  6. Gain de sortie pour la distorsion

    Ce paramètre contrôle l'amplitude de la vibration finale. C'est un ultime gain appliqué après un limiteur souple qui limite les amplitudes des vibrations à moins que 1. Sa valeur par défaut est 1.5, et elle peut être modifiée dans le code cliquez ici. Si les vibrations sont trop subtiles, augmentez la valeur. Si vous entendez les des cliquetis du matériel d'actionneur, diminuez la valeur.