定数とプリミティブを実装する

ハプティクスの定数とプリミティブはバイブレータ HAL によって定義され、Android フレームワークによって公開 API にマッピングされます。デバイスがハプティクスを実装するための最小要件を満たしているかどうかを確認するために、以下のチェックを行います。

ハプティクス実装プロセスのフローチャート

図 2. 効果の実装

プリミティブ実装の手順を示したフローチャート

図 3. プリミティブの実装

定数を実装する

VibrationEffect の触覚定数は、VibrationEffect.createPredefined() で使用できます。下記の触覚定数の実装ステータスを確認します。

触覚定数 場所と概要
EFFECT_TICKEFFECT_CLICKEFFECT_HEAVY_CLICKEFFECT_DOUBLE_CLICK VibrationEffect クラス
VibrationEffect の触覚定数には、入力イベントの概念が含まれず、UI 要素もありません。定数には、 createPredefined() が呼び出す EFFECT_CLICKEFFECT_HEAVY_CLICK など、エネルギー レベルの概念が含まれます。

次に説明する代替のバイブレーションは、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_TICKCONTEXT_CLICKKEYBOARD_PRESSKEYBOARD_RELEASEKEYBOARD_TAPLONG_PRESSTEXT_HANDLE_MOVEVIRTUAL_KEYVIRTUAL_KEY_RELEASECONFIRMREJECTGESTURE_STARTGESTURE_END HapticFeedbackConstants クラス
HapticFeedbackConstants の触覚定数は、performHapticFeedback() が呼び出す KEYBOARD_PRESSKEYBOARD_RELEASE など、特定の UI 要素での入力イベントを支援します。

プリミティブを実装する

VibrationEffect.Composition の触覚プリミティブには、デベロッパーが addPrimitive(int primitiveId, float scale, int delay) を通じて利用できるスケーラブルな強度があります。これらのプリミティブは、次の 2 つのカテゴリに分類されます。

  • short プリミティブ: 通常 20 ミリ秒未満の短期間のプリミティブ。CLICKTICKLOW_TICK を指します。

  • chirp プリミティブ: 通常 short プリミティブよりも持続時間が長く、振幅と周波数が変化するプリミティブで、SLOW_RISEQUICK_RISEQUCK_FALLTHUDSPIN を指します。

short プリミティブ

short プリミティブは、振動モーターの出力加速度プロファイルによって説明できます。使用される絶対周波数は、アクチュエータの共振周波数に基づき、プリミティブごとに異なります。出力を測定するためのハードウェア設定とツールについて詳しくは、テスト機器を設定するをご覧ください。

短い振動の重要な品質指標として、図 5 に示されているパルス対リング比(PRR)があります。PRR は、メインパルスリングパルスの間の比率を指します。メインパルスとは、持続時間の範囲内における、振幅がピーク振幅の 10% まで減少する信号によって定義され、リングパルスとは、振幅がピーク振幅の 10% から 1% 未満まで減少する信号によって定義されます。PRR の数式は次のとおりです。

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

PRR について詳しくは、波形を分析するを、結果の分析と比較について詳しくは、パフォーマンス マップを使用して結果を比較するをご覧ください。

パルス対リング比

図 5. パルス対リング比の定義

短いプリミティブは、ユーザー入力のフィードバックとして適用されたり、より長い構成の中で柔らかなテクスチャを作成するために再生されたりします。つまり、通常は頻繁にトリガーされ、素早く連続して再生されます。単一の short プリミティブの認識強度が、効果の強度を増幅する場合があります。したがって、単一の tick プリミティブまたは low tick プリミティブをより大きな構成、たとえば連続 100 ティックで調整してください。

click プリミティブ

click プリミティブは通常、デバイスの共振周波数とほぼ同じ周波数で動作し、短時間で最大出力に達する、強力でクリアな効果です。他のプリミティブに比べ、強くて深く、最大の強度で動作します。

可能であれば、モーターの立ち上がりと立ち下がりの時間を短くするために、最初にモーターのオーバードライブを使用し、最後にアクティブ ブレーキを使用してください。モーターによっては、正弦波の代わりに矩形波を使用することで、より速い加速度を実現できます。図 6 は、click プリミティブの出力加速度プロファイルの例を示しています。

click プリミティブの出力加速度プロファイル

図 6. click プリミティブの出力加速度プロファイルの例

パラメータ ガイドライン
持続時間

目標: 12 ミリ秒

上限: < 30 ミリ秒

ピーク出力加速度

目標: 2 G

上限: > 1 G

周波数 共振周波数とほぼ同様

tick プリミティブ(ライト tick)

tick プリミティブは通常、高い周波数帯で動作するシャープで短い効果です。このプリミティブは、より高い周波数で動作し、持続時間がより短い中程度の強度のクリックと説明することもできます。短い立ち上がり時間を実現するのに、開始時にモーター オーバードライブまたは矩形波を使用し、終了時にはアクティブ ブレーキングを使用するという同じガイダンスが適用されます。図 7 は、tick プリミティブの出力加速度プロファイルの例を示しています。

tick プリミティブの出力加速度プロファイル

図 7. tick プリミティブの出力加速度プロファイルの例

パラメータ ガイドライン
持続時間

目標: 5 ミリ秒

上限: < 20 ミリ秒

ピーク出力加速度

目標: CLICK の半分、1 G

上限: 0.5 G~1 G

周波数

目標: 共振周波数の 2 倍

上限: < 500 Hz

low tick プリミティブ

low tick プリミティブは、ライト tick のよりソフトで弱いバージョンで、より低い周波数帯で動作し、効果に厚みを与えます。このプリミティブは、より低い周波数で動作する中程度の強度のクリックと説明することもでき、動的なフィードバックのために繰り返し使用されることが想定されています。短い立ち上がり時間を実現するのにも、開始時にモーター オーバードライブまたは矩形波を使用するという同じガイダンスが適用されます。図 8 は、low tick プリミティブの出力加速度プロファイルの例を示しています。

low tick プリミティブの出力加速度プロファイル

図 8. low tick プリミティブの出力加速度プロファイルの例

パラメータ ガイドライン
持続時間

目標: 12 ミリ秒

上限: < 30 ミリ秒

ピーク出力加速度

目標: TICK の 1/4、0.25 G

上限: 0.2 G~0.5 G

周波数

目標: 2/3 共振周波数

上限: < 100 Hz

chirp プリミティブ

chirp プリミティブは、電圧レベルと振動周波数の入力信号によって説明できます。モーターが異なる周波数帯域で出力できる加速度は、アクチュエータの周波数応答曲線によって変わります。周波数帯域と電圧レベルは、デバイスごとに調整する必要があります。

slow rise プリミティブ

slow rise では、振幅と周波数がゆっくりと上昇し、滑らかな開始からスイープ全体を通じて振動強度が一貫して増していきます。このプリミティブは、振幅と周波数を一貫してスイープさせ、共振を外した低い周波数帯で動作させることで実装できます。図 9 は、この実装の入力パラメータと出力加速度プロファイルの例を示しています(赤い線は左側の振幅ラベルと一致し、振動振幅が時間とともにどのように変化するかを表しています。青い線は右側の周波数ラベルと一致し、振動周波数が時間とともにどのように変化するかを表しています)。

slow rise プリミティブの入力パラメータと出力加速度プロファイル

図 9. slow rise プリミティブの入力パラメータと出力加速度プロファイルの例

モーターの周波数応答が制限されている(共振周波数を外れると十分な強度が得られない)場合は、代替として、共振周波数の 1/2 倍~1 倍までの正弦波スイープを実装する方法があります。モーターの共振が最終的に信号のピークに達するのを助けます。

パラメータ ガイドライン
持続時間

目標: 500 ミリ秒

許容差: 20 ミリ秒

ピーク出力加速度

目標: 0.5 G

上限: 0.5 G~1 G

周波数

目標: 共振周波数の 1/2~2/3

代替値: 共振周波数の 1/2

quick rise プリミティブ

quick rise では、振幅と周波数がより速いペースでと上昇し、滑らかな開始からスイープ全体を通じて振動強度が一貫して増していきます。出力加速度と振動周波数の目標値は、slow rise プリミティブと同じで、より短い持続時間で達成されます。図 10 は、slow rise プリミティブの振動入力パラメータと出力加速度プロファイルの例を示しています(赤い線は左側の振幅ラベルと一致し、振動振幅が時間とともにどのように変化するかを表しています。青い線は右側の周波数ラベルと一致し、振動周波数が時間とともにどのように変化するかを表しています)。

quick rise プリミティブの入力パラメータと出力加速度プロファイル

図 10. quick rise プリミティブの入力パラメータと出力加速度プロファイルの例

パラメータ ガイドライン
持続時間

目標: 150 ミリ秒

許容差: 20 ミリ秒

ピーク出力加速度

目標: SLOW_RISE と同様

上限: SLOW_RISE と同様

周波数

目標: SLOW_RISE と同様

代替値: SLOW_RISE と同様

quick fall プリミティブ

quick fall では、振幅と周波数が速いペースで低下し、滑らかに開始します。モーターがピーク出力加速度に到達するために加速している間、開始点として高い周波数を使用することができます。スイープ全体を通じて、立ち上がり時間中であっても周波数は一貫して低下する必要があります。図 11 は、この実装の入力パラメータと出力加速度プロファイルの例を示しています(赤い線は左側の振幅ラベルと一致し、振動振幅が時間とともにどのように変化するかを表しています。青い線は右側の周波数ラベルと一致し、振動周波数が時間とともにどのように変化するかを表しています)。

quick fall プリミティブの入力パラメータと出力加速度プロファイル

図 11. quick fall プリミティブの入力パラメータと出力加速度プロファイルの例

パラメータ ガイドライン
持続時間

目標: 100 ミリ秒

許容差: 20 ミリ秒

ピーク出力加速度

目標: 1 G

上限: 0.5 G~2 G

周波数

目標: 共振周波数の 2 倍~1 倍

thud プリミティブ

thud は、重く低い打楽器のような効果で、空洞のある木を叩いたときのような感覚を模倣しています。このプリミティブは、low tick プリミティブと同様に低周波数帯で動作し、効果に厚みを持たせます。低周波数帯(100 Hz 未満が望ましい)で振幅と周波数を低下させるスイープとして thud プリミティブを実装できます。図 12 は、この実装の入力パラメータと出力加速度プロファイルの例を示しています(赤い線は左側の振幅ラベルと一致し、振動振幅が時間とともにどのように変化するかを表しています。青い線は右側の周波数ラベルと一致し、振動周波数が時間とともにどのように変化するかを表しています)。

thud プリミティブの入力パラメータと出力加速度プロファイル

図 12. thud プリミティブの入力パラメータと出力加速度プロファイルの例

モーターの周波数応答が制限されている場合、代替として、共振周波数で最大強度の駆動信号から開始し、知覚可能な範囲で最も低い周波数まで下げる実装方法もあります。この方法では、低い周波数で振動を感じられるようにするため、駆動信号の強度を上げる必要がある場合があります。

パラメータ ガイドライン
持続時間

目標: 300 ミリ秒

許容差: 20 ミリ秒

ピーク出力加速度

目標: 0.25 G

上限: 0.2 G~0.5 G

周波数

目標: 共振周波数の 1/2~1/3

代替値: 共振周波数の 1 倍~1/2

spin プリミティブ

spin は、中央にわずかなアクセントをつけながら、上下に速く回転する動きを模倣しています。spin は、振幅と周波数をそれぞれ逆方向にスイープさせ、その後に反対の動きをさせることで実装できます。低周波数帯域(100 Hz 未満が望ましい)を使用することが重要です。図 13 は、この実装の入力パラメータと出力加速度プロファイルの例を示しています(赤い線は左側の振幅ラベルと一致し、振動振幅が時間とともにどのように変化するかを表しています。青い線は右側の周波数ラベルと一致し、振動周波数が時間とともにどのように変化するかを表しています)。

spin プリミティブは、連続して 2 回、または構成内で 3 回使用することを推奨します。これにより、回転するような不安定な感覚を実現できます。

モーターの周波数応答が制限されている場合、代替として、共振周波数の 1/2 倍から 1 倍へ、そしてその逆に、急速な正弦波スイープを行う実装方法もあります。モーターの共振が自動的に信号の中央にアクセントを与えます。

spin プリミティブの入力パラメータと出力加速度プロファイル

図 13. spin プリミティブの入力パラメータと出力加速度プロファイルの例

パラメータ ガイドライン
持続時間

目標: 150 ミリ秒

許容差: 20 ミリ秒

ピーク出力加速度

目標: 0.5 G

上限: 0.25 G~0.75 G

周波数

対象: 共振周波数の 2/3~1/3、その後 1/2

代替手段: 共振周波数の 2/3~1x、その後 1/2