HAL と API の間で定数をマッピングする

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

  • 非連続モデル(簡単)

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

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

非連続モデル

API で提供されるすべてのパブリック定数を、適切な HAL 定数にマッピングすることをおすすめします。このプロセスを開始するには、デバイスが HAL で定義できる、非連続の振幅を持つ触覚波形の数を確認します。この概念に基づいた具体的な質問は次のようになります。「1 台のスマートフォンに、人間が知覚できる振幅差を持つシングル インパルス触覚衝撃をいくつ定義できますか?」この質問に対する回答によってマッピングが決まります。

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

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

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

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

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

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

デバイスが、非連続の振幅を持つ 2 つの HAL 定数のみをサポートしている場合は、中振幅レベルと高振幅レベルの HAL 定数を統合することを検討してください。この概念の実例としては、EFFECT_CLICKEFFECT_HEAVY_CLICK を同じ HAL 定数(中振幅レベルの HAL 定数)にマッピングすることが挙げられます。デバイスが、非連続の振幅を持つ 1 つの HAL 定数のみをサポートしている場合は、3 つのレベルをすべて 1 つに統合することを検討してください。

連続モデル

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

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

図 16. テクスチャ(HAL_H0)と振幅スケール(S)による HAL 定数の範囲

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

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

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

図 18 は、振幅スケーラビリティによって 1 つの HAL から多くの API 定数まで変動を増やす定数マッピングを示しています。

変動増加 1

変動増加 2

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

スケーラブルな API 定数(VibrationEffect.CompositionPRIMITIVE_TICKPRIMITIVE_CLICK など)はすべて、API 定数が addPrimitive(int primitiveID, float scale, int delay) を通じて宣言されている場合、API 定数のエネルギー レベルが float scale パラメータによって異なります。PRIMITIVE_TICKPRIMITIVE_CLICK は、異なる HAL 定数を使用することで明確に区別して設計できます。テクスチャに変動を追加する場合は、この方法をおすすめします。