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 端口来向主机发送消息。

另一方面,如果应用程序是在 Adob​​e 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):概览

如何将midi从java程序发送到OSX上的IAC总线

使用 MetaMessage getData() 和/或 MetaMessage 值从 java 中的 MIDI 文件中提取速度?

Windows Vista/7 上的 SDL_Mixer MIDI 音量问题

用于显示和播放 MIDI 文件的 Java 小程序