次の方法で共有


GameInput の触覚

GameInput によって公開される触覚機能は、Windows オーディオ システムと統合され、互換性のあるデバイスへの波形データのパフォーマンスと堅牢なストリーミングを保証します。 触覚対応デバイスのオーディオ要件は、通常のデスクトップ スピーカーまたはヘッドホンのセットとよく似ています。 GameInput では、規則と製造元が指定したメタデータの組み合わせを使用して、入力デバイスと、触覚再生に使用するオーディオ エンドポイントをリンクします。

要件

  1. デバイスは、Windows でオーディオ ソースとして認識されている必要があります。 接続メディア (USB、Bluetooth® など) は関係ありません。

  2. デバイスは、触覚エンドポイントを 1 つのみ公開する必要があります。

  3. デバイスは、8 つ以下の触覚位置を公開する必要があります。

  4. デバイスは、接続後に触覚機能を変更することはできません。

  5. デバイスには、同じ形式 (サンプルあたりのビット数と 1 秒あたりのサンプル数) を持つ複数のオーディオ エンドポイントを含めることはできません。

  6. デバイスは、オーディオ エンドポイントのコンテナー ID をデバイスの残りの部分と同じにする必要があります。

  7. 触覚エンドポイントを明示的に識別するには、デバイスにレジストリ エントリが必要です。 その形式は次のとおりです。

    • 触覚デバイスは、HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\GameInput\Devices のレジストリに列挙されます。
    • 特定のデバイス キーは、ベンダー ID、製品 ID、使用状況ページ、使用状況 ID の組み合わせで、16 進数の文字列として書式設定されます。
    • HapticSamplesPerSecond は、触覚エンドポイント形式の 1 秒あたりのサンプル数 (Hz) を示す DWORD 値です。
    • HapticsBitsPerSample は、触覚エンドポイント形式のサンプル ビット数 (サンプル サイズ) を示す DWORD 値です。
    • HapticLocations は、触覚位置 GUID の BYTE 配列です。 この配列には、触覚チャネル マッピングに対応する 1 ~ 8 個の GUID を含める必要があります。

    これをわかりやすくするために、次のサンプル デバイスを検討してください:

    フィールド
    ベンダー ID 0x045e
    製品 ID 0x1234
    使用状況ページ 0x0001
    使用状況 ID 0x0005
    サンプルの頻度 0x0fa0
    サンプル サイズ 0x0010
    触覚の場所 GAMEINPUT_HAPTIC_LOCATION_GRIP_LEFT, GAMEINPUT_HAPTIC_LOCATION_GRIP_RIGHT

    関連付けられている触覚レジストリ エントリは次のようになります:

    Windows Registry Editor Version 5.00
    
    [HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\GameInput\Devices\045E123400010005]
    "HapticSamplesPerSecond"=dword:00000fa0
    "HapticBitsPerSample"=dword:00000010
    "HapticLocations"=hex:c2,07,c7,08,bb,66,6c,40,a8,4a,df,e0,85,12,0a,92,77,0b,5a,\
    15,b2,8b,db,40,86,90,b6,d4,11,26,df,c1
    

触覚の場所

現時点では、一般的に使用するために、次の触覚位置 GUID が定義されています:

// { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }
DEFINE_GUID(GAMEINPUT_HAPTIC_LOCATION_NONE, 0x00000000, 0x0000, 0x0000, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00);

// { 0xc2, 0x07, 0xc7, 0x08, 0xbb, 0x66, 0x6c, 0x40, 0xa8, 0x4a, 0xdf, 0xe0, 0x85, 0x12, 0x0a, 0x92 }
DEFINE_GUID(GAMEINPUT_HAPTIC_LOCATION_GRIP_LEFT, 0x08c707c2, 0x66bb, 0x406c, 0xa8, 0x4a, 0xdf, 0xe0, 0x85, 0x12, 0x0a, 0x92);

// { 0x77, 0x0b, 0x5a, 0x15, 0xb2, 0x8b, 0xdb, 0x40, 0x86, 0x90, 0xb6, 0xd4, 0x11, 0x26, 0xdf, 0xc1 }
DEFINE_GUID(GAMEINPUT_HAPTIC_LOCATION_GRIP_RIGHT, 0x155a0b77, 0x8bb2, 0x40db, 0x86, 0x90, 0xb6, 0xd4, 0x11, 0x26, 0xdf, 0xc1);

// { 0x96, 0xd8, 0xe4, 0x8d, 0x59, 0x55, 0x81, 0x40, 0x86, 0xe5, 0x17, 0x24, 0xcc, 0x07, 0xc6, 0xbc }
DEFINE_GUID(GAMEINPUT_HAPTIC_LOCATION_TRIGGER_LEFT, 0x8de4d896, 0x5559, 0x4081, 0x86, 0xe5, 0x17, 0x24, 0xcc, 0x07, 0xc6, 0xbc);

// { 0x57, 0xb5, 0x0c, 0xff, 0xf5, 0x3a, 0x6b, 0x40, 0x8b, 0x0f, 0x55, 0x5a, 0x2d, 0x92, 0xa2, 0x20 }
DEFINE_GUID(GAMEINPUT_HAPTIC_LOCATION_TRIGGER_RIGHT, 0xff0cb557, 0x3af5, 0x406b, 0x8b, 0x0f, 0x55, 0x5a, 0x2d, 0x92, 0xa2, 0x20);

上記の例では、GUID はメモリ内のリトル エンディアン表現を使用してレジストリにシリアル化されることに注意してください。

関連項目

GetHapticInfo

GameInputHapticInfo

GameInput の概要

Windows オーディオ