[英]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.