Implementa constantes y primitivas

La HAL del vibrador define las constantes y los elementos primitivos hápticos, y el framework de Android los asigna a las APIs públicas. Realiza estas verificaciones para determinar si tu dispositivo cumple con los requisitos mínimos para implementar la tecnología háptica:

Diagrama de flujo del proceso de implementación de la tecnología táctil

Figura 2: Implementa efectos

Diagrama de flujo de los pasos para implementar elementos básicos

Figura 3: Implementación de primitivas

Implementa constantes

Los desarrolladores pueden usar las constantes hápticas en VibrationEffect a través de VibrationEffect.createPredefined(). Consulta el estado de implementación de las siguientes constantes hápticas.

Constantes de respuesta táctil Ubicaciones y resúmenes
EFFECT_TICK, EFFECT_CLICK, EFFECT_HEAVY_CLICK, EFFECT_DOUBLE_CLICK VibrationEffect clase
Las constantes hápticas en VibrationEffect no incluyen ninguna noción de eventos de entrada y no tienen elementos de IU. Las constantes incluyen la noción de niveles de energía, como EFFECT_CLICK y EFFECT_HEAVY_CLICK, a los que se llama con createPredefined().

Las vibraciones alternativas que se describen a continuación se realizan en dispositivos que no implementan las constantes de VibrationEffect. Se recomienda actualizar estos parámetros de configuración para que tengan el mejor rendimiento en esos dispositivos.

  • EFFECT_CLICK

    Vibración de forma de onda creada con VibrationEffect.createWaveform y los tiempos configurados en frameworks/base/core/res/res/values/config.xml##config_virtualKeyVibePattern.

  • EFFECT_HEAVY_CLICK

    Vibración de forma de onda creada con VibrationEffect.createWaveform y los tiempos configurados en frameworks/base/core/res/res/values/config.xml##config_longPressVibePattern.

    • EFFECT_DOUBLE_CLICK

    Vibración de forma de onda creada con VibrationEffect.createWaveform y los tiempos (0, 30, 100, 30).

  • EFFECT_TICK

    Vibración de forma de onda creada con VibrationEffect.createWaveform y los tiempos configurados en frameworks/base/core/res/res/values/config.xml##config_clockTickVibePattern.

Diagrama de flujo de los pasos para probar la respuesta háptica

Figura 4: Implementa constantes de comentarios

Los desarrolladores pueden usar las constantes hápticas en HapticFeedbackConstants a través de View.performHapticFeedback(). Verifica el estado de las siguientes constantes de comentarios públicos.

Constantes de respuesta táctil Ubicaciones y resúmenes
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 Clase HapticFeedbackConstants
Las constantes hápticas en HapticFeedbackConstants ayudan a los eventos de entrada con ciertos elementos de la IU, como KEYBOARD_PRESS y KEYBOARD_RELEASE, a los que llama performHapticFeedback().

Implementa primitivas

Las primitivas hápticas en VibrationEffect.Composition tienen una intensidad escalable que los desarrolladores pueden usar a través de addPrimitive(int primitiveId, float scale, int delay). Las primitivas se pueden dividir en dos categorías:

  • Primitivas cortas: Son primitivas con una duración corta, por lo general, menos de 20 ms. Estas son CLICK, TICK y LOW_TICK.

  • Primitivas de Chirp: Son primitivas con amplitud y frecuencia variables, por lo general, con una duración más larga que las primitivas cortas. Estos son SLOW_RISE, QUICK_RISE, QUCK_FALL, THUD y SPIN.

Primitivas de Short

Las primitivas cortas se pueden describir con el perfil de aceleración de salida del motor del vibrador. La frecuencia absoluta utilizada varía para cada primitiva, según la frecuencia de resonancia del actuador. Consulta Cómo configurar el equipo de prueba para obtener más información sobre la configuración del hardware y las herramientas para medir la salida.

Una métrica de calidad valiosa para las vibraciones cortas es la proporción de pulsos a timbre (PRR), que se muestra en la Figura 5. El PRR se define como la proporción entre el pulso principal, definido por el valor de la señal dentro del período en el que la amplitud disminuye hasta el 10% de la amplitud máxima, y el pulso de timbre, definido por el valor de la señal en el que la amplitud disminuye del 10% de la amplitud máxima a menos del 1% de la amplitud máxima. La fórmula para el PRR es la siguiente:

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

Para obtener más información sobre la PRR, consulta Cómo analizar la forma de onda y, para obtener más información sobre cómo analizar y comparar los resultados, consulta Cómo comparar los resultados con el mapa de rendimiento.

Proporción de pulsaciones a llamadas

Figura 5: Definición de la proporción de pulsaciones y llamadas

Aplica primitivas cortas como comentarios de entrada del usuario o reprodúcelas en composiciones más largas para crear texturas suaves. Esto significa que, por lo general, se activan con frecuencia y se reproducen en rápida sucesión. La intensidad percibida de una sola primitiva corta puede aumentar la intensidad del efecto general. Por este motivo, calibra una sola marca o una primitiva de pocas marcas con una composición más grande, por ejemplo, 100 marcas consecutivas.

Primitiva de clic

El clic primitivo es un efecto fuerte y nítido que suele operar cerca de la frecuencia de resonancia de un dispositivo para alcanzar la máxima potencia en un corto período. Es más fuerte y profunda que las otras primitivas, y se ejecuta con la máxima intensidad.

Si está disponible, usa la sobremarcha del motor al principio y el frenado activo al final para lograr un tiempo de subida y bajada del motor corto. En el caso de algunos motores, usar una onda cuadrada en lugar de una onda sinusoidal puede lograr una aceleración más rápida. En la figura 6, se muestra un ejemplo de perfil de aceleración de salida para el componente primitivo de clic:

Haz clic en el perfil de aceleración de salida de la primitiva.

Figura 6: Ejemplo de perfil de aceleración de salida para la primitiva de clic

Parámetro Lineamiento
Duración

Objetivo: 12 ms

Límite: < 30 ms

Aceleración de salida máxima

Objetivo: 2 G

Límite: > 1 G

Frecuencia Aproximadamente en la frecuencia de resonancia

Primitiva de marca (marca clara)

El elemento primitivo de tic es un efecto corto y nítido que suele operar en un rango de frecuencia más alto. Este elemento primitivo también se puede describir como un clic de intensidad media a una frecuencia más alta con una cola corta. La misma guía se aplica para lograr un tiempo de subida corto con sobremarcha del motor o una onda cuadrada para el inicio inicial, y un frenado activo en el desplazamiento. En la figura 7, se muestra un ejemplo de un perfil de aceleración de salida para la primitiva de marca:

Perfil de aceleración del componente de salida de la marca

Figura 7: Ejemplo de perfil de aceleración de salida para la primitiva de marca

Parámetro Lineamiento
Duración

Objetivo: 5 ms

Límite: < 20 ms

Aceleración de salida máxima

Objetivo: La mitad de CLICK, 1 G

Límite: Entre 0.5 G y 1 G

Frecuencia

Objetivo: 2 veces la frecuencia de resonancia

Límite: < 500 Hz

Primitiva de baja resolución

El low tick primitivo es una versión más suave y débil de un light tick, que opera en un rango de frecuencia más bajo para proporcionar más cuerpo al efecto. Este elemento primitivo también se puede describir como un clic de intensidad media a una frecuencia más baja, que se puede usar de forma repetitiva para obtener comentarios dinámicos. La misma guía se aplica para lograr un tiempo de subida corto con sobremarcha del motor o una onda cuadrada para el inicio inicial. En la figura 8, se muestra un ejemplo de perfil de aceleración de salida para el elemento primitivo de baja resolución:

Perfil de aceleración de salida de primitivas de baja resolución

Figura 8: Ejemplo de perfil de aceleración de salida para una primitiva de baja resolución

Parámetro Lineamiento
Duración

Objetivo: 12 ms

Límite: < 30 ms

Aceleración de salida máxima

Objetivo: 1/4 de un TICK, 0.25 G

Límite: Entre 0.2 G y 0.5 G

Frecuencia

Objetivo: 2/3 de la frecuencia de resonancia

Límite: < 100 Hz

Primitivas de Chirp

Las primitivas de Chirp se pueden describir con los parámetros de entrada de nivel de voltaje y frecuencia de vibración. La aceleración que el motor puede generar en diferentes rangos de frecuencia varía según la curva de respuesta de frecuencia del actuador. Los rangos de frecuencia y los niveles de voltaje deben ajustarse para cada dispositivo.

Primitiva de aumento lento

El aumento lento es un barrido lento de amplitud y frecuencia hacia arriba con un inicio suave y una intensidad de vibración que aumenta de forma constante a lo largo del barrido. Se puede implementar con un barrido coherente de la amplitud y la frecuencia, con un rango de frecuencia más bajo que funcione fuera de la resonancia. En la figura 9, se muestran los parámetros de entrada y un ejemplo de perfil de aceleración de salida para esta implementación. (La línea roja coincide con las etiquetas de amplitud de la izquierda y representa cómo varía la amplitud de la vibración con el tiempo. La línea azul coincide con las etiquetas de frecuencia de la derecha y representa cómo varía la frecuencia de vibración con el tiempo.

Parámetros de entrada y perfil de aceleración de salida para la primitiva de aumento lento

Figura 9: Parámetros de entrada y ejemplo de perfil de aceleración de salida para la primitiva de aumento lento

Si la respuesta de frecuencia del motor es limitada (no es lo suficientemente fuerte fuera de su frecuencia de resonancia), una implementación alternativa es un barrido sinusoidal de 1/2x a 1x la frecuencia de resonancia. La resonancia del motor contribuye a alcanzar el pico de la señal al final.

Parámetro Lineamiento
Duración

Objetivo: 500 ms

Tolerancia: 20 ms

Aceleración de salida máxima

Objetivo: 0.5 G

Límite: Entre 0.5 G y 1 G

Frecuencia

Objetivo: De 1/2 a 2/3 de la frecuencia de resonancia

Alternativa: De 1/2 a la frecuencia de resonancia

Primitiva de aumento rápido

El aumento rápido es un barrido de amplitud y frecuencia más rápido hacia arriba con un inicio suave y una intensidad de vibración que aumenta de forma constante en todo el barrido. Los objetivos de aceleración y frecuencia de vibración de salida deben ser los mismos que los de la primitiva de aumento lento, pero se alcanzan en un período más corto. En la figura 10, se muestran los parámetros de entrada de vibración y un ejemplo de perfil de aceleración de salida para el elemento primitivo de aumento lento. (La línea roja coincide con las etiquetas de amplitud de la izquierda y representa cómo varía la amplitud de la vibración con el tiempo. La línea azul coincide con las etiquetas de frecuencia de la derecha y representa cómo varía la frecuencia de vibración con el tiempo.

Parámetros de entrada y perfil de aceleración de salida para la primitiva de aumento rápido

Figura 10: Parámetros de entrada y ejemplo de perfil de aceleración de salida para la primitiva de aumento rápido

Parámetro Lineamiento
Duración

Objetivo: 150 ms

Tolerancia: 20 ms

Aceleración de salida máxima

Objetivo: Igual que en SLOW_RISE

Límite: Igual que SLOW_RISE

Frecuencia

Objetivo: Igual que en SLOW_RISE

Alternativa: Igual que SLOW_RISE

Primitiva de caída rápida

La caída rápida es un barrido descendente rápido de amplitud y frecuencia con un inicio suave. Puedes usar una frecuencia más alta como punto de partida mientras el motor aumenta la velocidad para alcanzar la aceleración máxima de salida. La frecuencia debe disminuir de forma constante en todo el barrido, incluso durante el tiempo de subida. En la figura 11, se muestran los parámetros de entrada y un ejemplo de perfil de aceleración de salida para esta implementación. (La línea roja coincide con las etiquetas de amplitud de la izquierda y representa cómo varía la amplitud de la vibración con el tiempo. La línea azul coincide con las etiquetas de frecuencia de la derecha y representa cómo varía la frecuencia de vibración con el tiempo.

Parámetros de entrada y perfil de aceleración de salida para la primitiva de caída rápida

Figura 11: Parámetros de entrada y ejemplo de perfil de aceleración de salida para la primitiva de caída rápida

Parámetro Lineamiento
Duración

Objetivo: 100 ms

Tolerancia: 20 ms

Aceleración de salida máxima

Objetivo: 1 G

Límite: Entre 0.5 G y 2 G

Frecuencia

Objetivo: 2 veces a 1 vez la frecuencia de resonancia

Primitiva de golpe

El golpe es un efecto percusivo, bajo y con golpes que simula la sensación física de golpear madera hueca. Esta primitiva opera en un rango de frecuencia baja, similar a la primitiva de tic bajo, para proporcionar más cuerpo al efecto. Puedes implementar la primitiva de golpe seco como un barrido descendente de amplitud y frecuencia en un rango de frecuencia más bajo (preferentemente, menos de 100 Hz). En la figura 12, se muestran los parámetros de entrada y un ejemplo de perfil de aceleración de salida para esta implementación. (La línea roja coincide con las etiquetas de amplitud de la izquierda y representa cómo varía la amplitud de la vibración con el tiempo. La línea azul coincide con las etiquetas de frecuencia de la derecha y representa cómo varía la frecuencia de vibración con el tiempo.

Parámetros de entrada y perfil de aceleración de salida para el elemento primitivo de golpe

Figura 12: Parámetros de entrada y ejemplo de perfil de aceleración de salida para la primitiva de golpe

Si la respuesta de frecuencia del motor es limitada, una implementación alternativa es comenzar con una señal de transmisión de intensidad completa en la frecuencia resonante y reducirla a la frecuencia más baja posible que aún se pueda percibir. Este enfoque podría requerir un aumento de la intensidad de la señal de conducción en la frecuencia más baja para que se sienta la vibración.

Parámetro Lineamiento
Duración

Objetivo: 300 ms

Tolerancia: 20 ms

Aceleración de salida máxima

Objetivo: 0.25 G

Límite: Entre 0.2 G y 0.5 G

Frecuencia

Objetivo: De 1/2 a 1/3 de la frecuencia de resonancia

Alternativa: De 1 a 1/2 de la frecuencia de resonancia

Primitiva de giro

El giro simula un impulso de giro rápido hacia arriba y hacia abajo con un ligero acento en el centro. El giro se puede implementar barriendo la amplitud y la frecuencia de forma independiente, en direcciones opuestas y seguido del movimiento inverso. Es importante usar un rango de frecuencia más bajo (preferentemente, menos de 100 Hz). En la figura 13, se muestran los parámetros de entrada y un ejemplo de perfil de aceleración de salida para esta implementación. (La línea roja coincide con las etiquetas de amplitud de la izquierda y representa cómo varía la amplitud de la vibración con el tiempo. La línea azul coincide con las etiquetas de frecuencia de la derecha y representa cómo varía la frecuencia de vibración con el tiempo.

Recomendamos que el elemento primitivo de rotación se llame dos veces seguidas o tres veces en las composiciones para lograr una sensación de rotación y de inestabilidad.

Si la respuesta de frecuencia del motor es limitada, una implementación alternativa es realizar un barrido sinusoidal rápido desde 1/2x hasta 1x la frecuencia de resonancia y viceversa. La resonancia del motor le da automáticamente al sonido un acento en el medio.

Parámetros de entrada y perfil de aceleración de salida para la primitiva de rotación

Figura 13: Parámetros de entrada y ejemplo del perfil de aceleración de salida para la primitiva de giro

Parámetro Lineamiento
Duración

Objetivo: 150 ms

Tolerancia: 20 ms

Aceleración de salida máxima

Objetivo: 0.5 G

Límite: Entre 0.25 G y 0.75 G

Frecuencia

Objetivo: De 2/3 a 1/3 y, luego, de vuelta a 1/2 de la frecuencia de resonancia

Alternativa: De 2/3 a 1x y, luego, volver a 1/2 de la frecuencia de resonancia