在Python中合成音乐音符(钢琴音效)
我想要一个用Python写的乐器库,比如说一个钢琴对象,这样我就可以把一串音符和持续时间转换成声音。比如说,像这样:
import Piano
pn = Piano()
pn.play([note, note, ..., note], duration)
有没有类似的东西可以在Python 2.7上使用?如果没有的话,我想自己实现一个。我现在有一个用audiere的东西,但它只是正弦波,所以听起来很糟糕。有没有办法连接到一个MIDI钢琴或者类似的设备?我现在用的是Windows 7。有没有什么实现步骤是我没有预料到的?
2 个回答
我的一位学生刚开始使用mingus来做这个,所以我写了一个简单的指南,教你在Linux(Ubuntu)上如何开始使用:
如果你还没有安装fluidsynth和mingus,先安装它们:
$
sudo apt-get install fluidsynth
$
sudo easy_install mingus
现在你可以打开Python,输入:
>>> from mingus.midi import fluidsynth
>>> fluidsynth.init('/usr/share/sounds/sf2/FluidR3_GM.sf2',"alsa")
这段代码会从mingus中导入必要的内容,并初始化fluidsynth,让它通过alsa播放(而不是默认的jack)。接下来:
>>> fluidsynth.play_Note(64,0,100)
...你应该能听到钢琴上弹出一个音符(参数分别是:音符编号、通道编号和音量)。
想了解更多信息,可以访问这里:
这是@Marcelos回答的一部分:http://code.google.com/p/mingus/
mingus是一个用于Python的工具包,程序员、音乐家、作曲家和研究人员都可以用它来制作和研究音乐。mingus的核心是音乐理论,包括音程、和弦、音阶和和声进行等内容。
MIDI包可以保存和加载MIDI文件,而且——最重要的是——它提供了一个通用的音序器,可以处理所有的数据结构,还有一个FluidSynth音序器的子类。这让你可以用几行代码直接从Python播放所有的数据结构。大部分复杂的时间控制和MIDI代码都已经为你处理好了,留下了一个干净、相对简单的接口。