Эффекты кусочно-линейной огибающей (PWLE) представляют собой последовательности точек, определяющих частоту и ускорение вибрации во времени. PWLE обеспечивают более насыщенную и динамичную тактильную обратную связь.
В Android 16 и более поздних версиях доступны два API для разработчиков приложений, которые помогают создавать эффекты PWLE:
- Базовый API PWLE: простой, но с ограничениями. Отлично подходит для быстрого начала работы. Доступен в
BasicEnvelopeBuilder. - Расширенный API PWLE: больше контроля и гибкости, требует знаний в области тактильной обратной связи и некоторого знакомства с аппаратным обеспечением. Доступен в
WaveformEnvelopeBuilder.
Для поддержки этих API устройства должны реализовывать следующие API HAL:
- Сопоставление частоты и выходного ускорения (FOAM): Обеспечивает сопоставление частоты вибрации с максимально достижимым выходным ускорением устройства.
- Compose 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, фреймворк требует, чтобы устройства, поддерживающие эту функцию, могли обрабатывать задержку не менее 20 мс между точками 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();
Ограничения
Данная структура не изменяет запрошенные разработчиком значения частоты и амплитуды, а добавляет начальную точку с нулевой амплитудой для обеспечения плавного перехода.
Разработчики несут ответственность за то, чтобы частота, указанная в их эффектах PWLE, находилась в пределах поддерживаемого устройством диапазона, определенного в документации FOAM устройства. Если значения превышают эти пределы, устройство не воспроизводит вибрацию.
Отношение частоты к выходному ускорению (FOAM)
Точное представление частоты устройства для обеспечения возможности ускорения выходного сигнала имеет важное значение для поддержки API PWLE. В этом разделе подробно описывается значение этих данных, как они используются API PWLE и процесс их генерации.
Разберитесь в сопоставлении.
Устройства, поддерживающие эффекты PWLE, должны предоставлять карту зависимости частоты от выходного ускорения (FOAM). FOAM — это структура данных, генерируемая HAL, которая сопоставляет частоту вибрации (в герцах) с максимально достижимым выходным ускорением привода (в пиковых значениях G) на этой частоте. Эта карта имеет решающее значение для понимания того, как изменяется выходная вибрация в поддерживаемом диапазоне частот, и для определения базового API PWLE.
На следующем графике показан пример пенопластового активатора для типичного резонансного привода, в котором входное напряжение ограничено резонансной частотой для защиты двигателя:
Рисунок 1. Пример пенопласта для типичного резонансного актуатора.
Пенопласт выполняет три ключевые функции:
- Определение полного частотного диапазона: В FOAM определяется полный частотный диапазон устройства путем указания минимальной и максимальной поддерживаемых частот вибрации.
- Определение значений интенсивности и резкости: Базовый API PWLE работает по шкале человеческого восприятия интенсивности и резкости, которые затем сопоставляются с параметрами частоты и амплитуды аппаратного обеспечения с использованием значений ускорения на выходе в FOAM. Это сопоставление помогает гарантировать, что тактильные эффекты отображаются в соответствии с возможностями оборудования. Диапазон резкости определяется минимальным воспринимаемым порогом и соответствует частотам, на которых устройство может создавать тактильные эффекты, которые пользователи могут ощущать. Фреймворк сопоставляет значения интенсивности с амплитудой на основе целевого ускорения на выходе на выбранной частоте. Это помогает гарантировать достижение выбранного уровня интенсивности в пределах возможностей устройства.
- Раскрытие аппаратных возможностей: FOAM доступен разработчикам в
VibratorFrequencyProfile, предоставляя полный набор данных о частоте и ускорении, описывающий некоторые тактильные возможности устройства. Эти данные позволяют разработчикам, использующим расширенный API PWLE, создавать пользовательские вибрационные эффекты, выходящие за рамки базовых диапазонов интенсивности и резкости, определенных фреймворком.
FOAM и базовый API PWLE
Пенопласт играет важную роль в формировании вибрационных эффектов. Он используется для расчета диапазона резкости для базового API огибающей, обеспечивая воспринимаемость вибраций пользователем. Этот диапазон соответствует частотам, при которых выходное ускорение не менее чем на 10 дБ выше порога восприятия человеком (то есть минимального воспринимаемого уровня) для каждой частоты. Это гарантирует, что вибрации будут достаточно сильными, чтобы их можно было почувствовать.
Кроме того, данная платформа использует данные FOAM для сопоставления значений интенсивности и резкости, используемых в базовом API PWLE, с соответствующими значениями амплитуды и частоты. Это сопоставление помогает обеспечить ощутимую тактильную обратную связь на разных устройствах.
Тесты VTS проводятся для того, чтобы гарантировать, что устройства, поддерживающие эффекты огибающей, имеют непустой частотный диапазон, обеспечивающий воспринимаемые вибрации. Это помогает убедиться, что устройство может производить вибрации достаточной интенсивности, чтобы пользователи могли их отчетливо ощущать.
FOAM и расширенный API PWLE
FOAM предоставляется разработчикам через VibratorFrequencyProfile со следующей информацией:
- Диапазон частот: Разработчики могут получить минимальную и максимальную поддерживаемые частоты устройства в герцах, используя
getMinFrequencyHzиgetMaxFrequencyHzсоответственно. - Максимальное ускорение на выходе: Максимально достижимое ускорение на выходе устройства (в G) можно определить с помощью
getMaxOutputAccelerationGs. - Сопоставление частоты и выходного ускорения:
getFrequenciesOutputAccelerationпредоставляет сопоставление частоты и выходного ускорения, реализованное в HAL.
Разработчики могут использовать эту информацию при создании эффектов огибающей с помощью расширенного API PWLE. Например, при указании ускорения выходного сигнала (в Гс) необходимо нормализовать его до значения в диапазоне [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 — это максимальное ускорение, которое можно рассчитать различными методами. В этом разделе показан один из методов для устройств, использующих линейные резонансные актуаторы (ЛРА).
Этот метод преобразует максимальное приложенное напряжение на заданной частоте в соответствующее максимальное значение ускорения, выраженное в 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)по кривой максимального напряжения. - Рассчитайте максимальное ускорение на этой частоте, используя приведенное выше уравнение, подставив
V(f)вместоVsysи соответствующееfвместоw. Это даст вамM(V(f), f). - Вычисленное ускорение и есть значение
FOAM(f).
Отобразить данные FOAM
После генерации кривой FOAM, HAL представляет её в виде списка объектов FrequencyAccelerationMapEntry . Каждая запись определяет точку на карте, указывая частоту (в Герцах) и соответствующее ей максимальное выходное ускорение (в G peak).
Хотя строгих требований к разрешению 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). ↩