用于处理标准midi文件的工具包
miditk-smf的Python项目详细描述
用于处理标准MIDI文件的工具包
快速启动
安装:
$ pip install miditk-smf
用法:
frommiditk.smfimportMidiFileWriter# Open file for writing in binary mode.withopen('minimal.mid','wb')assmf:# Create standard MIDI file writer.midi=MidiFileWriter(smf)# Write file and track header for Type 0 file, one track, 96 pulses per# quarter note (ppqn). These are also the default parameter values.midi.header(format=0,num_tracks=1,tick_division=96)midi.start_of_track()# Set tempo to 120 bpm in µsec per quarter note.# When no tempo is set in the MIDI file, sequencers will generally assume# it to be 120 bpm.midi.tempo(int(60000000/120))# Add MIDI events.midi.note_on(channel=0,note=0x40)# Advance 192 ticks (i.e. a half note).midi.update_ticks(192)midi.note_off(channel=0,note=0x40)# End track and midi file.midi.end_of_track()midi.eof()
有关更多示例,请参见下面的Usage examples部分。
概述
miditk-smf是用于分析和生成 标准MIDI文件(SMF)。该包是几个计划包的一部分 在公共顶级包命名空间miditk下。这个包裹主要是 提供用于处理标准MIDI文件的miditk.smf子包。 附加的带有更专业midi库和工具的子包将是 以后作为单独的包分发版分发。
兼容性
miditk-smf适用于python 2.7、python 3.4+和pypy2和py3。
安装
miditk-smf可通过pip从Python Package Index安装:
$ pip install miditk-smf
它作为源发行版和 所有受支持的python版本和操作系统。这只取决于 python标准库和第三方模块six。
包装内容
- miditk.common
- 子包使用的MIDI规范中的常量集合 以及用于处理MIDI事件的常规数据类型。
- miditk.smf
- 一个基于事件的标准midi文件(smf)解析和生成框架。
- miditk.smf.api
- 基本事件处理程序类,可以为特殊事件子类 处理。
- miditk.smf.converters
- 转换MIDI中使用的特殊数据类型的函数集合 字节字符串之间的文件。
- miditk.smf.parser
- 主二进制MIDI文件数据分析器。
- miditk.smf.reader
- 将解析器与事件处理程序类结合起来。
- miditk.smf.sequence
- 事件处理程序,它将MIDI文件中的所有MIDI事件存储在 MIDISequence容器类。
- miditk.smf.writer
- 将MIDI事件写入标准MIDI文件的事件处理程序。
用法示例
下面的部分包含一些代码示例,其中演示了 包中不同模块的使用场景。有关更多示例,请参见 还有源发行版的examples目录中的脚本。
分析标准midi文件
miditk.smf模块提供了MidiSequence容器类,该类 使用自己的MIDI事件处理程序类收集所有信息和事件 从分析MIDI文件。使用MidiSequence.fromfile()类方法 分析标准MIDI文件。
然后可以使用返回的^{tt16}的几个方便方法$ 实例访问有关MIDI文件属性或事件的信息。
frommiditk.smfimportMidiSequence# Do parsingsequence=MidiSequence.fromfile(sys.argv[1])# Print some info from the MIDI file header,# e.g. number of tracks, events sequence name.print(sequence)# Print a list of events with event type, data and timestamp.sequence.dump_events()# Iterate over all sysex events in track 0.# If track is not specified, sysex_events() yields all sysex events# in all tracks.forevinsequence.sysex_events(track=0):print"Sysex event (%i bytes) @ %.2f"(len(ev.data),ev.timestamp)# Iterate over all events sorted by timestamp and then track.forevinsequence.events_by_time():handle_event(ev)
更改流中的MIDI事件
基于事件的解析允许在读取MIDI事件时处理它们(或 通过MIDI接收)。您需要定义 miditk.smf.BaseMidiEventHandler或miditk.smf.NullMidiEventHandler 并且只覆盖您所属事件的事件处理方法 感兴趣的。
下面的例子用一个八度音阶(即12)来转换所有的音符开/关事件 半色调):
importsysfrommiditk.smfimportMidiFileReader,MidiFileWriter# MidiFileWriter is a sub-class of NullMidiEventHandler.classTransposer(MidiFileWriter):"""Transpose note values of all note on/off events by 1 octave."""defnote_on(self,channel,note,velocity):super().note_on(self,channel,min(127,note+12),velocity)defnote_off(self,channel,note,velocity):super().note_off(self,channel,min(127,note+12),velocity)infile=sys.argv.pop(1)outfile=sys.argv.pop(1)# Create the parser and event handlerwithopen(outfile,'wb')assmf:midiout=Transposer(smf)midiin=MidiFileReader(infile,midiout)# Now do the processing.midiin.read()
开发
复制回购:
$ git clone https://github.com/SpotlightKid/miditk-smf.git $cd miditk-smf
安装tox:
$ pip install tox
或者通过你的linux发行包管理器,例如在debian/ubuntu上:
$ sudo apt-get install python-tox
或者在Arch Linux上:
$ sudo pacman -S python-tox
通过tox对tox.ini中配置的所有python版本运行测试
如果一切顺利,创建一个新的git分支并开始黑客攻击,然后
通过在github上打开一个pull request来贡献您的更改。$ tox
代码qa
所包含的makefile被设置为运行几个python静态代码检查和 报告工具。打印可用makefile目标和工具的列表 他们跑,简单的跑:
$ make
然后运行您选择的makefile目标,例如:
$ make flake8
除非另有说明,否则这些目标运行所有工具直接的,也就是说没有毒性, 这意味着它们需要安装在python环境中,最好是 特定于项目的虚拟环境。创建虚拟环境和 安装所有受支持的工具及其依赖项运行:
$ mkvirtualenv miditk-smf (miditk-smf)$ pip install -r requirements/dev.txt
文档
软件包文档由sphinx生成。可以构建文档 使用:
$ make docs
成功构建后,将在Web浏览器中打开文档索引。