在 android (java) 中启用/禁用 MIDI 通道

Posted

技术标签:

【中文标题】在 android (java) 中启用/禁用 MIDI 通道【英文标题】:Enable/Disable MIDI channel in android (java) 【发布时间】:2013-02-28 20:41:21 【问题描述】:

我正在 android 中开发一个简单的应用程序,它可以进行 MIDI 播放,这很好。 我想知道是否可以使用 android/java 内置 API 启用/禁用 MIDI 通道,如果可以,如何?我正在努力实现此功能。

我在网上发现java包“javax.sound(.midi)”包含在早期版本的android系统中,但后来被删除了。我似乎在互联网上找不到任何提供我需要的功能的库。 我遇到的一个库允许我在 MIDI 中添加和删除轨道,但轨道与通道不同。

我有一个 MediaPlayer 对象,将 midi 文件设置为数据源,它确实播放文件,但我真的想实现一个功能来启用/禁用 16 个标准 midi 通道中的任何一个。它不需要是实时的,任何解决方案都是可以接受的,只要它不需要服务器端。就像如果我需要修改现有的 MIDI 文件,将其写入磁盘并重新开始播放,这不是问题。任何建议/经验:\!?

谢谢

【问题讨论】:

【参考方案1】:

这个库可以满足你的要求:https://code.google.com/p/android-midi-lib/

读取文件。遍历每个轨道中的事件,检查事件的通道,删除指定通道上的事件。把它写出来。玩。欢欣鼓舞。

【讨论】:

非常感谢,当我收到并阅读此回复时,我已经使用您提到的同一个库自己完成了。虽然效率不高,迭代和写入文件有一些延迟,破坏了实时播放的体验 @SpeedDemon 我使用了您引用的库并使用 MediaPlayer 播放了 MIDI 文件。我在任何 MIDI 通道上都没有成功(除了钢琴)。你用过媒体播放器吗?如果不是你用了什么?如果是这样,您使用了什么技巧来启用其他频道? @stephen 在库中,您有一个从 midi 中删除音符的功能。您可以在 midi 中迭代音符的集合并检查音符在哪个频道上,如果它在您要禁用的频道上,则将其删除。您需要将 midi 写入磁盘,然后使用 MediaPlayer 播放。我可以稍后通过电子邮件向您发送对我有用的代码 sn-p @SpeedDemon 感谢您的回复。我意识到我假设 MIDI 通道被映射到各种 MIDI 声音。实际上,您可以选择通过程序更改为每个通道分配声音。但默认情况下不会分配它们。

以上是关于在 android (java) 中启用/禁用 MIDI 通道的主要内容,如果未能解决你的问题,请参考以下文章

在 Android 4 中启用 android:largeHeap,在 Android 2.3 中禁用它

如何在 Android SDK 中启用/禁用 3G/2G

如何在源代码中禁用/启用 android 接收器?

Android:以编程方式启用/禁用应用小部件

如何在android studio上以编程方式检查自动启动权限是启用还是禁用

如何在Android 6.x上以编程方式启用或禁用GPS?