Google se compromete a impulsar la igualdad racial para las comunidades afrodescendientes. Obtén información al respecto.

Fundación UX para Haptic Framework

Todas las mejoras del marco de Android basadas en la tecnología háptica están impulsadas por un conjunto de principios de UX que están evolucionando a la misma velocidad. Los principios actuales implican la sustitución de la vibración con amenidad y háptica claras, y la exploración háptica ricos.

Principios de UX

Figura 1. Principios actuales

API por año

Figura 2. hápticos APIs por año

Vibración zumbante

Se remonta a buscapersonas y teléfonos con funciones, de baja calidad, pero a base de vibraciones zumbador ERM alta eficiencia energética se han utilizado como un sustituto de timbre auditivo en modo silencioso. Los componentes de hardware heredados que producen ruidos audibles fuertes y desagradables pueden dañar la UX háptica al brindar impresiones de baja calidad (por ejemplo, un teléfono barato y roto).

Hápticos claros

Hápticos claro apoyo la sensación de cambios de estado discretas (por ejemplo, cambios binarios durante el encendido / apagado de proceso). Debido a la naturaleza de la affordance discreta, hápticos claras se generan como una única entidad (por ejemplo, un efecto háptico por un evento de entrada).

Android tiene como objetivo ofrecer hápticos claros con sensaciones fuertes pero agudas en lugar de sensaciones zumbantes o blandas.

Las constantes hápticas predefinidas que se crean para admitir hápticas claras incluyen las siguientes.

En 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

En VibrationEffect :

  • EFFECT_CLICK
  • EFFECT_DOUBLE_CLICK
  • EFFECT_HEAVY_CLICK
  • EFFECT_TICK

Desarrollar un conocimiento común entre los fabricantes de dispositivos y los desarrolladores es clave para mejorar la calidad general de la háptica en el ecosistema de Android. Utilice la lista de comprobación básica , evaluación de hardware y DDC . para obtener más información sobre la implementación háptica.

Presione y suelte

Figura 3. Si pulsa y suelta.

Hápticos ricos

Háptica ricos es una categoría háptica en crecimiento que va más allá de los efectos individuales a base de impulsos. Android tiene como objetivo admitir hápticos ricos con alta capacidad de composición y ajuste con un nivel fino de granularidad. Los siguientes casos de uso son compatibles con Android 11 o versiones anteriores.

Hápticos ricos

Figura 4. hápticos rico con textura deslizante

Arrastrar y deslizar

Figura 5. arrastrar y deslizar

Caso de uso 1: textura deslizante

Si se repite un efecto háptico mientras el dedo se desliza sobre una superficie táctil (por ejemplo, arrastrando, deslizando, explorando la superficie con textura háptica fantasma), los efectos hápticos repetidos son preferiblemente nítidos y sutiles.

Si el efecto individual es vibrante en lugar de nítido, es probable que los intervalos entre las repeticiones desaparezcan. El resultado es un zumbido largo, en lugar de múltiples señales discretas.

Si la amplitud no es lo suficientemente sutil, entonces la energía háptica percibida se acumula a través de la repetición, lo que resulta en hápticas abrumadoramente fuertes al final de la repetición.

Implementación de una textura háptica de superficie simple para gestos de deslizar y arrastrar

Uso CLOCK_TICK y TEXT_HANDLE_MOVE en HapticFeedbackConstants . Estas constantes predefinen características de repetición y amplitud.

Creando tu propio efecto

Para hacer su propio efecto, componer un diseño encadenando juntos secuencias de PRIMITIVE_CLICK y PRIMITIVE_TICK en VibrationEffect.Composition . Puede ajustar las características de la repetición y la escala de amplitud utilizando addPrimitive(int primitiveID, float scale, int delay) . El apoyo se basa en la CAP_COMPOSE_EFFECTS capacidad del HAL interfaz vibrador .

Caso de uso 2: Vibración prolongada con efecto de facilidad de entrada

La vibración larga es una vibración de amplitud suave que pasa de 0 a la amplitud objetivo. La vibración prolongada puede generar hápticos de atención fácilmente perceptibles. Sin embargo, una vibración prolongada y repentina puede asustar a los usuarios en un entorno silencioso y, a menudo, produce zumbidos audibles. Para generar una vibración larga más agradable, aplique el efecto de relajación al comienzo de la vibración larga. Esto produce una transición de amplitud suave que se construye hacia la amplitud objetivo.

Aplicar el efecto de facilidad de entrada

  1. Comprobar las capacidades del hardware de control de amplitud con android.os.Vibrator.hasAmplitudeControl() .

    • El resultado tiene que ser true para producir facilidad en efecto con amplitud variable.
  2. Uso VibrationEffect . createWaveform(timings[], amplitudes[], int repeat) .

  3. Ajuste la serie de timings[] y amplitudes[] para generar la facilidad en la curva, como se muestra en la Figura 6.

Vibración larga

Figura 6. larga vibración facilidad en curva

Caso de uso 3: hápticos acoplados por audio

Háptica-audio junto hápticos son patrones, junto con el ritmo del audio para llamar la atención del usuario.

Hápticos acoplados por audio: beneficios

Para implementar hápticos acoplados por audio, combine hápticos claros con vibraciones largas. Las sensaciones hápticas fuertes pero cortas de las hápticas claras producen patrones rítmicos discretos. Cuando se combina con los altos niveles de estímulos que proporciona la vibración prolongada, esto hace un gran trabajo para llamar la atención del usuario.

Es importante tener en cuenta los patrones rítmicos de las sensaciones. Si no hay sentido del ritmo, el usuario percibe las sensaciones hápticas como zumbidos aleatorios y tiende a ignorarlos.

Pareja de audio

Figura 7. par de audio ejemplo háptica

Hápticos acoplados por audio: consejos para implementar

La implementación de hápticos acoplados por audio requiere una comprensión básica de la reproducción de contenido de los canales de audio y hápticos. Tenga en cuenta las siguientes cosas.

  • Utilice los MediaPlayer o SoundPool clases.

    • Activos en formato OGG con una clave de los metadatos especial ( ANDROID_HAPTIC seguido por un número de canales de hápticos) indican la presencia de datos hápticos y reproducción con MediaPlayer y SoundPool .
  • Señalar el apoyo de hápticas y reproducción de audio en audio_policy_configuration.xml .

    • Utilizar un perfil de salida con el canal háptica AUDIO_CHANNEL_OUT_HAPTIC_A|B .
    • Para un flujo de salida con canales hápticos, recuerde que los canales hápticos se presentan como canales adicionales en los datos.

    Ejemplo

    Si la máscara de canal para el flujo de salida tiene este aspecto:

    AUDIO_CHANNEL_OUT_STEREO_HAPTIC_A

    Entonces, cada muestra debería verse así:

    AUDIO_LEFT_CHANNEL,AUDIO_RIGHT_CHANNEL,HAPTIC_CHANNEL_A

  • Cambio AudioAttributes.Builder( ).setHapticChannelsMuted(boolean muted)

    a false para jugar el canal háptica.

    • Por defecto, los canales hápticos están silenciados ( true ).
    • Los casos de uso incluyen tonos de llamada y sonidos de interfaz de usuario con retroalimentación y hápticos sincrónicos.
  • El Vibrador HAL debe implementar un soporte de control externo.

Hápticos acoplados por audio

Figura 8. ejecución hápticos de audio acoplado

Hápticos acoplados por audio: Generador háptico

El HapticGenerator es un efecto de audio introducido en Android 12 que pueden generar datos háptica de un canal de audio y reproducirlo en tiempo real como háptica-audio acoplada . El efecto se aplica a la AudioTrack como se describe en la Figura 9.

Haptic Generator architecture

Arquitectura Figura 9. Haptic Generador

Para asegurarse de que el algoritmo de su generador háptico genere hápticos de alta calidad, sintonice el algoritmo de generación con el motor del vibrador del dispositivo ajustando los parámetros que configuran la cadena de filtros que aplica a las formas de onda de audio. Esta sección describe estos parámetros en detalle y explica cómo ajustarlos a las especificaciones de su hardware.

  1. Frecuencia de resonancia para filtro de paso de banda

    La frecuencia de resonancia del vibrador es la frecuencia a la que un actuador háptico tiene una salida máxima. Este parámetro ajusta un anti-resonador para aplanar parcialmente la función de transferencia de respuesta, con el fin de obtener un ancho de banda más amplio. El marco Android vincula automáticamente este valor a la salida del método vibrador HAL IVibrator.getResonantFrequency .

    El valor predeterminado para este parámetro es de 150 Hz. Esto se puede modificar en el código aquí .

  2. Potencia de normalización para envolvente lenta

    Este parámetro determina el exponente en la normalización parcial (control automático de ganancia). Su valor por defecto es -0,8, lo que significa que 80% de la variación del rango dinámico se elimina por este paso de control de ganancia. Esto se puede modificar en el código aquí .

  3. Factor Q para filtro de parada de banda

    El factor de calidad del vibrador (factor Q) está determinado por dos parámetros:

    • El Zero Q, el factor de calidad de los ceros en el filtro de parada de banda que cancela parcialmente la resonancia.

    • El Polo Q, el factor de calidad de los polos en el filtro de parada de banda.

    La relación de esos dos valores limita la supresión de resonancia para potenciar las frecuencias más bajas y ampliar la respuesta del algoritmo. Por ejemplo, los valores por defecto de 8 para el Zero Q y 4 para el polo Q producen una relación de 2, lo que limita la supresión de resonancia en un factor de 2 (6 dB). El marco Android une ambos valores a la salida del método vibrador HAL IVibrator.getQFactor .

    Si los valores predeterminados no tienen en cuenta la amortiguación de la fuerza del motor en su dispositivo, le recomendamos que modifique ambos valores al mismo tiempo y aumente o disminuya ambos. La proporción de cero a Q Q Polo debe ser mayor que 1. Esto se puede modificar en el código aquí .

  4. Frecuencia de esquina para distorsión

    La frecuencia de esquina se aplica mediante un filtro de paso bajo que suprime la vibración de bajo nivel y mejora los niveles más altos mediante una distorsión cúbica. Por defecto es 300Hz. Esto se puede modificar en el código aquí .

  5. Ganancia de entrada y umbral de cubo para distorsión

    Estos parámetros son utilizados por un filtro de distorsión no lineal aplicado a la forma de onda de entrada que amortigua la amplitud de las señales de frecuencia más baja y aumenta las de frecuencia más alta.

    • El valor predeterminado para el factor de ganancia de entrada es 0,3.
    • El valor predeterminado para el umbral de cubo es 0,1.

    Recomendamos modificar ambos valores a la vez. Se pueden encontrar en el código aquí .

    Para obtener más información acerca de la función aplicada por este filtro, consulte la aplicación disponible aquí . Para obtener más información sobre cómo estos dos parámetros influyen en la salida, recomendamos trazar las respuestas de frecuencia de los filtros y observar cómo cambian las respuestas de frecuencia con los diferentes valores de los parámetros.

  6. Ganancia de salida para distorsión

    Este parámetro controla la amplitud de vibración final. Es una ganancia final aplicada después de un limitador suave que los límites de vibración amplitudes a menos de 1. Su valor por defecto es 1.5, y puede ser modificada en el código aquí . Si la vibración es demasiado sutil, aumente el valor. Si puede escuchar el traqueteo del hardware del actuador, disminuya el valor.