Les constantes et primitives haptiques sont définies par le HAL du vibrateur et mappées par le framework Android sur des API publiques. Effectuez ces vérifications pour déterminer si votre appareil répond aux exigences minimales pour implémenter les technologies haptiques :
Figure 2. Implémenter des effets
Figure 3. Implémenter des primitives
Implémenter des constantes
Les constantes haptiques dans VibrationEffect peuvent être utilisées par les développeurs via VibrationEffect.createPredefined(). Vérifiez l'état d'implémentation des constantes haptiques suivantes.
| Constantes haptiques | Emplacements et résumés |
|---|---|
EFFECT_TICK, EFFECT_CLICK,
EFFECT_HEAVY_CLICK,
EFFECT_DOUBLE_CLICK |
VibrationEffect
classeLes constantes haptiques dans VibrationEffect n'incluent aucune
notion d'événements d'entrée et ne comportent aucun élément d'interface utilisateur. Les constantes incluent la
notion de niveaux d'énergie plutôt, tels que EFFECT_CLICK et
EFFECT_HEAVY_CLICK, qui sont appelés par
createPredefined(). |
Les autres vibrations décrites ci-dessous sont effectuées sur les appareils qui n'implémentent pas les constantes VibrationEffect. Il est recommandé de mettre à jour ces configurations pour obtenir les meilleures performances sur ces appareils.
EFFECT_CLICKVibration de forme d'onde créée avec
VibrationEffect.createWaveformet les timings configurés surframeworks/base/core/res/res/values/config.xml##config_virtualKeyVibePattern.EFFECT_HEAVY_CLICKVibration de forme d'onde créée avec
VibrationEffect.createWaveformet les timings configurés surframeworks/base/core/res/res/values/config.xml##config_longPressVibePattern.EFFECT_DOUBLE_CLICK
Vibration de forme d'onde créée avec
VibrationEffect.createWaveformet les timings (0, 30, 100, 30).EFFECT_TICKVibration de forme d'onde créée avec
VibrationEffect.createWaveformet les timings configurés surframeworks/base/core/res/res/values/config.xml##config_clockTickVibePattern.
Figure 4. Implémenter des constantes de rétroaction
Les constantes haptiques dans HapticFeedbackConstants peuvent être utilisées par les développeurs via View.performHapticFeedback()). Vérifiez l'état des constantes de rétroaction publiques suivantes.
| Constantes haptiques | Emplacements et résumés |
|---|---|
CLOCK_TICK, CONTEXT_CLICK, KEYBOARD_PRESS,
KEYBOARD_RELEASE, KEYBOARD_TAP, LONG_PRESS,
TEXT_HANDLE_MOVE, VIRTUAL_KEY,
VIRTUAL_KEY_RELEASE, CONFIRM, REJECT,
GESTURE_START, GESTURE_END |
Classe HapticFeedbackConstantsLes constantes haptiques dans HapticFeedbackConstants aident les événements d'entrée
avec certains éléments d'interface utilisateur, tels que KEYBOARD_PRESS et
KEYBOARD_RELEASE, qui sont appelés par
performHapticFeedback(). |
Implémenter des primitives
Les primitives haptiques dans
VibrationEffect.Composition
ont une intensité évolutive que les développeurs peuvent utiliser via
addPrimitive(int primitiveId, float scale, int delay).
Les primitives peuvent être divisées en deux catégories :
Primitives courtes : primitives de courte durée, généralement inférieure à 20 ms. Il s'agit de
CLICK,TICKetLOW_TICK.Primitives de chirp : primitives avec une amplitude et une fréquence variables, généralement d'une durée plus longue que les primitives courtes. Il s'agit de
SLOW_RISE,QUICK_RISE,QUCK_FALL,THUDetSPIN.
Primitives courtes
Les primitives courtes peuvent être décrites par le profil d'accélération de la sortie du moteur du vibrateur. La fréquence absolue utilisée varie pour chaque primitive, en fonction de la fréquence de résonance de l'actionneur. Pour en savoir plus sur la configuration matérielle et les outils de mesure de la sortie, consultez Configurer l'équipement de test.
Une métrique de qualité intéressante pour les vibrations courtes est le rapport impulsion/sonnerie (PRR), illustré à la figure 5. Le PRR est défini comme le rapport entre l'impulsion principale, définie par le signal dans la fenêtre de durée où l'amplitude diminue à 10% de l'amplitude maximale, et l'impulsion de sonnerie, définie par le signal où l'amplitude diminue de 10% de l'amplitude maximale à moins de 1% de l'amplitude maximale. La formule du PRR est la suivante :
Pour en savoir plus sur le PRR, consultez Analyser la forme d'onde et pour en savoir plus sur l'analyse et la comparaison des résultats, consultez Comparer les résultats à l'aide de la carte des performances.
Figure 5. Définition du rapport impulsion/sonnerie
Appliquez des primitives courtes comme rétroaction d'entrée utilisateur ou lues dans des compositions plus longues pour créer des textures douces. Cela signifie qu'elles sont généralement déclenchées fréquemment et lues rapidement. L'intensité perçue d'une seule primitive courte peut renforcer l'intensité de l'effet plus important. Pour cette raison, calibrez une seule primitive de tic ou de tic faible avec une composition plus importante, par exemple 100 tics consécutifs.
Primitive de clic
La primitive de clic est un effet puissant et net qui fonctionne généralement à proximité de la fréquence de résonance d'un appareil pour atteindre une sortie maximale en peu de temps. Elle est plus forte et plus profonde que les autres primitives, et fonctionne à une intensité maximale.
Si disponible, utilisez la suralimentation du moteur au début et le freinage actif à la fin pour obtenir un temps de montée et de descente du moteur court. Pour certains moteurs, l'utilisation d'une onde carrée au lieu d'une onde sinusoïdale peut permettre une accélération plus rapide. La figure 6 montre un exemple de profil d'accélération de sortie pour la primitive de clic :
Figure 6. Exemple de profil d'accélération de sortie pour la primitive de clic
| Paramètre | Consigne |
|---|---|
| Durée |
Cible : 12 ms Limite : < 30 ms |
| Accélération de sortie maximale |
Cible : 2 G Limite : > 1 G |
| Fréquence | À peu près à la fréquence de résonance |
Primitive de tic (tic léger)
La primitive de tic est un effet net et court qui fonctionne généralement dans une plage de fréquences plus élevée. Cette primitive peut également être décrite comme un clic d'intensité moyenne à une fréquence plus élevée avec une queue courte. Les mêmes conseils s'appliquent pour obtenir un temps de montée court à l'aide d'une suralimentation du moteur ou d'une onde carrée pour le début initial, et d'un freinage actif au décalage. La figure 7 montre un exemple de profil d'accélération de sortie pour la primitive de tic :
Figure 7. Exemple de profil d'accélération de sortie pour la primitive de tic
| Paramètre | Consigne |
|---|---|
| Durée |
Cible : 5 ms Limite : < 20 ms |
| Accélération de sortie maximale |
Cible : moitié de Limite : entre 0,5 G et 1 G |
| Fréquence |
Cible : 2 fois la fréquence de résonance Limite : < 500 Hz |
Primitive de tic faible
La primitive de tic faible est une version plus douce et plus faible d'un tic léger, fonctionnant dans une plage de fréquences plus basse pour donner plus de corps à l'effet. Cette primitive peut également être décrite comme un clic d'intensité moyenne à une fréquence plus basse, destiné à être utilisé de manière répétitive pour une rétroaction dynamique. Les mêmes conseils s'appliquent pour obtenir un temps de montée court à l'aide d'une suralimentation du moteur ou d'une onde carrée pour le début initial. La figure 8 montre un exemple de profil d'accélération de sortie pour la primitive de tic faible :
Figure 8. Exemple de profil d'accélération de sortie pour la primitive de tic faible
| Paramètre | Consigne |
|---|---|
| Durée |
Cible : 12 ms Limite : < 30 ms |
| Accélération de sortie maximale |
Cible : 1/4 de Limite : entre 0,2 G et 0,5 G |
| Fréquence |
Cible : 2/3 de la fréquence de résonance Limite : < 100 Hz |
Primitives de chirp
Les primitives de chirp peuvent être décrites par les signaux d'entrée pour le niveau de tension et la fréquence de vibration. L'accélération que le moteur est capable de produire dans différentes plages de fréquences varie en fonction de la courbe de réponse en fréquence de l'actionneur. Les plages de fréquences et les niveaux de tension doivent être ajustés par appareil.
Primitive de montée lente
La montée lente est un balayage lent de l'amplitude et de la fréquence vers le haut avec un début doux et une intensité de vibration qui augmente de manière constante tout au long du balayage. Elle peut être implémentée par un balayage cohérent de l'amplitude et de la fréquence, à l'aide d'une plage de fréquences plus basse qui fonctionne hors résonance. La figure 9 montre les paramètres d'entrée et un exemple de profil d'accélération de sortie pour cette implémentation. (La ligne rouge correspond aux libellés d'amplitude à gauche et représente la variation de l'amplitude de vibration au fil du temps. La ligne bleue correspond aux libellés de fréquence à droite et représente la variation de la fréquence de vibration au fil du temps.)
Figure 9. Paramètres d'entrée et exemple de profil d'accélération de sortie pour la primitive de montée lente
Si la réponse en fréquence du moteur est limitée (pas assez forte en dehors de sa fréquence de résonance), une autre implémentation consiste à effectuer un balayage sinusoïdal de 1/2x à 1x la fréquence de résonance. La résonance du moteur contribue à atteindre le pic du signal à la fin.
| Paramètre | Consigne |
|---|---|
| Durée |
Cible : 500 ms Tolérance : 20 ms |
| Accélération de sortie maximale |
Cible : 0,5 G Limite : entre 0,5 G et 1 G |
| Fréquence |
Cible : 1/2 à 2/3 de la fréquence de résonance Autre : 1/2 à la fréquence de résonance |
Primitive de montée rapide
La montée rapide est un balayage plus rapide de l'amplitude et de la fréquence vers le haut avec un début doux et une intensité de vibration qui augmente de manière constante tout au long du balayage. Les cibles d'accélération de sortie et de fréquence de vibration doivent être les mêmes que celles de la primitive de montée lente, mais atteintes en moins de temps. La figure 10 montre les paramètres d'entrée de vibration et un exemple de profil d'accélération de sortie pour la primitive de montée lente. (La ligne rouge correspond aux libellés d'amplitude à gauche et représente la variation de l'amplitude de vibration au fil du temps. La ligne bleue correspond aux libellés de fréquence à droite et représente la variation de la fréquence de vibration au fil du temps.)
Figure 10. Paramètres d'entrée et exemple de profil d'accélération de sortie pour la primitive de montée rapide
| Paramètre | Consigne |
|---|---|
| Durée |
Cible : 150 ms Tolérance : 20 ms |
| Accélération de sortie maximale |
Cible : identique à Limite : identique à |
| Fréquence |
Cible : identique à Autre : identique à |
Primitive de descente rapide
La descente rapide est un balayage rapide de l'amplitude et de la fréquence vers le bas avec un début doux. Vous pouvez utiliser une fréquence plus élevée comme point de départ pendant que le moteur augmente pour atteindre l'accélération de sortie maximale. La fréquence doit diminuer de manière constante tout au long du balayage, même pendant le temps de montée. La figure 11 montre les paramètres d'entrée et un exemple de profil d'accélération de sortie pour cette implémentation. (La ligne rouge correspond aux libellés d'amplitude à gauche et représente la variation de l'amplitude de vibration au fil du temps. La ligne bleue correspond aux libellés de fréquence à droite et représente la variation de la fréquence de vibration au fil du temps.)
Figure 11. Paramètres d'entrée et exemple de profil d'accélération de sortie pour la primitive de descente rapide
| Paramètre | Consigne |
|---|---|
| Durée |
Cible : 100 ms Tolérance : 20 ms |
| Accélération de sortie maximale |
Cible : 1 G Limite : entre 0,5 G et 2 G |
| Fréquence |
Cible : 2 fois à 1 fois la fréquence de résonance |
Primitive de bruit sourd
Le bruit sourd est un effet percussif, grave et sourd qui simule la sensation physique de frapper sur du bois creux. Cette primitive fonctionne dans une plage de fréquences basse, semblable à la primitive de tic faible, pour donner plus de corps à l'effet. Vous pouvez implémenter la primitive de bruit sourd comme un balayage descendant de l'amplitude et de la fréquence dans une plage de fréquences plus basse (de préférence inférieure à 100 Hz). La figure 12 montre les paramètres d'entrée et un exemple de profil d'accélération de sortie pour cette implémentation. (La ligne rouge correspond aux libellés d'amplitude à gauche et représente la variation de l'amplitude de vibration au fil du temps. La ligne bleue correspond aux libellés de fréquence à droite et représente la variation de la fréquence de vibration au fil du temps.)
Figure 12. Paramètres d'entrée et exemple de profil d'accélération de sortie pour la primitive de bruit sourd
Si la réponse en fréquence du moteur est limitée, une autre implémentation consiste à commencer par un signal d'entraînement à pleine intensité à la fréquence de résonance et à descendre à la fréquence la plus basse possible qui reste perceptible. Cette approche peut nécessiter une augmentation de l'intensité du signal d'entraînement à la fréquence inférieure pour que la vibration soit ressentie.
| Paramètre | Consigne |
|---|---|
| Durée |
Cible : 300 ms Tolérance : 20 ms |
| Accélération de sortie maximale |
Cible : 0,25 G Limite : entre 0,2 G et 0,5 G |
| Fréquence |
Cible : 1/2 à 1/3 de la fréquence de résonance Autre : 1 fois à 1/2 de la fréquence de résonance |
Primitive de rotation
La rotation simule un mouvement de rotation rapide de haut en bas avec un léger accent au centre. La rotation peut être implémentée en balayant l'amplitude et la fréquence indépendamment, dans des directions opposées, puis en effectuant le mouvement inverse. Il est important d'utiliser une plage de fréquences plus basse (de préférence inférieure à 100 Hz). La figure 13 montre les paramètres d'entrée et un exemple de profil d'accélération de sortie pour cette implémentation. (La ligne rouge correspond aux libellés d'amplitude à gauche et représente la variation de l'amplitude de vibration au fil du temps. La ligne bleue correspond aux libellés de fréquence à droite et représente la variation de la fréquence de vibration au fil du temps.)
Nous vous recommandons d'appeler la primitive de rotation deux fois de suite ou trois fois dans les compositions pour obtenir une sensation de rotation et d'instabilité.
Si la réponse en fréquence du moteur est limitée, une autre implémentation consiste à effectuer un balayage sinusoïdal rapide de 1/2x à 1x la fréquence de résonance, puis à revenir en arrière. La résonance du moteur donne automatiquement un accent au signal au milieu.
Figure 13. Paramètres d'entrée et exemple de profil d'accélération de sortie pour la primitive de rotation
| Paramètre | Consigne |
|---|---|
| Durée |
Cible : 150 ms Tolérance : 20 ms |
| Accélération de sortie maximale |
Cible : 0,5 G Limite : entre 0,25 G et 0,75 G |
| Fréquence |
Cible : 2/3 à 1/3, puis retour à 1/2 de la fréquence de résonance Autre : 2/3 à 1 fois, puis retour à 1/2 de la fréquence de résonance |