Implémenter des constantes et des primitives

Les constantes et primitives haptiques sont définies par le HAL du vibreur et mappées par le framework Android sur des API publiques. Effectuez ces vérifications pour déterminer si votre appareil répond aux conditions minimales requises pour implémenter la haptique:

Organigramme du processus d'implémentation de la haptique

Figure 2. Implémenter des effets

Organigramme des étapes d'implémentation des primitives

Figure 3. Implémenter des primitives

Implémenter des constantes

Les constantes haptiques de VibrationEffect peuvent être utilisées par les développeurs via VibrationEffect.createPredefined(). Vérifiez l'état de l'implémentation des constantes haptiques suivantes.

Constantes haptiques Emplacements et résumés
EFFECT_TICK, EFFECT_CLICK, EFFECT_HEAVY_CLICK, EFFECT_DOUBLE_CLICK Classe VibrationEffect
Les 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 plutôt la notion de niveaux d'énergie, tels que EFFECT_CLICK et EFFECT_HEAVY_CLICK, qui sont appelés par createPredefined().

Les vibrations alternatives décrites ci-dessous sont effectuées sur les appareils qui n'implémentent pas les constantes VibrationEffect. Nous vous recommandons de mettre à jour ces configurations pour optimiser les performances sur ces appareils.

  • EFFECT_CLICK

    Vibration de forme d'onde créée avec VibrationEffect.createWaveform et les délais configurés sur frameworks/base/core/res/res/values/config.xml##config_virtualKeyVibePattern.

  • EFFECT_HEAVY_CLICK

    Vibration de forme d'onde créée avec VibrationEffect.createWaveform et les délais configurés sur frameworks/base/core/res/res/values/config.xml##config_longPressVibePattern.

    • EFFECT_DOUBLE_CLICK

    Vibration de forme d'onde créée avec VibrationEffect.createWaveform et les temps (0, 30, 100, 30).

  • EFFECT_TICK

    Vibration de forme d'onde créée avec VibrationEffect.createWaveform et les délais configurés sur frameworks/base/core/res/res/values/config.xml##config_clockTickVibePattern.

Organigramme des étapes à suivre pour tester le retour haptique

Figure 4. Implémenter des constantes de retour

Les constantes haptiques de HapticFeedbackConstants peuvent être utilisées par les développeurs via View.performHapticFeedback(). Vérifiez l'état des constantes de retour publics 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 HapticFeedbackConstants
Les constantes haptiques dans HapticFeedbackConstants aident les événements d'entrée avec certains éléments d'interface utilisateur, tels que KEYBOARD_PRESS etKEYBOARD_RELEASE, qui sont appelés parperformHapticFeedback().

Implémenter des primitives

Les primitives haptiques de 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, TICK et LOW_TICK.

  • Primitives de chirp:primitives dont l'amplitude et la fréquence varient, généralement avec une durée plus longue que les primitives courtes. Il s'agit de SLOW_RISE, QUICK_RISE, QUCK_FALL, THUD et SPIN.

Primitives courtes

Les primitives courtes peuvent être décrites par le profil d'accélération de la sortie du moteur du vibreur. 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 la section Configurer l'équipement de test.

Une métrique de qualité utile pour les vibrations courtes est le rapport de pulsation sur sonnerie (PRR), illustré à la figure 5. Le PRR est défini comme le rapport entre le principal pulse (impulsion principale), défini par le signal dans la fenêtre de durée où l'amplitude diminue à 10% de l'amplitude de pointe, et le ring pulse (impulsion en anneau), défini par le signal où l'amplitude diminue de 10% de l'amplitude de pointe à moins de 1% de l'amplitude de pointe. La formule de la PRR est la suivante:

$$ \text{Pulse to ring ratio (PRR)} = 20log_{10}\frac{\text{RMS (main pulse)}}{\text{RMS (ring)}} $$

Pour en savoir plus sur la PRR, consultez la section Analyser la forme d'onde. Pour en savoir plus sur l'analyse et la comparaison des résultats, consultez la section Comparer les résultats à l'aide de la carte des performances.

Rapport pouls/sonnerie

Figure 5. Définition du rapport entre le pouls et la sonnerie

Appliquez des primitives courtes en tant que commentaires d'entrée utilisateur ou en les jouant 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 en succession rapide. 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 bas" 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 près de la fréquence de résonance d'un appareil pour atteindre une sortie maximale en peu de temps. Il est plus fort et plus profond que les autres primitives, et fonctionne à une intensité maximale.

Si disponible, utilisez la survitesse 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 accélérer l'accélération. La figure 6 illustre un exemple de profil d'accélération de sortie pour la primitive de clic:

Profil d'accélération de sortie de la primitive

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 Go

Fréquence À peu près à la fréquence de résonance

Primitive "tick" (tic)

La primitive "tick" est un effet court et net 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 courte queue. 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" :

Profil d&#39;accélération de sortie de la primitive de coche

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 CLICK, 1 G

Limite: entre 0,5 Go et 1 Go

Fréquence

Cible: 2 fois la fréquence de résonance

Limite: < 500 Hz

Primitive de faible tick

La primitive de clignotement faible est une version plus douce et plus faible d'un clignotement léger, qui fonctionne à 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 faible, destiné à être utilisé de manière répétitive pour obtenir des commentaires dynamiques. 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 présente un exemple de profil d'accélération de sortie pour la primitive de faible fréquence d'horloge:

Profil d&#39;accélération de sortie de primitive à faible &quot;tic&quot;

Figure 8. Exemple de profil d'accélération de sortie pour la primitive de faible fréquence de rafraîchissement

Paramètre Consigne
Durée

Cible: 12 ms

Limite: < 30 ms

Accélération de sortie maximale

Cible: 1/4 de TICK, 0,25 Go

Limite: entre 0,2 Go et 0,5 Go

Fréquence

Cible: fréquence de résonance 2/3

Limite: < 100 Hz

Primitives 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 peut produire à 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 pour chaque appareil.

Primitive de montée lente

La montée lente est une montée lente de l'amplitude et de la fréquence vers le haut avec un début doux et une intensité de vibration croissante tout au long de la balayage. Il peut être implémenté par un balayage cohérent de l'amplitude et de la fréquence, à l'aide d'une plage de fréquences inférieure qui fonctionne en dehors de la 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 étiquettes d'amplitude à gauche et représente l'évolution de l'amplitude des vibrations au fil du temps. La ligne bleue correspond aux étiquettes de fréquence à droite et représente la variation de la fréquence de vibration au fil du temps.)

Paramètres d&#39;entrée et profil d&#39;accélération de sortie pour la primitive de montée lente

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 en sinus de 1/2 à 1 fois 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 Go

Limite: entre 0,5 Go et 1 Go

Fréquence

Cible: 1/2 à 2/3 de la fréquence de résonance

Autre: 1/2 de la fréquence de résonance

Primitive de montée rapide

La montée rapide correspond à une amplitude et une fréquence plus rapides vers le haut, avec un début doux et une intensité de vibration croissante tout au long de la 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, obtenues sur une durée plus courte. 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 étiquettes d'amplitude à gauche et représente l'évolution de l'amplitude des vibrations au fil du temps. La ligne bleue correspond aux étiquettes de fréquence à droite et représente la variation de la fréquence de vibration au fil du temps.)

Paramètres d&#39;entrée et profil d&#39;accélération de sortie pour la primitive de montée rapide

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 à SLOW_RISE

Limite: identique à SLOW_RISE

Fréquence

Cible: identique à SLOW_RISE

Alternative: identique à SLOW_RISE

Primitive de chute rapide

La chute 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 lorsque le moteur augmente progressivement pour atteindre l'accélération de sortie maximale. La fréquence doit diminuer de manière cohérente tout au long de la 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 étiquettes d'amplitude à gauche et représente l'évolution de l'amplitude des vibrations au fil du temps. La ligne bleue correspond aux étiquettes de fréquence à droite et représente la variation de la fréquence de vibration au fil du temps.)

Paramètres d&#39;entrée et profil d&#39;accélération de sortie pour la primitive de chute rapide

Figure 11 : Paramètres d'entrée et exemple de profil d'accélération de sortie pour la primitive de chute 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 Go et 2 Go

Fréquence

Cible: 2 à 1 fois la fréquence de résonance

Primitive "Thud"

Le "thud" est un effet percutant, bas et percutant 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 faible "tic", pour donner plus de corps à l'effet. Vous pouvez implémenter la primitive "thud" en effectuant un balayage descendant de l'amplitude et de la fréquence dans une plage de fréquences inférieure (de préférence inférieure à 100 Hz). La figure 12 présente 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 étiquettes d'amplitude à gauche et représente l'évolution de l'amplitude des vibrations au fil du temps. La ligne bleue correspond aux étiquettes de fréquence à droite et représente la variation de la fréquence de vibration au fil du temps.)

Paramètres d&#39;entrée et profil d&#39;accélération de sortie pour la primitive thud

Figure 12. Paramètres d'entrée et exemple de profil d'accélération de sortie pour la primitive "thud"

Si la réponse en fréquence du moteur est limitée, une autre implémentation consiste à commencer avec un signal d'entraînement à pleine intensité à la fréquence de résonance et à passer à la fréquence la plus basse possible qui peut encore être perçue. Cette approche peut nécessiter une augmentation de l'intensité du signal de commande à 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 Go et 0,5 Go

Fréquence

Cible: 1/2 à 1/3 de la fréquence de résonance

Alternative: 1 à 1/2 de la fréquence de résonance

Primitive de rotation

La rotation simule un élan 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 étiquettes d'amplitude à gauche et représente l'évolution de l'amplitude des vibrations au fil du temps. La ligne bleue correspond aux étiquettes 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/2 à 1 fois la fréquence de résonance et inversement. La résonance du moteur donne automatiquement un accent au milieu du signal.

Paramètres d&#39;entrée et profil d&#39;accélération de sortie pour la primitive de rotation

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 Go

Limite: entre 0,25 Go et 0,75 Go

Fréquence

Cible: 2/3 à 1/3, puis retour à 1/2 de la fréquence de résonance

Autre option: 2/3 à 1 x, puis retour à 1/2 de la fréquence de résonance