GameInput 公开的触觉功能与 Windows 音频系统集成,以确保将高性能且可靠的波形数据流式传输到兼容设备。 支持触觉的设备对音频的要求与一组普通的桌面扬声器或耳机非常相似。 GameInput 使用约定和制造商指定的元数据的组合,将输入设备与用于触觉播放的音频终结点链接起来。
要求
设备必须在 Windows 中被识别为音频源。 连接介质 (USB、蓝牙®等 ) 并不重要。
设备必须公开不超过一个触觉终结点。
设备必须公开不超过 8 个触觉位置。
设备在连接后不得修改其触觉功能。
设备不能有多个格式相同的音频终结点,每个样本 (位和每秒样本数) 。
设备必须为其音频终结点提供与设备的其余部分相同的 容器 ID 。
设备必须具有注册表项才能显式标识触觉终结点。 其格式如下所示:
- 触觉设备在 的注册表中
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\GameInput\Devices枚举。 - 特定设备密钥是供应商 ID、产品 ID、使用情况页和使用 ID 的组合,格式为十六进制字符串。
-
HapticSamplesPerSecond是一个 DWORD 值,标识触觉终结点格式 (Hz) 每秒样本数。 -
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 使用内存中的 little endian 表示形式序列化到注册表。