簡體   English   中英

Java從MIDI序列獲取樂器列表

[英]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");
}

來源: javax.sound.midi.Sequence

顯然,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;
}

來源: javax.sound.midi.Sequence

那么,有什么可以做的嗎?
還有其他獲取樂器的方法嗎?
為什么不執行呢?
自2005年以來,實際上沒有人需要嗎?

要使MIDI設備選擇樂器,您需要向其發送一個Program Change消息(該消息還將考慮Bank Select控制器的當前設置)。

要獲得序列中所有補丁的列表,請遍歷所有消息的列表,並收集所有程序號(以及當時有效的所有庫號)。

如果您的實現未執行此操作,則必須手動執行此操作。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM