用于创建多轨midi文件的纯python库

MIDIUtil的Python项目详细描述


build

这只是一个简短的预告。发布的完整文档 版本可以在Read the Docs找到。的文档 开发版本是here

Documentation Status

简介

midiutil是一个纯python库,它允许编写多个跟踪 python中的乐器数字接口(midi)文件 程序(现在支持格式1和格式2文件)。 它是面向对象的,允许创建和编写 小题大做的文件。

midiutil不是midi规范的完整实现。实际的 规范是一个庞大的、杂乱无章的文档,它已经有机地增长了 几十年来。我有选择地实现了 规范中更有用和常见的方面。选择有 有点古怪;我基本上实现了我所需要的。什么时候? 我觉得它对其他人有用我把它弄得更丰满了, 但还是有些东西不见了。无论如何,代码很容易 理解和结构良好。可以通过 任何对MIDI文件格式有良好工作知识的人, 掌握python的工作知识。扩展库的文档 提供。

这个软件最初是用Python2.5.2开发的,它利用了 2.5中介绍的一些功能。最近的python 2和3 支持是统一的,所以代码应该在两个环境中都能工作。 但是,对2.7之前的python版本的支持已经被放弃。 任何关键任务的音乐生成系统都应该更新 Python基金会支持和维护的Python版本, 以免社会陷入无法无天。

这个软件是在开源许可下发布的 在你认为合适的情况下可以自由使用它,前提是属性保持不变。 有关详细信息,请参阅源发行版中的license.txt。

安装

midiutil的最新稳定版本位于Python Package Index,可以安装 通过普通频道:

pip install MIDIUtil

源代码位于Github, 并使用以下URL之一进行克隆:

git clone git@github.com:MarkCWirt/MIDIUtil.git
# or
git clone https://github.com/MarkCWirt/MIDIUtil.git

这取决于您想使用ssh还是https。(源代码 对于稳定版本,也可以从 Releases 页码。)

要使用库,可以将其安装到系统中:

python setup.py install

或者将$PYTHONPATH环境变量指向目录 包含midiutil(即src)。

midiutil是纯python,应该在任何平台上工作 Python已经被移植。

如果你在自己的项目中使用这个软件 你可以考虑分发与你的图书馆捆绑在一起的图书馆; 这个图书馆很小,而且是独立的,这样的捆绑使事情 更方便您的用户。最好的办法可能是 将midiutil目录直接复制到包目录,然后 然后用完全限定名引用它。这会阻止它 与可能安装在 目标系统。

快速启动

使用软件很简单:

  • 必须将包导入到您的命名空间中
  • 将创建midifile对象
  • 事件(音符、节奏变化等)将添加到对象中
  • MIDI文件被写入磁盘。

提供了详细的文档;下面是一个简单的示例 让你快点走。在本例中,我们将创建一个单轨MIDI 文件,为音轨指定一个节奏,并编写一个C大调音阶。然后我们 把它写到磁盘上。

#!/usr/bin/env pythonfrommidiutilimportMIDIFiledegrees=[60,62,64,65,67,69,71,72]# MIDI note numbertrack=0channel=0time=0# In beatsduration=1# In beatstempo=60# In BPMvolume=100# 0-127, as per the MIDI standardMyMIDI=MIDIFile(1)# One track, defaults to format 1 (tempo track is created# automatically)MyMIDI.addTempo(track,time,tempo)fori,pitchinenumerate(degrees):MyMIDI.addNote(track,channel,pitch,time+i,duration,volume)withopen("major-scale.mid","wb")asoutput_file:MyMIDI.writeFile(output_file)

有几个附加的事件类型可以添加 可用于创建midifile对象的各种选项,但是 足以开始使用库并创建注释序列。

以上代码在机器可读的m在examples目录中。 描述如何扩展的详细类引用和文档 库位于文档目录中。

玩得开心!

谢谢

我想提一下以下给出反馈的人,Bug 对库的修复和建议:

  • 布拉姆·德容
  • 迈克·里夫斯·麦克米兰
  • egg语法
  • 尼尔斯·盖伊
  • 弗朗西斯G.
  • cclauss(代码格式化清理和pep-8之类的东西,我不擅长跟踪)。
  • Philippe Adrien Nousse(ADPHI)的俯仰弯曲实现。
  • MeteorSW(https://github.com/meteorsw)进行重大重组和清理 代码的。

实际上我已经离开电子邮件几年了,所以我相信有很多 等待的建议。请继续关注更新和错误修复!

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
java允许具有不同父类的类扩展类,而无需多重继承   java如何创建动态化的JScrollPane w/JPanel作为客户端?   java如何组织和命名包   在Java中读取属性文件   java无法解释的Android意图行为   在Java中动态执行多个BPEL文件的部署   ssl Java 6 SNI(服务器名称指示)?   java我们可以使用Robot框架自动化web和移动应用程序来执行并行执行   java for star pettern的循环   java为什么BinaryReader在线程中,从netty读取错误的数据包?   在java中将华氏度转换为摄氏度   使用Spark和java处理空值和引号编写CSV文件   Java中已排序日期到块的列表   visual studio代码VSCode Java不是linting或自动完成局部变量,而是自动完成Java快捷方式,如“sysout”