Эффекты кусочно-линейной огибающей (PWLE) представляют собой последовательности точек, определяющих частоту вибрации и ускорение с течением времени. PWLE предлагают более богатую и динамичную тактильную обратную связь.
Android 16 и более поздние версии предоставляют два API-интерфейса для разработчиков приложений, помогающих создавать эффекты PWLE:
- Basic PWLE API: Простой, но с ограничениями. Подходит для быстрого начала работы. Доступно на
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, фреймворк требует, чтобы устройства, поддерживающие эту функцию, могли обрабатывать минимальную длительность 10 мс между точками PWLE и не менее 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. Воспринимаемая интенсивность характеризуется уровнем ощущения (SL), который определяется как дБ выше порога обнаружения на той же частоте. Таким образом, амплитуда ускорения вибрации (в пике G) может быть рассчитана следующим образом:
\(Amplitude(G) =10^\frac{Amplitude(db)}{20}\)
Где амплитуда дБ представляет собой сумму SL и порога обнаружения (значение по оси ординат на следующем графике) на определенной частоте.
Таким образом, API PWLE гарантирует, что воспринимаемая интенсивность изменяется линейно между последовательными парами контрольных точек.
На следующем графике показаны уровни ускорения вибрации 2 при 10, 20, 30, 40 и 50 дБ SL, а также порог обнаружения тактильного восприятия человека (0 дБ SL) в зависимости от временной частоты.
Рисунок 3. Уровни виброускорения.
Определить кривую ускорения частоты до максимального выходного сигнала
В этом разделе приведены общие рекомендации по получению кривой ускорения от частоты до максимального выходного сигнала от устройства, которое вы используете для генерации данных FOAM.
Получите кривую максимального напряжения (В)
V
— это максимальное напряжение, которое можно безопасно подать на вибратор в диапазоне его рабочих частот. Это гарантирует работу вибратора в безопасных пределах, предотвращая повреждения и максимизируя выходную мощность вибрации.
Если оборудование оснащено функцией ограничения напряжения, используйте ее для непосредственного измерения максимально достижимого напряжения в поддерживаемом диапазоне частот.
Рассчитайте максимальное ускорение (М)
M
— это максимальное ускорение, которое можно рассчитать с помощью различных методик. В этом разделе показан один метод для устройств, использующих линейные резонансные приводы (LRA).
Этот метод преобразует максимальное приложенное напряжение на заданной частоте в соответствующее максимальное значение ускорения, выраженное в пике 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.
Сгенерировать кривую ПЕНЫ
Объедините кривую максимального напряжения ( V
) и расчет ускорения ( M
), чтобы определить кривую FOAM:
- Для каждой частоты (
f
) в требуемом диапазоне найдите соответствующее максимальное напряжениеV(f)
по кривой максимального напряжения. - Рассчитайте максимальное ускорение на этой частоте, используя уравнение выше, заменив
V(f)
наVsys
и соответствующее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 Bolanowski Jr., SJ, et al.. " Четыре канала опосредуют механические аспекты прикосновения ". Журнал акустического общества Америки 84(5): 1680-1694 (1988). В этом онлайн-руководстве объясняется преобразование между амплитудой ускорения и амплитудой смещения. ↩
Данные получены из рисунка 8 в работе Веррилло, Р. Т. и др. « Масштаб чувствительности вибротактильных стимулов ». Восприятие и психофизика 6: 366-372 (1969). ↩