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.
Figure 1 : Principes actuels
Le tableau suivant répertorie toutes les API haptiques disponibles.
API | Méthodes | Année d'ajout |
---|---|---|
android.view.HapticFeedbackConstants |
|
Avant 2016 |
|
2017 (Android 8) | |
|
2020 (Android 11) | |
Vue android |
|
Avant 2016 |
Vibrator android.os.vibrator |
|
Avant 2016 |
|
2017 (Android 8) | |
|
2020 (Android 11) | |
android.os.VibrationEffect |
|
2017 (Android 8) |
|
2019 (Android 10) | |
android.os.VibrationEffect.Composition |
|
2020 (Android 11) |
android.media.AudioAttributes.Builder. |
|
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.
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.
Figure 4. Retour haptique riche avec texture glissante
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
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.
- Le résultat doit être
Utilisez
VibrationEffect
.createWaveform(timings[], amplitudes[], int repeat)
.Ajustez la série de
timings[]
etamplitudes[]
pour générer la lissage à l'approche, comme illustré à la figure 6.
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.
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
ouSoundPool
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 avecMediaPlayer
etSoundPool
- Éléments au format OGG avec une clé de métadonnées spéciale
(
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
- Utiliser un profil de sortie avec un canal haptique
Modifier
AudioAttributes.Builder( ).setHapticChannelsMuted(boolean muted)
surfalse
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.
- Par défaut, le son des canaux haptiques est coupé (
Le HAL du vibreur doit mettre en œuvre la prise en charge d'un contrôle externe.
- Pour les implémentations HIDL, utilisez
setExternalControl(bool enabled) generates (Status status)
- Pour les implémentations AIDL, utilisez
void setExternalControl(in boolean enabled)
- Pour les implémentations HIDL, utilisez
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.
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.
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.
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.
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.
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.
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.
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.