适用于Python的简单跨平台MIDI库

时间:2009-02-20 11:54:37

标签: python audio midi

我想构建一个创建MIDI声音的小应用程序。我从来没有处理过编程中的声音,所以我想从一些基本的东西开始,并且有很好的文档。我想坚持使用Python,因为我最熟悉它并且最初不想压倒自己。

我的时间在Windows和Ubuntu之间分成大约50/50,因此在两个平台上“正常工作”的确非常有用。

有什么建议吗?

7 个答案:

答案 0 :(得分:34)

MIDIUtil库(在Google Code上托管here)可以满足您的需求:从纯Python库中编写MIDI文件。关于它的一件好事(并且完全披露:我是作者)是你不必跟踪低级MID事件,例如音符开和音符关:它会为你处理它们。

作为编写笔记的示例,您可以执行以下操作:

MyMIDI = MIDIFile(1)
track = 0
channel = 0
pitch = 60
time = 0
duration = 1
volume = 100
MyMIDI.addNote(track,channel,pitch,time,duration,volume)

希望这有帮助

答案 1 :(得分:10)

我一直在寻找一个纯Python库来生成一个MIDI文件,mxm's Python MIDI library就是这样。

this dzone snippet开始,上面的图书馆有一个单一文件版本,smidi.py(后代为gist'd here

用法非常简单:

>>> import smidi
>>> m = smidi.MidiOutFile('out.mid')
>>> m.header()
>>> m.start_of_track()
>>> m.update_time(0)
>>> m.note_on(note=0x40)  # single note
>>> m.update_time(192)
>>> m.note_off(note=0x40) # stop it after 192
>>> m.update_time(0)
>>> m.end_of_track()
>>> m.eof()

大概适用于Windows(因为原始示例使用C:\out.mid作为输出文件名),我在OS X上测试了它

答案 2 :(得分:8)

pyPortMidi是PortMidi的Python包装器,被描述为“用于实时MIDI控制的跨平台C库”。我自己没有用过,但看起来非常有前景。明确提到能够实时发送MIDI数据。

答案 3 :(得分:7)

如果您只需要生成Midi或处理midi文件,请尝试mingus, 这是一个很棒的包,它还允许更高的抽象,如和弦,和弦进行,音阶等。

答案 4 :(得分:5)

我尝试了wiki http://wiki.python.org/moin/PythonInMusic上列出的八个软件包。 我找到了music21(http://web.mit.edu/music21/

的那个
  • 最全面的
  • 最好的教程
  • 最容易在Windows上安装

但至于你的简单要求,我认为这不是最简单的。但我无法让任何其他程序以健壮的方式阅读midi文件(我有各种奇怪和精彩的midi文件格式)#/ p>

答案 5 :(得分:4)

已经在pyGame 1.9中添加了Midi支持(in和out),虽然它主要处于开发阶段并且还没有很好的文档记录,但是它可以工作。

在pyGame后继者pgreloaded(或pygame2)中也正在开发Midi支持。

另请注意,尽管pyGame在标题中有“游戏”,但它的用途远不止游戏设计。

答案 6 :(得分:-3)

请看cSounds