상수 및 프리미티브 구현

햅틱 상수와 기본 요소는 진동기 HAL에 의해 정의되고 Android 프레임워크에 의해 공개 API에 매핑됩니다. 다음 검사를 진행하여 기기가 햅틱 구현을 위한 최소 요구사항을 충족하는지 확인합니다.

햅틱 구현 프로세스의 플로우 차트

그림 2. 효과 구현

프리미티브를 구현하기 위한 단계 플로우 차트

그림 3. 프리미티브 구현

상수 구현

VibrationEffect의 햅틱 상수는 개발자가 VibrationEffect.createPredefined()를 통해 사용할 수 있습니다. 다음 햅틱 상수의 구현 상태를 확인합니다.

햅틱 상수 위치 및 요약
EFFECT_TICK, EFFECT_CLICK, EFFECT_HEAVY_CLICK, EFFECT_DOUBLE_CLICK VibrationEffect 클래스
VibrationEffect의 햅틱 상수에는 입력 이벤트 개념이 포함되지 않으며 UI 요소가 없습니다. 상수는 대신 EFFECT_CLICKEFFECT_HEAVY_CLICK과 같은 에너지 수준의 개념을 포함하며, createPredefined()에 의해 호출됩니다.

다음에 설명된 대체 진동은 VibrationEffect 상수를 구현하지 않는 기기에서 실행됩니다. 이러한 기기에서 최상의 성능을 발휘하도록 이러한 구성을 업데이트하는 것이 좋습니다.

  • EFFECT_CLICK

    VibrationEffect.createWaveform으로 생성된 파형 진동 및 frameworks/base/core/res/res/values/config.xml##config_virtualKeyVibePattern에 설정된 타이밍.

  • EFFECT_HEAVY_CLICK

    VibrationEffect.createWaveform으로 생성된 파형 진동 및 frameworks/base/core/res/res/values/config.xml##config_longPressVibePattern에 설정된 타이밍.

    • EFFECT_DOUBLE_CLICK

    VibrationEffect.createWaveform으로 생성된 파형 진동 및 타이밍 (0, 30, 100, 30).

  • EFFECT_TICK

    VibrationEffect.createWaveform으로 생성된 파형 진동 및 frameworks/base/core/res/res/values/config.xml##config_clockTickVibePattern에 설정된 타이밍.

햅틱 반응 테스트 단계의 플로우 차트

그림 4. 피드백 상수 구현

HapticFeedbackConstants의 햅틱 상수는 개발자가 View.performHapticFeedback()를 통해 사용할 수 있습니다. 다음 공개 피드백 상수의 상태를 확인합니다.

햅틱 상수 위치 및 요약
CLOCK_TICK, CONTEXT_CLICK, KEYBOARD_PRESS, KEYBOARD_RELEASE, KEYBOARD_TAP, LONG_PRESS, TEXT_HANDLE_MOVE, VIRTUAL_KEY, VIRTUAL_KEY_RELEASE, CONFIRM, REJECT, GESTURE_START, GESTURE_END HapticFeedbackConstants 클래스
HapticFeedbackConstants의 햅틱 상수는 KEYBOARD_PRESSKEYBOARD_RELEASE와 같은 특정 UI 요소로 입력 이벤트를 지원하며, performHapticFeedback()에 의해 호출됩니다.

프리미티브 구현

VibrationEffect.Composition의 햅틱 기본 요소에는 개발자가 addPrimitive(int primitiveId, float scale, int delay)를 통해 사용할 수 있는 확장 가능한 강도가 있습니다. 원시 유형은 두 가지 카테고리로 나눌 수 있습니다.

  • 짧은 프리미티브: 지속 시간이 짧은 프리미티브로, 보통 20ms 미만입니다. CLICK, TICK, LOW_TICK이 여기에 해당합니다.

  • 처프 기본 요소: 진폭과 주파수가 다양하며 일반적으로 짧은 기본 요소보다 지속 시간이 긴 기본 요소입니다. SLOW_RISE, QUICK_RISE, QUCK_FALL, THUD, SPIN입니다.

짧은 프리미티브

짧은 기본 요소는 진동기 모터 출력 가속도 프로필로 설명할 수 있습니다. 사용되는 절대 주파수는 액추에이터의 공진 주파수에 따라 각 원시 요소마다 다릅니다. 하드웨어 설정 및 출력을 측정하는 도구에 관한 자세한 내용은 테스트 장비 설정을 참고하세요.

짧은 진동의 유용한 품질 측정항목은 그림 5에 표시된 펄스 대 벨소리 비율 (PRR)입니다. PRR은 진폭이 최대 진폭의 10% 로 감소하는 지속 시간 창 내 신호로 정의된 기본 펄스와 진폭이 최대 진폭의 10% 에서 최대 진폭의 1% 미만으로 감소하는 신호로 정의된 링 펄스 간의 비율로 정의됩니다. PRR 공식은 다음과 같습니다.

$$ \text{Pulse to ring ratio (PRR)} = 20log_{10}\frac{\text{RMS (main pulse)}}{\text{RMS (ring)}} $$

PRR에 관한 자세한 내용은 파형 분석을 참고하고, 결과를 분석하고 비교하는 방법에 관한 자세한 내용은 성능 지도를 사용하여 결과 비교를 참고하세요.

Pulse to Ring Ratio(펄스 대 벨소리 비율)

그림 5. 벨소리 대비 맥박 비율 정의

짧은 프리미티브를 사용자 입력 피드백으로 적용하거나 더 긴 구성에서 재생하여 부드러운 텍스처를 만듭니다. 즉, 이러한 소리는 보통 자주 트리거되고 연속으로 빠르게 재생됩니다. 단일 짧은 기본 요소의 인지된 강도는 더 큰 효과 강도를 증폭시킬 수 있습니다. 따라서 100개의 연속 틱과 같은 더 큰 컴포지션으로 단일 틱 또는 낮은 틱 기본 요소를 보정합니다.

클릭 기본

클릭 프리미티브는 일반적으로 기기의 공진 주파수에 가까운 곳에서 작동하여 짧은 시간 내에 최대 출력에 도달하는 강력하고 선명한 효과입니다. 다른 프리미티브보다 더 강하고 깊으며 최대 강도로 실행됩니다.

가능한 경우 모터 상승 및 하강 시간을 단축하기 위해 시작 부분에서는 모터 오버드라이브를 사용하고 끝부분에서는 액티브 브레이킹을 사용합니다. 일부 모터의 경우 사인파 대신 구형파를 사용하면 더 빠른 가속을 달성할 수 있습니다. 그림 6은 클릭 기본 요소의 출력 가속 프로필 예를 보여줍니다.

기본 출력 가속화 프로필 클릭

그림 6. 클릭 기본 요소의 출력 가속 프로필 예

매개변수 가이드라인
시간

타겟: 12ms

한도: 30ms 미만

최대 출력 가속

대상: 2학년

한도: 1G 초과

실행 빈도 공진 주파수와 거의 동일

틱 기본 요소 (밝은 틱)

틱 기본 요소는 일반적으로 높은 주파수 범위에서 작동하는 날카롭고 짧은 효과입니다. 이 기본 요소는 짧은 테일이 있는 더 높은 주파수에서 중간 강도의 클릭으로 설명할 수도 있습니다. 모터 오버드라이브 또는 초기 시작을 위한 구형파를 사용하여 짧은 상승 시간을 달성하고 오프셋에서 능동 제동을 하는 경우에도 동일한 안내가 적용됩니다. 그림 7은 틱 기본 요소의 출력 가속 프로필의 예를 보여줍니다.

기본 요소 출력 가속 프로필 선택

그림 7. 틱 기본 요소의 출력 가속 프로필 예

매개변수 가이드라인
시간

목표: 5ms

한도: 20ms 미만

최대 출력 가속

타겟: CLICK의 절반, 1G

한도: 0.5G~1G

실행 빈도

타겟: 2배 공진 주파수

한도: 500Hz 미만

로우 틱 기본 유형

로우 틱 프리미티브는 라이트 틱의 더 부드럽고 약한 버전으로, 더 낮은 주파수 범위에서 작동하여 효과에 더 많은 바디를 제공합니다. 이 기본 요소는 동적 피드백을 위해 반복적으로 사용하도록 설계된 낮은 주파수의 중간 강도 클릭으로 설명할 수도 있습니다. 모터 오버드라이브 또는 초기 시작을 위한 구형파를 사용하여 짧은 상승 시간을 달성하는 경우에도 동일한 안내가 적용됩니다. 그림 8은 낮은 틱 기본 요소의 출력 가속 프로필 예를 보여줍니다.

틱이 낮은 기본 출력 가속 프로필

그림 8. 틱이 낮은 기본 요소의 출력 가속 프로필 예

매개변수 가이드라인
시간

타겟: 12ms

한도: 30ms 미만

최대 출력 가속

목표: TICK의 1/4, 0.25G

한도: 0.2G~0.5G

실행 빈도

타겟: 2/3 공진 주파수

한도: 100Hz 미만

Chirp 프리미티브

차프 프리미티브는 전압 수준과 진동 주파수의 입력 신호로 설명할 수 있습니다. 모터가 다양한 주파수 범위에서 출력할 수 있는 가속도는 액추에이터의 주파수 응답 곡선에 따라 달라집니다. 주파수 범위와 전압 수준은 기기별로 조정해야 합니다.

느린 상승 프리미티브

느린 상승은 부드러운 시작과 스윕 전반에 걸쳐 일관되게 증가하는 진동 강도로 느린 진폭과 주파수가 위로 스윕되는 것입니다. 공진에서 작동하는 낮은 주파수 범위를 사용하여 진폭과 주파수를 일관되게 스위핑하여 구현할 수 있습니다. 그림 9는 이 구현의 입력 매개변수와 출력 가속 프로필의 예를 보여줍니다. (빨간색 선은 왼쪽의 진폭 라벨과 일치하며 시간에 따라 진동 진폭이 어떻게 달라지는지 나타냅니다. 파란색 선은 오른쪽의 진동수 라벨과 일치하며 시간 경과에 따라 진동수가 어떻게 달라지는지 나타냅니다.)

느린 상승 기본 요소의 입력 매개변수 및 출력 가속 프로필

그림 9. 입력 매개변수 및 느린 상승 기본 요소의 출력 가속 프로필 예시

모터의 주파수 응답이 제한된 경우 (공진 주파수에서 충분히 강하지 않음) 대체 구현은 공진 주파수의 1/2x에서 1x까지의 사인 스위프입니다. 모터 공진은 끝에서 신호 피크에 도달하는 데 기여합니다.

매개변수 가이드라인
시간

타겟: 500ms

허용 오차: 20ms

최대 출력 가속

목표: 0.5G

한도: 0.5G~1G

실행 빈도

타겟: 공진 주파수의 1/2~2/3

대안: 공진 주파수의 1/2

빠른 상승 프리미티브

빠른 상승은 부드러운 시작과 스윕 전반에 걸쳐 일관되게 증가하는 진동 강도로 더 빠른 진폭과 주파수 스윕을 위로 향합니다. 출력 가속 및 진동 주파수 타겟은 더 짧은 기간에 달성되는 느린 상승 기본 요소와 동일해야 합니다. 그림 10은 진동 입력 매개변수와 느린 상승 기본 요소의 출력 가속도 프로필 예를 보여줍니다. (빨간색 선은 왼쪽의 진폭 라벨과 일치하며 시간에 따라 진동 진폭이 어떻게 달라지는지 나타냅니다. 파란색 선은 오른쪽의 진동수 라벨과 일치하며 시간 경과에 따라 진동수가 어떻게 달라지는지 나타냅니다.)

빠른 상승 기본 요소의 입력 매개변수 및 출력 가속 프로필

그림 10. 빠른 상승 기본 요소의 입력 매개변수 및 출력 가속 프로필 예시

매개변수 가이드라인
시간

타겟: 150ms

허용 오차: 20ms

최대 출력 가속

타겟: SLOW_RISE와 동일

한도: SLOW_RISE와 동일

실행 빈도

타겟: SLOW_RISE와 동일

대안: SLOW_RISE와 동일

빠른 낙하 프리미티브

빠른 하강은 부드러운 시작과 함께 빠른 진폭과 주파수가 아래로 스윕되는 것입니다. 모터가 최대 출력 가속도에 도달하기 위해 램프업되는 동안 더 높은 주파수를 시작점으로 사용할 수 있습니다. 빈도는 상승 시간 동안에도 스위프 전체에서 일관되게 감소해야 합니다. 그림 11에서는 이 구현의 입력 매개변수와 출력 가속 프로필의 예를 보여줍니다. (빨간색 선은 왼쪽의 진폭 라벨과 일치하며 시간에 따라 진동 진폭이 어떻게 달라지는지 나타냅니다. 파란색 선은 오른쪽의 진동수 라벨과 일치하며 시간 경과에 따라 진동수가 어떻게 달라지는지 나타냅니다.)

빠른 낙하 기본 요소의 입력 매개변수 및 출력 가속도 프로필

그림 11. 빠른 낙하 기본 요소의 입력 매개변수 및 출력 가속도 프로필 예시

매개변수 가이드라인
시간

목표: 100ms

허용 오차: 20ms

최대 출력 가속

타겟: 1G

한도: 0.5G~2G

실행 빈도

타겟: 공진 주파수의 1~2배

Thud 프리미티브

쿵은 속이 빈 나무를 두드리는 물리적 감각을 시뮬레이션하는 쿵쿵거리는 낮은 타악기 효과입니다. 이 기본 요소는 효과에 더 많은 바디를 제공하기 위해 낮은 틱 기본 요소와 유사한 낮은 주파수 범위에서 작동합니다. 쿵 소리 기본 요소를 낮은 주파수 범위 (100Hz 미만 권장)에서 진폭 및 주파수 하향 스위프로 구현할 수 있습니다. 그림 12는 이 구현의 입력 매개변수와 출력 가속 프로필의 예를 보여줍니다. (빨간색 선은 왼쪽의 진폭 라벨과 일치하며 시간에 따라 진동 진폭이 어떻게 달라지는지 나타냅니다. 파란색 선은 오른쪽의 진동수 라벨과 일치하며 시간 경과에 따라 진동수가 어떻게 달라지는지 나타냅니다.)

쿵 소리 기본 요소의 입력 매개변수 및 출력 가속도 프로필

그림 12. 입력 매개변수 및 thud 프리미티브의 출력 가속 프로필 예시

모터의 주파수 응답이 제한되는 경우 공진 주파수에서 최대 강도 드라이브 신호로 시작하고 여전히 감지할 수 있는 가장 낮은 주파수로 떨어뜨리는 것이 대안 구현입니다. 이 접근 방식에서는 진동을 느낄 수 있도록 낮은 주파수에서 드라이브 신호 강도를 높여야 할 수 있습니다.

매개변수 가이드라인
시간

타겟: 300ms

허용 오차: 20ms

최대 출력 가속

목표: 0.25G

한도: 0.2G~0.5G

실행 빈도

타겟: 공진 주파수의 1/2~1/3

대안: 공진 주파수의 1배~1/2

회전 기본 요소

회전은 중앙에서 약간 강조된 빠른 위아래 회전의 회전 모멘텀을 시뮬레이션합니다. 회전은 진폭과 주파수를 반대 방향으로 독립적으로 스위핑한 후 반대 동작을 수행하여 구현할 수 있습니다. 낮은 주파수 범위 (100Hz 미만 권장)를 사용하는 것이 중요합니다. 그림 13은 이 구현의 입력 매개변수와 출력 가속도 프로필의 예를 보여줍니다. (빨간색 선은 왼쪽의 진폭 라벨과 일치하며 시간에 따라 진동 진폭이 어떻게 달라지는지 나타냅니다. 파란색 선은 오른쪽의 진동수 라벨과 일치하며 시간 경과에 따라 진동수가 어떻게 달라지는지 나타냅니다.)

회전하고 불안정한 느낌을 주기 위해 회전 기본 요소를 연속으로 두 번 호출하거나 컴포지션에서 세 번 호출하는 것이 좋습니다.

모터의 주파수 응답이 제한된 경우 공진 주파수의 1/2x에서 1x로 빠르게 사인 스위프한 후 다시 돌아오는 대체 구현이 있습니다. 모터 공명으로 인해 신호의 중간에 자동으로 액센트가 부여됩니다.

스핀 기본 요소의 입력 매개변수 및 출력 가속도 프로필

그림 13. 스핀 프리미티브의 입력 매개변수 및 출력 가속 프로필 예시

매개변수 가이드라인
시간

타겟: 150ms

허용 오차: 20ms

최대 출력 가속

목표: 0.5G

한도: 0.25G~0.75G

실행 빈도

타겟: 2/3~1/3, 공진 주파수의 1/2로 복귀

대안: 2/3~1배, 공진 주파수의 1/2로 돌아감