[英]Java get instrument list from MIDI Sequence
我需要从常规MIDI文件中获取音符,时间戳记和乐器列表以及所有内容。
几乎所有事情都完成了,但是我还需要与每个音轨相对应的每把乐器,否则如果我不知道它们属于哪一乐器,这些音符就没用了。
看来这是通过获取音色列表来完成的,一个音色在MIDI序列使用的音库中具有乐器代码。
这似乎很简单,但是当我尝试在Sequence
对象上使用getPatchList()
,它将返回一个空数组。
问题?:似乎至少在我发现的情况下,这实际上从未在Java MIDI库(??)中实现过:
/**
* Get an array of patches used in this sequence.
*
* @return an array of patches used in this sequence
*/
public Patch[] getPatchList()
{
// FIXE: not quite sure how to do this yet.
throw new UnsupportedOperationException("Can't get patch list yet");
}
显然,Android开发人员也无法弄清楚。 请注意,这是一个普通的Java程序,与Android无关:
public Patch[] getPatchList() {
//FIXME
/*
* I don't understand how to works this method, and so
* I simply return an empty array. 'patches' initializes
* in the constructor as empty vector
*/
Patch[] patch = new Patch[patches.size()];
patches.toArray(patch);
return patch;
}
那么,有什么可以做的吗?
还有其他获取乐器的方法吗?
为什么不执行呢?
自2005年以来,实际上没有人需要吗?
要使MIDI设备选择乐器,您需要向其发送一个Program Change消息(该消息还将考虑Bank Select控制器的当前设置)。
要获得序列中所有补丁的列表,请遍历所有消息的列表,并收集所有程序号(以及当时有效的所有库号)。
如果您的实现未执行此操作,则必须手动执行此操作。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.