Android 上的 MIDI:Java 和/或 AIR 库
Posted
技术标签:
【中文标题】Android 上的 MIDI:Java 和/或 AIR 库【英文标题】:MIDI on Android: Java and/or AIR libraries 【发布时间】:2010-05-26 15:09:12 【问题描述】:一段时间以来,我一直在考虑(重新)在 iPad 上构建一个应用程序,我将使用 Objective-C 和 DSMI 将 MIDI 信号发送到主机。这还不错(我的意思是,除了实际编写应用程序)。
现在我正在考虑开发适用于 android 平板电脑 (TBA) 的应用程序。
在 Java 中,有哪些选项可用于 MIDI 消息通信? 我对 javax.sound.midi 非常熟悉,但是我需要一个虚拟 MIDI 端口来向主机发送消息。
另一方面,如果应用程序是在 Adobe AIR 中完成的,我有哪些可用的选项与 MIDI 通信?
显然,另一种选择是通过 TCP/IP 套接字向 Java 主机发送/接收消息,并以这种方式交谈,但这听起来有点麻烦......或者可能不是?毕竟,DSMI 确实使用了主机程序。
【问题讨论】:
【参考方案1】:javax.sound.midi 在 android 中不可用。
在 android 中访问 midi 功能的唯一途径是通过 JetPlayer 类,它非常适合在游戏中使用。 Android会播放midi文件,但不清楚它使用什么代码路径,无法从内存写入midi硬件。
在我制作的一个应用程序中,我需要根据 GUI/用户交互动态播放音符,最终不得不使用样本和音高过滤器来创建音符。
听起来你需要做的就是将 DSMI 移植到 android,它的open source iPhone 库看起来很简单,移植应该不难。
编辑:
在考虑了这一点之后,无论如何使用 javax.sound.midi 或 AIR 中存在的任何 midi 功能都不会获得任何好处。您需要做的就是通过网络链接将 MIDI 消息传递到另一个负责与实际 MIDI 合成器设备通信的设备。这正是 DSMI 所做的。将 iPhone libdsmi 移植到 Android 是您需要做的,它只有 2 个源文件和 2 个标头。 1 处理非常简单的 MIDI 消息格式,几乎可以逐行转换为 java,而另一个处理与 DSMI 服务器的网络连接,需要重写以使用 Android 语义来创建网络连接。
【讨论】:
谢谢,看起来不错 (tinyurl.com/2axprlj).... 甚至可以跳过操作系统类。然后我可以证明我的价值,获得我需要的功能,并且仍然主要避免使用 Objective-C。以上是关于Android 上的 MIDI:Java 和/或 AIR 库的主要内容,如果未能解决你的问题,请参考以下文章
在 android (java) 中启用/禁用 MIDI 通道
Android音视频API(android.media.midi):概览
使用 MetaMessage getData() 和/或 MetaMessage 值从 java 中的 MIDI 文件中提取速度?