我想建立一个能够产生MIDI声音的小应用程序。我以前从未在编程中处理过声音,因此希望从一些基础且有良好文档支持的东西开始。我想坚持使用Python,因为我最擅长它,并且不想给自己带来太多压力。
我的时间大约平分在Windows和Ubuntu上,因此寻找一个“只需正常工作”的跨平台库会非常有帮助。
有什么建议吗?
我想建立一个能够产生MIDI声音的小应用程序。我以前从未在编程中处理过声音,因此希望从一些基础且有良好文档支持的东西开始。我想坚持使用Python,因为我最擅长它,并且不想给自己带来太多压力。
我的时间大约平分在Windows和Ubuntu上,因此寻找一个“只需正常工作”的跨平台库会非常有帮助。
有什么建议吗?
MIDIUtil库(托管在Google Code上这里)可以实现您的需求:从纯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)
希望这能帮到你。for pitch in pitches: midi.addNote(.., pitch, ...)
- sam boosalis我在寻找一个纯Python库来生成MIDI文件,mxm的Python MIDI库正是这样一个库。
从这个dzone代码片段中,有一个单文件版本的上述库,即smidi.py(这里为后世留存)
使用非常简单:
>>> 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上测试过。
pyPortMidi是PortMidi的Python封装,PortMidi被描述为“用于实时MIDI控制的跨平台C库”。虽然我自己没有使用过它,但它看起来非常有前途。明确提到可以实时发送MIDI数据。
player.write_short(0xE0, 0x00, 0x60)
:/ - endolith我在维基上列出的八个包中尝试了一下,链接地址为http://wiki.python.org/moin/PythonInMusic。
我发现其中一个名为music21 (http://web.mit.edu/music21/) 的包:
但是关于你要求的简单性,我认为它不是最简单的。但是我无法让其他程序以强大的方式读取midi文件(我有各种奇怪而美妙的midi文件格式)。
在pyGame 1.9中新增了Midi支持(输入和输出),尽管它主要处于开发阶段,且文档不是很完善,但它可以工作。
pgreloaded(或pygame2)也正在开发Midi支持。
还请注意,尽管pyGame标题中有“game”一词,但其用途远远超出了游戏设计。
看看cSounds。