ハプティクスの実装

一般に、デバイス メーカーは、各デバイス用に作成されたプライベート アセットの所有者と見なされます。そのため、彼らのエンジニアリングの取り組みは、多くの場合、デバイスごとに集中しています。エコシステム内の他のデバイスの一貫性には、ほとんどまたはまったく労力がかかりません。

対照的に、開発者は、各デバイスの技術仕様に関係なく、エコシステム内のすべてのAndroid フォンで動作するアプリを構築しようと努力しています。このアプローチの違いにより、断片化の問題が発生する可能性があります。たとえば、特定の電話のハードウェア機能が、アプリ開発者が設定した期待と一致しない場合があります。そのため、ハプティクス API が一部の Android スマートフォンで機能しても他のスマートフォンでは機能しない場合、エコシステムの一貫性が失われます。これが、メーカーがすべてのデバイスに Android ハプティクス API を実装できるようにするために、ハードウェア構成が重要な役割を果たす理由です。

このページでは、Android ハプティクス API を最大限に活用するためにハードウェア コンプライアンスを設定するための段階的なチェックリストを提供します。

下の図は、デバイス メーカーと開発者の間で共通の知識を構築することを示しています。これは、まとまりのあるエコシステムを作成するための重要なステップです。

アプリ開発者とデバイス メーカー向けのハプティクスの使用例の図

図 1.デバイス メーカーと開発者の間で知識を構築する

ハプティクス実装チェックリスト

  1. 定数を実装する

    • ハプティクスを実装するための定数のリスト。
  2. HAL と API の間で定数をマッピングする

  3. ハードウェアを評価する

    • 対象の触覚効果に関する説明。これらの手順を使用して、ハードウェアのクイック チェックを実行します。

これらの各ステップについて、以下で詳しく説明します。

ステップ 1: 定数を実装する

これらのチェックを実行して、デバイスがハプティクスを実装するための最小要件を満たしているかどうかを判断します。

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

図 2.エフェクトの実装

プリミティブを実装する手順のフローチャート

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

以下の触覚定数の実装状況を確認してください。

触覚定数場所と概要
EFFECT_TICKEFFECT_CLICKEFFECT_HEAVY_CLICKEFFECT_DOUBLE_CLICK VibrationEffectクラス
VibrationEffectの触覚定数には、入力イベントの概念が含まれておらず、UI 要素もありません。定数には代わりに、 createPredefined()によって呼び出されるEFFECT_CLICKEFFECT_HEAVY_CLICKなどのエネルギー レベルの概念が含まれます。
PRIMITIVE_TICKPRIMITIVE_CLICKPRIMITIVE_LOW_TICK>PRIMITIVE_SLOW_RISEPRIMITIVE_QUICK_RISEPRIMITIVE_QUICK_FALLPRIMITIVE_SPINPRIMITIVE_THUD VibrationEffect.Compositionクラス
VibrationEffect.Compositionの触覚定数は、スケーラブルな強度を持つことができます。これは、 addPrimitive(int primitiveId, float scale, int delay)によって呼び出されます。

以下で説明する代替振動は、 VibrationEffect定数を実装していないデバイスで実行されます。このようなデバイスで最高のパフォーマンスを発揮するように、これらの構成を更新することをお勧めします。

  1. EFFECT_CLICK

    VibrationEffect.createWaveformで作成された波形振動と、 frameworks/base/core/res/res/values/config.xml##config_virtualKeyVibePatternで設定されたタイミング。

  2. EFFECT_HEAVY_CLICK

    VibrationEffect.createWaveformで作成された波形振動と、 frameworks/base/core/res/res/values/config.xml##config_longPressVibePatternで設定されたタイミング。

  3. EFFECT_DOUBLE_CLICK

    VibrationEffect.createWaveformとタイミング (0、30、100、30) で作成された波形振動。

  4. EFFECT_TICK

    VibrationEffect.createWaveformで作成された波形振動と、 frameworks/base/core/res/res/values/config.xml##config_clockTickVibePatternで設定されたタイミング。

触覚フィードバックをテストする手順のフローチャート

図 4.フィードバック定数の実装

次のパブリック フィードバック定数のステータスを確認します。

触覚定数場所と概要

CLOCK_TICKCONTEXT_CLICKKEYBOARD_PRESSKEYBOARD_RELEASEKEYBOARD_TAPLONG_PRESSTEXT_HANDLE_MOVEVIRTUAL_KEYVIRTUAL_KEY_RELEASECONFIRMREJECTGESTURE_STARTGESTURE_END

HapticFeedbackConstantsクラス
HapticFeedbackConstantsの触覚定数は、 performHapticFeedback()によって呼び出されるKEYBOARD_PRESSKEYBOARD_RELEASEなどの特定の UI 要素で入力イベントを支援します。

ステップ 2: HAL と API の間で定数をマッピングする

ステップ 2 は、パブリック HAL 定数と API 定数の間の推奨されるマッピングを示しています。ステップ 1 で評価したハードウェアが HAL 定数を実装していない場合は、ステップ 2 を使用して、ステップ 1 で説明したフォールバック パターンを更新し、同様の出力を生成する必要があります。マッピングは、2 つの異なるデフォルト モデルによって支援されます。

  • 離散モデル(単純)

    • 振幅は、このモデルの重要な変数です。 HAL の各エンティティは、異なるハプティック振幅を表します。
    • このモデルは、基本的な触覚 UX を実装するために必要な最小要件です。
    • より高度な触覚 UX には、高度なハードウェアと高度なモデル (連続モデル) が必要です。
  • 連続モデル(上級)

    • テクスチャと振幅は、このモデルの重要な変数です。 HAL の各エンティティは、異なる触覚テクスチャを表します。各 HAL エンティティの振幅は、スケール ファクター ( S ) によって制御されます。
    • このモデルには高度なハードウェアが必要です。 OEM がVibrationEffect.Compositionで高度な触覚 UX を使用したい場合 (最新の触覚 API を最大限に活用するため)、このモデルを使用してハードウェアを実装することをお勧めします。

離散モデル

API で提供されるすべてのパブリック定数を適切な HAL 定数にマッピングすることをお勧めします。このプロセスを開始するには、デバイスが HAL で定義できる個別の振幅を持つ触覚波形の数を調べます。その概念に基づいて構成された特定の質問は次のようになります。人間が知覚できる振幅差を持つ単一インパルスの触覚効果を、私の電話でいくつ定義できますか?この質問に対する答えによって、マッピングが決まります。

HAL 定数の定義は、ハードウェアに依存するプロセスです。たとえば、エントリーレベルの電話には、単一の触覚波形を生成するハードウェア機能しかない場合があります。より高度なハードウェア コンポーネントを備えたデバイスは、より広い範囲の個別の振幅レベルを生成し、HAL で複数の触覚波形を定義できます。 HAL-API 定数マッピングは、HAL 定数を (ベースラインとして中程度の振幅を使用して) 取得し、そこからより強いまたはより弱い効果を配置します。

HAL 定数範囲とフィードバック振幅の図

図 5.振幅による HAL 定数範囲

個別の振幅を持つ HAL 定数の数が定義されたら、HAL 定数と API 定数を HAL 定数の数でマッピングします。このマッピング プロセスでは、1 つのインパルス API 定数を最大 3 つの個別の振幅レベル グループに分割できます。 API 定数がセグメント化される方法は、付随する入力イベントの UX 原則に基づいています。詳細については、ハプティクス UX デザインを参照してください。

HAL-API 定数マッピングの離散モデル

図 6. HAL-API 定数マッピング: 離散モデル

デバイスが個別の振幅を持つ 2 つの HAL 定数のみをサポートしている場合は、中振幅レベルと高振幅レベルの HAL 定数をマージすることを検討してください。実際のこの概念の例は、 EFFECT_CLICKEFFECT_HEAVY_CLICKを同じ HAL 定数にマッピングすることです。これは中程度の振幅レベルの HAL 定数になります。デバイスが個別の振幅を持つ1 つのHAL 定数のみをサポートしている場合は、3 つのレベルすべてを 1 つにマージすることを検討してください。

連続モデル

振幅スケーラビリティを備えた連続モデルを適用して、HAL 定数を定義できます。スケール係数 ( S ) を HAL 定数 ( HAL_H0HAL_H1 ) に適用して、スケーリングされた HAL ( HAL_H0 x S ) を生成できます。この場合、スケーリングされた HAL は、図 7 に示すように、API 定数 ( HAL_H0 x S1 = H0S1 = EFFECT_TICK ) を定義するためにマッピングされます。連続モデルの振幅スケーラビリティを使用することにより、デバイスは、独特のテクスチャを持つ少数の HAL 定数を格納できます。スケール係数 ( S ) を調整して振幅の変化を追加します。デバイス メーカーは、提供したい触覚テクスチャの数に基づいて、HAL 定数の数を定義できます。

テクスチャと振幅による HAL 定数範囲

図 7.テクスチャ別の HAL 定数範囲 (HAL_H0) と振幅スケール (S)

HAL-API 定数マッピングの連続モデル

図 8. HAL-API 定数マッピング: 連続モデル

連続モデルでは、異なる HAL 定数は、異なる振幅ではなく、異なる触覚テクスチャを表します。スケール係数 ( S ) で振幅を構成できます。ただし、テクスチャの知覚 (たとえば、シャープネス) は持続時間と振幅の知覚に関連しているため、テクスチャとスケール ファクターを組み合わせることをお勧めします (HAL-API マッピングの設計プロセスで)。

図 7 は、1 つの HAL から多数の API 定数への変動を振幅スケーラビリティで増加させることによる定数マッピングを示しています。

増加バリエーション 1

増加バリエーション 2

図 9.振幅スケーラビリティによる変動の増加

注:上の図は、定数マッピングの特定のインスタンスを示しているため、命名規則は架空のものです。このプロセスの実行は、デバイス メーカーごとに異なります。

VibrationEffect.CompositionPRIMITIVE_TICKPRIMITIVE_CLICKなどのすべてのスケーラブルな API 定数の場合、API 定数がaddPrimitive(int primitiveID, float scale, int delay)宣言されている場合、API 定数のエネルギー レベルはfloat scaleパラメーターに依存します。 PRIMITIVE_TICKPRIMITIVE_CLICKは、異なる HAL 定数を使用することで明確に区別して設計できます。テクスチャにバリエーションを追加する場合は、このアプローチをお勧めします。

ステップ 3: ハードウェアを評価する

ハードウェア評価では、この特定の評価のために効果 1、2、および 3 とラベル付けされた 3 つの触覚効果を定義します。

効果 1: 定義済みの短い触覚定数

VibrationEffect.EFFECT_CLICK定数は、ステップ 2 で提供される HAL-API マッピングのベースライン エフェクトまたは共通分母です。これは、最も使用されるエフェクトであるHapticFeedbackConstants.KEYBOARD_PRESSにマッピングされます。この効果を評価することは、明確な触覚に対するターゲット デバイスの準備状況を判断するのに役立ちます。

効果 2: 短いカスタム触覚効果

VibrationEffect.createOneShot(20,255)定数は、カスタム触覚効果用です。短い単一のカスタム インパルスの場合、継続時間を定義するための推奨される最大しきい値は 20 ミリ秒です。 20 ミリ秒を超える単一のインパルスは、バジーな振動として認識されるため、推奨されません。

短いカスタム触覚効果の波形

図 10.短いカスタム触覚効果

効果 3: 振幅の変化を伴う長いカスタム触覚効果

VibrationEffect.createWaveform(timings[], amplitudes[], int repeat)定数は、振幅変動のある長いカスタム エフェクト用です。カスタム触覚効果のさまざまな振幅を生成する機能は、豊富な触覚に対するデバイスの機能を評価する指標の 1 つです。推奨されるtimings []amplitudes []は、それぞれ{500, 500}{128, 255}であり、500 ミリ秒のサンプリング レートで 50% から 100% への振幅の増加傾向を示します。

振幅変動のある触覚効果波形

図 11.振幅変動のある長いカスタム ハプティック エフェクト

エフェクト 3 の振幅制御のハードウェア機能を確認するには、 Vibrator.hasAmplitudeControl()メソッドを使用します。意図したとおりに振幅を変化させてVibrationEffect.createWaveformを実行するには、結果がtrueでなければなりません。

主観的な触覚効果評価の流れ

図 12.触覚効果 1、2、および 3 の被験者評価

主観的評価の実行

一貫性をすばやく確認するには、まず主観的な評価を行います。主観的評価の目的は、触覚効果の振幅を観察して、デバイスが人間が知覚できる振幅の触覚を生成できるかどうかを判断することです。

この概念に基づいて構成された特定の質問は次のようになります。デバイスは、ユーザーが期待どおりに簡単に知覚できる触覚効果を生成できますか?この質問に答えると、ユーザーが感じることのできないわずかなハプティクスや、波形が意図したパターンを生成しない意図しないハプティクスなど、ハプティクスの失敗を回避するのに役立ちます。