Эффекты кусочно-линейной огибающей (PWLE) представляют собой последовательности точек, определяющих частоту и ускорение вибрации с течением времени. PWLE обеспечивают более насыщенную и динамичную тактильную обратную связь.
Android 16 и более поздние версии предоставляют два API-интерфейса разработчика приложений для создания эффектов PWLE:
- Базовый API PWLE: простой, но с ограничениями. Подходит для быстрого начала работы. Доступен на
BasicEnvelopeBuilder
. - Расширенный API PWLE: больше контроля и гибкости, требует знаний в области тактильных ощущений и некоторого знакомства с оборудованием. Доступно на
WaveformEnvelopeBuilder
.
Для поддержки этих API устройства должны реализовывать следующие API HAL:
- Сопоставление частоты и выходного ускорения (FOAM): обеспечивает сопоставление частоты вибрации с максимально достижимым выходным ускорением для устройства.
- Составить PWLE: Воспроизводит вибрацию, определяемую PWLE формы вибрационной волны.
Базовый API PWLE
Для быстрого создания эффектов PWLE без углубления в аппаратное обеспечение или нюансы человеческого восприятия разработчики могут использовать базовый API PWLE, определяемый с помощью следующих параметров:
- Значение интенсивности в диапазоне [0, 1] отражает воспринимаемую силу вибрации. Например, значение 0,5 воспринимается как половина максимальной интенсивности, которую может достичь устройство.
- Значение резкости в диапазоне [0, 1] определяет чёткость вибрации. Более низкие значения соответствуют более плавным вибрациям, а более высокие — более резким.
- Длительность — это время, необходимое для перехода от последней точки PWLE (то есть пары интенсивности и резкости) к новой, в миллисекундах.
Вот пример формы волны, которая нарастает от низкой частоты до максимальной вибрации высокой частоты в течение 500 мс, а затем снижается до 0 (выкл.) в течение 100 мс:
VibrationEffect effect = new VibrationEffect.BasicEnvelopeBuilder()
.setInitialSharpness(0.0f)
.addControlPoint(1.0f, 1.0f, 500)
.addControlPoint(0.0f, 1.0f, 100)
.build();
Ограничения
Для создания плавного и плавного тактильного опыта эффекты PWLE должны начинаться и заканчиваться с интенсивностью 0,0. API обеспечивает это, фиксируя начальную интенсивность на 0 и выдавая исключение, если конечная интенсивность не равна 0. Это ограничение предотвращает нежелательные динамические эффекты вибраций из-за разрывов амплитуды, которые могут негативно повлиять на тактильное восприятие пользователя.
Для обеспечения согласованной отрисовки эффектов PWLE в экосистеме Android фреймворк требует, чтобы устройства с поддержкой этой функции могли обрабатывать паузы между точками PWLE не менее 10 мс и не менее 16 точек для эффектов PWLE. Эти требования контролируются тестами VTS , что помогает гарантировать надёжную работу эффектов PWLE на устройствах Android.
Расширенный API PWLE
Разработчики с глубокими познаниями в тактильных ощущениях могут определить эффекты PWLE, используя следующие критерии:
- Значение амплитуды в диапазоне [0, 1] представляет собой достижимую силу на данной частоте, определяемую устройством FOAM. Например, значение 0,5 генерирует половину максимального выходного ускорения, достигаемого на данной частоте.
- Частота указывается непосредственно в герцах.
- Длительность — это время, необходимое для перехода от последней точки PWLE к новой, в миллисекундах.
Вот пример формы сигнала, который наращивает амплитуду вибратора от выключенного состояния до полной на частоте 120 Гц в течение 100 мс, удерживает это состояние в течение 200 мс, а затем снова понижает ее в течение 100 мс:
VibrationEffect effect = new VibrationEffect.WaveformEnvelopeBuilder()
.addControlPoint(1.0f, 120f, 100)
.addControlPoint(1.0f, 120f, 200)
.addControlPoint(0.0f, 120f, 100)
.build();
Ограничения
Фреймворк не изменяет запрошенные значения частоты и амплитуды, предоставленные разработчиком, но добавляет начальную точку амплитуды 0, чтобы обеспечить плавный переход.
Разработчики несут ответственность за то, чтобы частота, указанная в эффектах PWLE, находилась в поддерживаемом устройством диапазоне, определяемом FOAM. Если значения превышают эти пределы, устройство не воспроизводит вибрацию.
Отображение частоты в выходном ускорении (FOAM)
Точное представление возможностей устройства по преобразованию частоты в выходной сигнал имеет решающее значение для поддержки API PWLE. В этом разделе подробно описывается значение этих данных, их использование API PWLE и процесс их генерации.
Понять сопоставление
Устройства, поддерживающие эффекты PWLE, должны предоставлять карту зависимости частоты от выходного ускорения (FOAM). FOAM — это структура данных, генерируемая HAL, которая сопоставляет частоту вибрации (в герцах) с максимально достижимым выходным ускорением привода (в пиковых значениях G) на этой частоте. Эта карта крайне важна для понимания того, как выходная вибрация изменяется в поддерживаемом диапазоне частот, и для определения базового API PWLE.
На следующем графике показан пример FOAM для типичного резонансного привода с входным напряжением, ограниченным около резонансной частоты для защиты двигателя:
Рисунок 1. Пример ПЕНЫ для типичного резонансного привода.
FOAM выполняет три основные функции:
- Определение полного диапазона частот: FOAM определяет полный диапазон частот устройства, указывая минимальные и максимальные поддерживаемые частоты вибрации.
- Определение значений интенсивности и резкости: базовый API PWLE работает на основе шкалы человеческого восприятия интенсивности и резкости, которые затем сопоставляются с параметрами частоты и амплитуды оборудования с использованием значений выходного ускорения в FOAM. Это сопоставление помогает гарантировать, что тактильные эффекты будут отображаться в соответствии с аппаратными возможностями. Диапазон резкости определяется минимальным порогом восприятия и соответствует частотам, на которых устройство может создавать тактильные эффекты, ощущаемые пользователем. Фреймворк сопоставляет значения интенсивности с амплитудой на основе целевого выходного ускорения на выбранной частоте. Это помогает гарантировать, что выбранный уровень интенсивности будет достигнут, оставаясь в пределах возможностей устройства.
- Раскрытие аппаратных возможностей: FOAM доступен разработчикам в
VibratorFrequencyProfile
, предоставляя полный набор данных об ускорении выходной частоты, подробно описывающий некоторые тактильные возможности устройства. Эти данные позволяют разработчикам, использующим расширенный API PWLE, создавать собственные эффекты вибрации, выходящие за рамки базовых диапазонов интенсивности и резкости, определяемых фреймворком.
FOAM и базовый API PWLE
FOAM играет важнейшую роль в формировании эффектов вибрации. Он используется для расчета диапазона резкости для базового API огибающей, обеспечивая чувствительность вибрации для пользователя. Этот диапазон соответствует частотам, где выходное ускорение не менее чем на 10 дБ превышает порог восприятия человеком (то есть минимально воспринимаемый уровень) для каждой частоты. Это гарантирует, что вибрации достаточно сильные, чтобы их можно было ощутить.
Кроме того, фреймворк использует данные FOAM для сопоставления значений интенсивности и резкости, используемых в базовом API PWLE, с соответствующими им значениями амплитуды и частоты. Это сопоставление помогает обеспечить ощутимую тактильную обратную связь на различных устройствах.
Испытания VTS проводятся для того, чтобы гарантировать, что устройства, поддерживающие эффекты огибающей, имеют непустой диапазон частот, создающий ощутимые вибрации. Это помогает гарантировать, что устройство может создавать вибрации достаточной интенсивности, чтобы их отчетливо ощущали пользователи.
FOAM и расширенный API PWLE
FOAM предоставляется разработчикам компанией VibratorFrequencyProfile
со следующей информацией:
- Диапазон частот: разработчики могут получить минимальную и максимальную поддерживаемые частоты устройства в герцах, используя
getMinFrequencyHz
иgetMaxFrequencyHz
соответственно. - Максимальное выходное ускорение: максимально достижимое выходное ускорение устройства (в G) доступно через
getMaxOutputAccelerationGs
. - Сопоставление частоты с выходным ускорением:
getFrequenciesOutputAcceleration
предоставляет сопоставление частоты с выходным ускорением, реализованное в HAL.
Разработчики могут использовать эту информацию при создании эффектов огибающей с помощью расширенного API PWLE. Например, при указании выходного ускорения (в G) необходимо нормализовать его до значения в диапазоне [0,0, 1,0] относительно максимального выходного ускорения устройства.
Благодаря усовершенствованному API PWLE разработчики могут использовать весь диапазон частот, поэтому крайне важно, чтобы предоставляемые данные FOAM были безопасны для вибратора и не превышали его возможностей.
Порог обнаружения человеческого восприятия
Порог восприятия человеком — это минимальное ускорение вибрации, которое он может надёжно уловить. Этот уровень зависит от частоты вибрации.
На следующем графике показан порог обнаружения тактильного восприятия человека 1 при ускорении как функция временной частоты:
Рисунок 2. Порог обнаружения тактильного восприятия человека.
Чтобы пользователи могли постоянно ощущать тактильные эффекты, тесты VTS подтверждают, что устройства с возможностями огибающей имеют диапазон частот, который может создавать амплитуды вибрации, превышающие порог обнаружения человеческого восприятия на 10 дБ.
Воспринимаемая интенсивность вибрации в зависимости от амплитуды виброускорения
Восприятие человеком интенсивности вибрации (мера восприятия) не растёт линейно с амплитудой вибрации (физическим параметром). API PWLE предполагает, что, когда проектировщик или разработчик думает об изменении силы вибрации, он ожидает, что воспринимаемая интенсивность будет следовать за PWLE. Воспринимаемая интенсивность характеризуется уровнем чувствительности (УО), который определяется как дБ выше порога обнаружения на той же частоте. Таким образом, амплитуда виброускорения (в пике G) может быть рассчитана следующим образом:
\(Amplitude(G) =10^\frac{Amplitude(db)}{20}\)
Где амплитуда дБ представляет собой сумму SL и порога обнаружения (значение по оси ординат на следующем графике) на определенной частоте.
Таким образом, API PWLE гарантирует, что воспринимаемая интенсивность изменяется линейно между последовательными парами контрольных точек.
На следующем графике показаны уровни ускорения вибрации 2 при 10, 20, 30, 40 и 50 дБ SL, а также порог обнаружения тактильного восприятия человека (0 дБ SL) в зависимости от временной частоты.
Рисунок 3. Уровни виброускорения.
Определить кривую ускорения от частоты до максимального выходного сигнала
В этом разделе приведены общие рекомендации по получению кривой ускорения от частоты до максимального выходного сигнала от устройства, которое вы используете для генерации данных FOAM.
Получить кривую максимального напряжения (В)
V
— это максимальное напряжение, которое можно безопасно подать на вибратор в его рабочем диапазоне частот. Это гарантирует работу вибратора в безопасных пределах, предотвращая повреждения и обеспечивая максимальную виброотдачу.
Если оборудование включает функцию ограничения напряжения, используйте ее для непосредственного измерения максимально достижимого напряжения в поддерживаемом диапазоне частот.
Рассчитайте максимальное ускорение (М)
M
— это максимальное ускорение, которое можно рассчитать различными методами. В этом разделе показан один из методов для устройств, использующих линейные резонансные приводы (ЛРП).
Этот метод преобразует максимальное приложенное напряжение на заданной частоте в соответствующее максимальное значение ускорения, выраженное в пике G.
Основное уравнение, используемое для этого преобразования:
\(\text{Accel}(w)= (\text{Vsys}\times\text{BLsys}\times\text{Loc_coeff}/\text{Rsys}/\text{MPhone})\times{w^2}/\text{Psys_abs}/{9.81}\)
Где:
Vsys
: Фактический уровень напряжения, подаваемого на тактильный привод
BLsys
: произведение напряженности магнитного поля ( B
) и длины проводника ( L
) вибромотора
Loc_coeff
: Коэффициент местоположения для преобразования ускорения на уровне модуля в ускорение на уровне телефона.
Rsys
: Электрическое сопротивление катушки вибромотора
MPhone
: Масса устройства (например, телефона)
w
: Угловая частота (радианы в секунду) возбуждающего сигнала, рассчитываемая как:
\(w = 2 \pi f\)
Psys_abs
: Амплитудная характеристика системы масс, демпфера и пружины второго порядка, рассчитываемая как:
\(\text{Psys_abs} = (\text{Wnsys}^2-w^2)^2+({w}\times(\text{Wnsys}/\text{Qsys}))^2\)
Wnsys
: Собственная частота колебательной системы
Qsys
: Коэффициент качества колебательной системы
Loc_coeff
— это отношение ускорения, измеренного на уровне телефона, к ускорению, измеренному на уровне модуля. Это отношение используется для преобразования показаний ускорения на уровне модуля в эквивалентные показания ускорения на уровне телефона. На уровне телефона, вследствие углового ускорения движения модуля, ускорение усиливается, и этот коэффициент учитывает этот тип эффекта. Он рассчитывается как:
\(\text{Loc_coeff} = \text{phone_acceleration} / \text{module_acceleration}\)
Например, если ускорение модуля составляет 1 g, а ускорение телефона — 2,5 g, то Loc_coeff
= 2,5. Это означает усиление в 2,5 раза.
Платформа Android принимает частоту в герцах, поэтому HAL необходимо преобразовать единицу частоты из радиан в секунду в герцы при генерации данных FOAM.
Сгенерировать кривую FOAM
Объедините кривую максимального напряжения ( V
) и расчет ускорения ( M
), чтобы определить кривую FOAM:
- Для каждой частоты (
f
) в нужном вам диапазоне найдите соответствующее максимальное напряжениеV(f)
по вашей кривой максимального напряжения. - Рассчитайте максимальное ускорение на этой частоте, используя приведенное выше уравнение, подставив
Vsys
вместоV(f)
и соответствующее значениеf
вместоw
. Это даст вамM(V(f), f)
. - Это рассчитанное ускорение и есть значение
FOAM(f)
.
Раскройте данные FOAM
После генерации кривой FOAM HAL представляет её в виде списка объектов FrequencyAccelerationMapEntry
. Каждый элемент определяет точку на карте, указывая частоту (в герцах) и соответствующее ей максимальное выходное ускорение (в пике G).
Хотя строгих требований к разрешению FOAM нет, мы рекомендуем определять кривые с одним максимальным пиком. В базовом API огибающей для отображения эффектов вибрации используется только первый пик . Для оптимизации точности линейной интерполяции при определении промежуточных значений ускорения мы рекомендуем задать высокое разрешение по частоте вокруг пика. Например, используйте шаг 1 Гц в диапазоне +/- 10 Гц от пиковой частоты.
Возможности и ограничения устройства
Для Android 16 и более поздних версий, чтобы помочь разработчикам оптимизировать эффекты PWLE и обеспечить совместимость между устройствами, Android включает API HAL для запроса возможностей PWLE устройства. Эти методы предоставляют информацию об ограничениях устройства, таких как минимальная и максимальная длительность примитива PWLE и количество примитивов, разрешенных в композиции PWLE.
API HAL включают в себя:
-
CAP_COMPOSE_PWLE_EFFECTS_V2
: ВозвращаетсяIVibrator.getCapabilities
, если устройство поддерживает эту функцию. -
getFrequencyToOutputAccelerationMap
: извлекает данные FOAM. -
getPwleV2PrimitiveDurationMinMillis
: извлекает минимально допустимую длительность для любого примитива PWLE в миллисекундах. -
getPwleV2PrimitiveDurationMaxMillis
: извлекает максимально допустимую длительность для любого примитива PWLE в миллисекундах. -
getPwleV2CompositionSizeMax
: извлекает максимальное количество примитивов PWLE, поддерживаемыхIVibrator.composePwleV2
.
Эта информация предоставляется разработчикам, чтобы они могли адаптировать свои эффекты к конкретным возможностям целевого устройства, особенно при использовании расширенного API PWLE.
Фреймворк также использует эти API при обработке эффектов, созданных с помощью базового API. Если эффект превышает ограничения устройства (например, слишком много точек PWLE или длительность превышает максимально допустимую), фреймворк автоматически корректирует эффект, чтобы он соответствовал допустимым границам. Этот процесс корректировки стремится максимально сохранить исходный замысел и ощущение дизайна.
Пороговые данные преобразованы из порога смещения на рисунке 1 работы Болановски-младшего, С.Дж. и др. « Четыре канала обеспечивают механические аспекты осязания ». Журнал Акустического общества Америки 84(5): 1680–1694 (1988). В этом онлайн-руководстве объясняется преобразование амплитуды ускорения в амплитуду смещения. ↩
Данные получены из рисунка 8 в работе Веррильо, Р.Т. и др. « Величина чувствительности вибротактильных стимулов ». Восприятие и психофизика 6: 366-372 (1969). ↩