2010-03-03 134 views
4

我想知道關於可能被用來在MIDI文件執行一些簡單任務的開源庫:開源MIDI庫

  1. 讀取文件中的一個音符 - 或弦 - 一次;
  2. 提取給定的樂器以在新文件中單獨重新編碼;
  3. 允許產生一個「可定製」的分數 - 我的意思是我應該能夠改變從midi使用庫生成樂譜的方式......我認爲這將需要與Lilypond或Musixtex。

我真的沒有首選語言,只要讓應用程序跨平臺不是太痛苦。其他建議是值得歡迎的 - 現在更好地學習它,而不是當我已經寫了很多代碼時。到目前爲止,我一直在試圖挖掘MuseScore的(C++)源代碼,但似乎GUI代碼滲透了大多數文件,雖然發現相關文件很容易,但我很難提取我需要的東西(我是目前只是針對一個命令行應用程序,後面我會介紹接口)。

任何想法?

謝謝!

+0

我在6年前簡要地調查了這一點。 MIDI文件規範並不那麼難(如果我記得有3種風格),但我從來不能理解他們使用的壓縮方案,其中涉及讀取高階位並理解將要在那塊。我想這就是我爲什麼是前端編碼器的原因。 :) – Robusto 2010-03-03 01:13:36

+0

看到這個問題:http://stackoverflow.com/questions/3231/c-c-library-for-reading-midi-signals-from-a-usb-midi-device – 2010-04-15 16:09:09

回答

2

那麼,我剛開始,但this(在Python中)似乎很有前途。

2

如果你還在研究項目和語言不成問題,你可以嘗試Python的跨平臺music21,它可以將MIDI文件解析成Note,Chord,Instrument等對象,讓你可以操縱分數,然後R/T回MIDI或輸出到Lilypond等(完全公開,我是該工具包的作者;但我不知道許多其他語言的MIDI會將Lilypond同時讓您有機會將MIDI元素作爲對象在此期間進行操作)。

示例代碼搞砸了所有的樂器聲音的MIDI文件,然後發揮它,並從中做出lilypond.pdf:

import music21 
mf = music21.converter.parse('pathToMidiFile.mid') 
for x in mf.recurse(): 
    if 'Instrument' in x.classes: 
     x.midiProgram = (x.midiProgram * 2) % 128 
mf.show('midi') 
mf.show('lily.pdf') 

希望有所幫助。

+0

感謝您的領導。我完成了我想要構建的軟件,但很高興知道您的工具箱存在,有一天我可能需要它來安裝另一個應用程序。 – 2012-10-05 06:18:23