Implémenter des constantes et des primitives

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 :

Organigramme du processus d'implémentation du retour 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 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 classe
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 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_CLICK

    Vibration de forme d'onde créée avec VibrationEffect.createWaveform et les timings 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 timings 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 timings (0, 30, 100, 30).

  • EFFECT_TICK

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

Organigramme des étapes de test du retour haptique

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 HapticFeedbackConstants
Les 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, TICK et LOW_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, 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 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 :

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

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.

Ratio d'impulsion/sonnerie

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 :

Cliquer sur le profil d'accélération de la sortie 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 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 :

Profil d&#39;accélération de la sortie primitive de la 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 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 :

Profil d&#39;accélération de la sortie primitive à faible nombre de ticks

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 TICK, 0,25 G

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.)

Paramètres d&#39;entrée et profil d&#39;accélération de sortie pour le primitif 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 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.)

Paramètres d&#39;entrée et profil d&#39;accélération de sortie pour le primitif d&#39;augmentation 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

Autre : identique à SLOW_RISE

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.)

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

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.)

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

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.

Paramètres d&#39;entrée et profil d&#39;accélération de sortie pour le primitif 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 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