如何在不兼容的设备上使用 android midi USB 堆栈

Posted

技术标签:

【中文标题】如何在不兼容的设备上使用 android midi USB 堆栈【英文标题】:How to use android midi USB stack with non-compliant devices 【发布时间】:2019-11-21 02:33:07 【问题描述】:

我有一个可用的 android 应用程序,它使用专有的 java midi 实现通过 USB 与不兼容的 midi 设备通信。我现在想迁移到标准的 android midi USB 堆栈,但无法确定如何添加/扩展必要的测试以允许将不兼容的设备检测为 midi 设备。

不兼容的设备不提供“音频设备”类型的 USB 接口(这是兼容 MIDI 类所必需的),而是提供一些“供应商特定”接口,代表 midi 端口。因此,android midi 堆栈(例如,使用示例 MidiScope)看不到设备。

USB 设备连接上的当前专有堆栈使用特定供应商连接详细信息的先验知识来确定连接确实是 MIDI 设备,然后使用正确的 USB 接口创建 MIDI 设备连接事件。

我想重现这个连接逻辑,但是使用android的midi堆栈,但是找不到传入的USB连接被确定为midi设备的位置,从而传递给android的midi服务。我检查了 UsbDeviceManager、UsbHostManager、UsbService、MidiService、MidiManager、MidiDeviceInfo、MidiDeviceService 等的 android 源代码,但看不到这个“midi 设备验证/过滤”发生在哪里。

如果有人能指出我如何实现目标的正确方向,我将不胜感激。

【问题讨论】:

请先尝试一下,然后提出问题。 那么您是在尝试展示android app custom java midi implementation as a Android Framework MidiService,还是在尝试构建自己的自定义 ROM 并使您的不合规设备显示为合规设备? 这是什么设备? 【参考方案1】:

Android 的 UsbAlsaManager.java 只使用 Linux MIDI 设备。

因此,为了能够在 Android 中访问您的设备,您必须添加对 Linux USB MIDI driver 的支持,然后等到新的内核版本出现在您的 Android 设备上。

【讨论】:

以上是关于如何在不兼容的设备上使用 android midi USB 堆栈的主要内容,如果未能解决你的问题,请参考以下文章

Android上的Midi事件路由

PackageManager 说设备没有 FEATURE_MIDI

BLE MIDI开发 BLE MIDI 硬件电子乐器设备需要遵循的相关规范 ( 资料收集 )

如何使 Android 应用程序与 Android Studio 中的所有 6735 Android 设备兼容 [关闭]

如何在不使用 Eclipse 的情况下在 Android 上安装/替换

Unity3d 中集成的 android MIDI 驱动程序没有声音