UX Foundation для Haptic Framework

Все улучшения платформы Android, основанные на тактильных ощущениях, основаны на наборе принципов UX, которые развиваются с одинаковой скоростью. Текущие принципы включают замену жужжащих вибраций четкими тактильными ощущениями и изучение насыщенных тактильных ощущений .

UX-принципы

Рисунок 1. Текущие принципы

В следующей таблице перечислены все доступные тактильные API.

API Методы Год добавления
android.view.HapticFeedbackConstants
  • CONTEXT_CLICK
  • CLOCK_TICK
  • ВИРТУАЛЬНЫЙ_КЛЮЧ
  • KEYBOARD_TAP
  • ДОЛГОЕ НАЖАТИЕ
До 2016 г.
  • KEYBOARD_PRESS
  • KEYBOARD_RELEASE
  • TEXT_HANDLE_MOVE
  • VIRTUAL_KEY_RELEASE
2017 (Андроид 8)
  • ПОДТВЕРЖДАТЬ
  • ОТКЛОНЯТЬ
  • GESTURE_START
  • GESTURE_END
2020 (Андроид 11)
android.View
  • выполнить тактильную обратную связь ()
До 2016 г.
android.os.Вибратор
  • вибрировать()
  • имеетвибратор()
До 2016 г.
  • hasAmplitudeControl()
2017 (Андроид 8)
  • areAllEffectsSupported()
  • areAllPrimitivesSupported()
  • areEffectsSupported()
  • arePrimitivesSupported()
2020 (Андроид 11)
android.os.VibrationEffect
  • создатьВаншот()
  • создать форму волны ()
2017 (Андроид 8)
  • EFFECT_TICK
  • EFFECT_CLICK
  • EFFECT_HEAVY_CLICK
  • EFFECT_DOUBLE_CLICK
  • создать предопределенное ()
2019 (Андроид 10)
android.os.VibrationEffect.Composition
  • PRIMITIVE_TICK
  • PRIMITIVE_CLICK
  • добавитьПримитив()
  • составить()
2020 (Андроид 11)
android.media.AudioAttributes.Builder
  • setHapticChannelsMuted()
2019 (Андроид 10)

Шумная вибрация

Начиная с пейджеров и обычных телефонов, низкокачественные, но энергоэффективные вибрации на основе зуммера ERM использовались в качестве замены слухового звонка в беззвучном режиме . Устаревшие аппаратные компоненты, производящие громкие и неприятные звуковые шумы, могут повредить тактильному UX, создав впечатление низкого качества (например, дешевый сломанный телефон).

Четкие тактильные ощущения

Четкие тактильные ощущения поддерживают ощущение дискретных изменений состояния (например, бинарных изменений во время включения/выключения питания). Из-за природы дискретной возможности четкие тактильные ощущения генерируются как единое целое (например, один тактильный эффект на одно входное событие).

Android стремится обеспечить четкие тактильные ощущения с сильными, но резкими ощущениями, а не с шумными или мягкими ощущениями.

Предопределенные тактильные константы, созданные для поддержки четких тактильных ощущений, включают следующее.

В 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

В VibrationEffect :

  • EFFECT_CLICK
  • EFFECT_DOUBLE_CLICK
  • EFFECT_HEAVY_CLICK
  • EFFECT_TICK

Создание общих знаний между производителями устройств и разработчиками является ключом к повышению общего качества тактильных ощущений в экосистеме Android. Используйте базовый контрольный список , оценку оборудования и CDD . чтобы узнать больше о тактильной реализации.

Нажмите и отпустите

Рисунок 3. Нажатие и отпускание.

Богатая тактильность

Богатые тактильные ощущения — это растущая категория тактильных ощущений, которая выходит за рамки одиночных импульсных эффектов. Android стремится поддерживать богатые тактильные ощущения с высокой компоновкой и настраиваемостью с высоким уровнем детализации. Следующие варианты использования поддерживаются в Android 11 или более ранней версии.

Богатые тактильные ощущения

Рис. 4. Насыщенные тактильные ощущения со скользящей текстурой

Перетаскивание и смахивание

Рисунок 5. Перетаскивание и смахивание

Вариант использования 1: скользящая текстура

Если тактильный эффект повторяется, когда палец скользит по сенсорной поверхности (например, перетаскивание, пролистывание, исследование поверхности с фантомной тактильной текстурой), повторяющиеся тактильные эффекты предпочтительно являются четкими и тонкими.

Если индивидуальный эффект скорее шумный, чем четкий, то интервалы между повторениями, скорее всего, будут стерты. В результате получается одно длинное жужжание, а не несколько дискретных сигналов.

Если амплитуда недостаточно тонкая, то воспринимаемая тактильная энергия накапливается во время повторения, что приводит к чрезвычайно сильным тактильным ощущениям в конце повторения.

Реализация простой тактильной текстуры поверхности для жестов смахивания и перетаскивания

Используйте CLOCK_TICK и TEXT_HANDLE_MOVE в HapticFeedbackConstants . Эти константы предопределяют характеристики повторения и амплитуды.

Создание собственного эффекта

Чтобы создать собственный эффект, составьте дизайн, объединив последовательности PRIMITIVE_CLICK и PRIMITIVE_TICK в VibrationEffect.Composition . Вы можете настроить характеристики масштаба повторения и амплитуды, используя addPrimitive(int primitiveID, float scale, int delay) . Поддержка зависит от возможности CAP_COMPOSE_EFFECTS интерфейса Vibrator HAL .

Вариант использования 2: Долгая вибрация с эффектом легкости

Длительная вибрация — это вибрация с плавной амплитудой, которая переходит от 0 к целевой амплитуде. Продолжительная вибрация может генерировать легко воспринимаемые тактильные ощущения внимания. Однако внезапная длительная вибрация может напугать пользователей в тихой обстановке и часто вызывает слышимые жужжащие звуки. Чтобы создать более приятную продолжительную вибрацию, примените эффект облегчения в начале продолжительной вибрации. Это создает плавный переход амплитуды, который приближается к целевой амплитуде.

Применение эффекта легкости

  1. Проверьте аппаратные возможности управления амплитудой с помощью android.os.Vibrator.hasAmplitudeControl() .

    • Результат должен быть true , чтобы создать эффект легкости с различной амплитудой.
  2. Используйте VibrationEffect . createWaveform(timings[], amplitudes[], int repeat) .

  3. Отрегулируйте ряд значений timings[] и amplitudes[] , чтобы создать кривую замедления, как показано на рисунке 6.

Долгая вибрация

Рис. 6. Кривая ослабления длительной вибрации

Вариант использования 3: тактильные сигналы со звуковой связью

Тактильные ощущения со звуковой связью — это тактильные паттерны в сочетании с ритмом звука, чтобы привлечь внимание пользователя.

Тактильные ощущения со звуковой связью: преимущества

Чтобы реализовать тактильные ощущения со звуковой связью, объедините четкие тактильные ощущения с длительными вибрациями. Сильные, но короткие тактильные ощущения от четких тактильных ощущений создают дискретные ритмические паттерны. В сочетании с высоким уровнем раздражителей, которые обеспечивает длительная вибрация, это отлично помогает привлечь внимание пользователя.

Важно учитывать ритмические закономерности ощущения. Если чувства ритма нет, пользователь воспринимает тактильные ощущения как случайные гудения и старается их игнорировать.

Аудио Пара

Рис. 7. Пример тактильной связи аудиопары

Тактильные ощущения со связью по звуку: советы по внедрению

Реализация тактильных сигналов со звуковой связью требует базового понимания воспроизведения контента как аудио, так и тактильных каналов. Имейте в виду следующие вещи.

  • Используйте классы MediaPlayer или SoundPool .

    • Ресурсы в формате OGG со специальным ключом метаданных ( ANDROID_HAPTIC , за которым следует ряд тактильных каналов) указывают на наличие тактильных данных и воспроизведение с помощью MediaPlayer и SoundPool .
  • Укажите поддержку тактильных ощущений и воспроизведения звука в audio_policy_configuration.xml .

    • Используйте выходной профиль с тактильным каналом AUDIO_CHANNEL_OUT_HAPTIC_A|B .
    • Для выходного потока с тактильными каналами помните, что тактильные каналы представлены в данных как дополнительные каналы.

    Пример

    Если маска канала для выходного потока выглядит так:

    AUDIO_CHANNEL_OUT_STEREO_HAPTIC_A

    Тогда каждый образец должен выглядеть так:

    AUDIO_LEFT_CHANNEL,AUDIO_RIGHT_CHANNEL,HAPTIC_CHANNEL_A

  • Изменить AudioAttributes.Builder( ).setHapticChannelsMuted(boolean muted)

    значение false для воспроизведения тактильного канала.

    • По умолчанию тактильные каналы отключены ( true ).
    • Варианты использования включают в себя рингтоны и звуки пользовательского интерфейса с синхронной тактильной связью и обратной связью.
  • Vibrator HAL должен реализовать поддержку внешнего управления.

Звуковые тактильные сигналы

Рис. 8. Реализация тактильных сигналов со связью по звуку

Тактильные сигналы со звуковой связью: Генератор тактильных ощущений

HapticGenerator — это аудиоэффект, представленный в Android 12, который может генерировать тактильные данные из аудиоканала и воспроизводить их в режиме реального времени в виде тактильных сигналов со звуковой связью . Эффект применяется к AudioTrack , как показано на рисунке 9.

Haptic Generator architecture

Рис. 9. Архитектура тактильного генератора

Чтобы убедиться, что ваш алгоритм тактильного генератора создает высококачественные тактильные ощущения, настройте алгоритм генерации на двигатель вибратора устройства, отрегулировав параметры, которые настраивают цепочку фильтров, которые он применяет к аудиосигналам. В этом разделе подробно описаны эти параметры и объясняется, как настроить их в соответствии со спецификацией вашего оборудования.

  1. Резонансная частота полосового фильтра

    Резонансная частота вибратора — это частота, при которой тактильный привод имеет максимальную выходную мощность. Этот параметр регулирует антирезонатор, чтобы частично сгладить передаточную функцию ответа, чтобы получить более широкую полосу пропускания. Платформа Android автоматически связывает это значение с выходными данными метода Vibrator HAL IVibrator.getResonantFrequency .

    Значение по умолчанию для этого параметра составляет 150 Гц . Это можно изменить в коде здесь .

  2. Мощность нормализации для медленной огибающей

    Этот параметр определяет показатель степени при частичной нормализации (автоматическая регулировка усиления). Его значение по умолчанию равно -0,8 , что означает, что 80% изменения динамического диапазона удаляются на этом шаге регулировки усиления. Это можно изменить в коде здесь .

  3. Коэффициент добротности полосового режекторного фильтра

    Добротность вибратора (добротность) определяется двумя параметрами:

    • Нулевая добротность, добротность нулей в полосовом режекторном фильтре, который частично подавляет резонанс.

    • Полюс Q, добротность полюсов полосового режекторного фильтра.

    Соотношение этих двух значений ограничивает подавление резонанса, чтобы усилить низкие частоты и расширить отклик алгоритма. Например, значения по умолчанию 8 для нулевой добротности и 4 для полюсной добротности дают коэффициент 2 , ограничивая подавление резонанса коэффициентом 2 (6 дБ). Платформа Android связывает оба значения с выходными данными метода Vibrator HAL IVibrator.getQFactor .

    Если значения по умолчанию не учитывают демпфирование мощности двигателя в вашем устройстве, мы рекомендуем изменить оба значения одновременно и либо увеличить, либо уменьшить оба. Отношение Zero Q к Pole Q должно быть больше 1 . Это можно изменить в коде здесь .

  4. Угловая частота искажения

    Частота среза применяется фильтром нижних частот, который подавляет низкоуровневую вибрацию и усиливает более высокие уровни с помощью кубического искажения. По умолчанию это 300 Гц . Это можно изменить в коде здесь .

  5. Входное усиление и кубический порог для искажения

    Эти параметры используются фильтром нелинейных искажений, применяемым к входному сигналу, который гасит амплитуду низкочастотных сигналов и увеличивает амплитуду высокочастотных.

    • Значение по умолчанию для входного коэффициента усиления равно 0,3 .
    • Значение по умолчанию для порога куба равно 0,1 .

    Мы рекомендуем изменять оба значения вместе. Их можно найти в коде здесь .

    Для получения дополнительной информации о функции, применяемой этим фильтром, обратитесь к реализации, доступной здесь . Чтобы узнать больше о том, как эти два параметра влияют на выходной сигнал, мы рекомендуем построить частотные характеристики фильтров и понаблюдать, как частотные характеристики меняются при разных значениях параметров.

  6. Выходное усиление для искажения

    Этот параметр управляет конечной амплитудой вибрации. Это окончательный коэффициент усиления, применяемый после мягкого ограничителя, который ограничивает амплитуды вибрации менее чем 1. Его значение по умолчанию равно 1,5 , и его можно изменить в коде здесь . Если вибрация слишком тонкая, увеличьте значение. Если вы слышите дребезжание оборудования привода, уменьшите значение.