【问题标题】:Android and Guitar Hero controllerAndroid 和吉他英雄控制器
【发布时间】:2012-03-13 13:32:35
【问题描述】:

我知道最新版本的 Android(Honeycomb 和 ICS)支持游戏杆和游戏手柄。 Guitar Hero(和 Garage Band)控制器本质上是 USB HID 设备,对吧?

所以我的问题: 是否可以从 Android 设备上的吉他英雄(或摇滚乐队)控制器接收数据(按钮点击)? Android 会将其理解为游戏手柄输入吗?

附:我所需要的只是在我的游戏中检测来自塑料吉他音柱上这五个按钮的输入。

【问题讨论】:

  • 另一种选择是破解吉他手,让 Arduino 充当 Android 和吉他手之间的中间人。

标签: android hid joystick guitar gamepad-api


【解决方案1】:

一个很好的起点是查看 Frets On Fire 的 linux 源代码,它支持一些 Guitar Hero 控制器。

Frets on Fire: SourceForge

SVN:https://fretsonfire.svn.sourceforge.net/svnroot/fretsonfire

似乎很难普遍支持来自不同平台的所有控制器。每个控制台都有自己的协议,但看起来JoyStick to keyboard emulation 在带有 PS3 控制器的 PC 上是可能的。第二个链接上有一个 PS3 控制器的配置文件可能会有所帮助,它适用于 JoyToKey(它不是开源的),但配置中的一些值可能会对您有所帮助。

【讨论】:

    【解决方案2】:

    嘿,这是一个非常酷的主意。从这里开始:

    http://developer.android.com/guide/topics/usb/host.html

    然后,看看这个示例:

    http://developer.android.com/resources/samples/USB/MissileLauncher/index.html

    在该示例中,有一个名为setDevice(UsbDevice device)的方法

    如果我要实现这个,我会从 MissileLauncher 项目的副本开始,然后修改这个 setDevice 方法。我会记录所有我能找到的关于UsbDevice device 的信息,并尝试在setDevice 方法中试验这些条件:

    if (ep.getType() != UsbConstants.USB_ENDPOINT_XFER_INT) {
    ...
    if (intf.getEndpointCount() != 1) {
    

    虽然MissileLauncher 使用这个type 和这个endpointCount,但garageband 控制器很可能会有不同的值

    查看run 方法以查看来回通信​​的示例

    免责声明:我不知道这是否可行。我还看到博客说这不能做到。

    【讨论】:

      【解决方案3】:

      我的猜测是它应该检测数据。这甚至可以在现有的 Android 设备上实现 - 但它对 Android Market 不友好。

      要在非 4.0 设备上完成此操作,您必须为 USB 端口提供替代电源。通常这可以通过一个便宜的、漏电的 USB 集线器来完成。该设备还必须植根。完成后,您需要创建一个到设备外壳的接口,以在 Dalvik VM 之外启动像 C 这样的本地语言。使用您的 C 绑定到适当的套接字,您应该能够来回传输数据。您可能还需要编译内核模块以提供驱动程序支持。

      就像我说的,这是对 4.0 以下设备的完整破解。但这是可能的。

      【讨论】:

        猜你喜欢
        • 2015-08-24
        • 2012-01-02
        • 2019-03-01
        • 2011-05-29
        • 2011-07-24
        • 1970-01-01
        • 2013-01-22
        • 2017-05-30
        • 1970-01-01
        相关资源
        最近更新 更多