2010-05-28 126 views
0

我需要從複音中提取音樂功能(音符細節 - >音高,持續時間,節奏,響度,音符開始時間)(有2個高音和低音的分數 - 低音也可以有和絃)MIDI文件。我正在使用jMusic API從MIDI文件中提取這些細節。我的方法是遍歷每個分數,分成部分,然後是短語,最後記錄並提取細節。從MIDI中提取音符

用我的方法,首先讀取所有的高音音符,然後是低音音符 - 但是沒有捕捉到和絃(即只有一個和絃單音),並且我無法確定從哪個點開始是低音筆記。 因此,我嘗試的是獲取音符起始點(即音符開始播放的時間) - 因爲開始時高音和低音音符的開始時間應該相同 - 但我無法提取音符開始時間使用jMusic API。對於每個音符,它顯示0.0。

有什麼方法可以識別音符的聲音(高音或低音)?還有和絃的所有音符? MIDI中儲存的每個音符的聲音或音符如何開始?這是不同的每個MIDI文件?

任何洞察力,非常感謝。在此先感謝

+0

我遇到了你的條款問題。 #1:「2高分... MIDI文件」。什麼是「分數」?你的意思是2個「樂譜」,高音和低音,如鋼琴樂譜?但是MIDI沒有「樂譜」或「樂譜」,它有「通道」(每個通道是不同的樂器),每個通道可能是複音(一次播放多個音符)。說明? – 2010-05-28 14:26:19

+0

是的,我指的是高音和低音。我不知道MIDI沒有分數。感謝您澄清我的誤解。 但是,你怎麼知道某個音符屬於高音還是低音?這些頻道是預定義的還是取決於音符?一個通道可以代表幾個音符嗎?如果是的話,他們可以用來表示和絃? 我真正需要的是從MIDI中提取這些音樂特徵,以便我可以對另一組音樂特徵進行比較 - 以服務於鋼琴演奏評估者的目的。 感謝您關心康拉德。 – Dolphin 2010-05-28 16:02:53

+0

你還沒有解釋「分數」是什麼;因爲你使用這個詞的方式與我所知道的「樂譜」這個詞似乎並不相同。 – 2010-05-28 22:31:52

回答

2

你可能想看看這個問題:Actual note duration from MIDI duration

當從MIDI文件一種可能的方法來提取筆記進行了討論。

考慮一個MIDI文件可以在多個軌道上分割(「類型1」midifile)。

一旦確定了音符,識別和絃仍然會很棘手。假設你有3個音符:C,E,G同時發生(即在一個小節的同一點被識別爲聲音)。他們什麼時候被認爲是C大調?

  • 演奏上由相同的儀器(即使在不同的頻道)
  • 起到對同一信道,即使他們出現在不同的軌道

Midifile格式是發揮相同的信道

  • 非常簡單(甚至可能太簡單了!!)我建議你看看它的描述:http://duskblue.org/proj/toymidi/midiformat.pdf

  • +0

    感謝您的洞察雷莫。我正在瀏覽您的鏈接 - 需要一點時間才能完成。 我只爲鋼琴 - 這麼單一的樂器 - 相同的頻道做這個。 因此,如果兩個音符一起播放(高音和低音),是同一頻道中的兩個音符?那麼對於和絃來說,還有和絃中的所有音符都在同一個通道/音軌中?這對所有MIDI文件都是一樣的,還是每個MIDI文件都不同 - 取決於它如何寫入MIDI?軌道和頻道有什麼區別?同時,我會閱讀MIDI規範。 高級謝謝 – Dolphin 2010-06-02 00:11:16

    +1

    Midifile沒有「高音」或「低音」譜的概念。注意60是中間的C(低音和高音譜號之間的一個分數),你相應地放置其他音符。注意不需要在同一個通道上,也不必在同一個軌道上,這取決於midifile是如何創建的。這聽起來比實際上更復雜。如果您不想直接處理位和字節,則可以使用midi-to-text實用程序並對midifile的文本表示進行分析。你可以在這裏找到這樣的工具之一:http://www.midiox.com/(在頁面中查找「text to midi」) – 2010-06-02 08:31:57

    +0

    嗨雷莫 - 你能否建議一個從midi中提取音符發音的起點?你的建議 - 可以從Java Sound API平易近人嗎?或者我必須從頭開始編碼?我需要先找到一個開始的途徑。對延遲評論和打擾抱歉。提前致謝。 – Dolphin 2010-06-10 13:27:24