异想天开

What's the true meaning of light, Could you tell me why

Python的音乐库mingus

日期:2017-03-21 07:07:43
  
最后更新日期:2017-03-21 07:15:59
用mingus可以写一些辅助的音乐软件,比如写一个midi模拟乐器,也可以方便利用它来调用lilypond生成精美的钢琴谱。周末的时候,在知乎发现这个模块。里面的例子有piano模拟乐器,架子鼓模拟乐器以及随机生成谱。
1. 安装mingus
mingus的模拟乐器的原理是利用fluidsynth,而fluidsynth是Real-time MIDI software synthesizer。该midi合成器会根据soundfont(指定音色的文件,类似字体文件一样)记录的音符的音高多少和时值多少等这些信息发给声卡,声卡则发出类似钢琴一样的音。
需要安装的软件:
git clone https://github.com/bspaans/python-mingus.git
sudo apt-get instlll fluidsynth
sudo apt-get install fluid-soundfont-gm
sudo apt-get install libfluidsynth-dev
sudo apt-get install jackd

2.使用mingus里面的midi乐器
需要注意的是,mingus_examples/pygame-piano/pygame-piano.py 使用时,需要自己填写soundfont,前面安装好fluid-soundfont-gm后,可以将脚本里面的SF2改为/usr/share/sounds/sf2/FluidR3_GM.sf2,这里可能在相应的系统搜到对应的目录。 初始化fluidsynth,我的系统上面需要指明驱动参数才有声音。需要改成这样,fluidsynth.init(SF2,'alsa')。效果图如下:
midi乐器本身是合成的声音,可能适用于这种场景,一个乐队,临时演出,本身没有那么多乐器或搬乐器不方便,用midi合成器来委曲求全吧。

3.利用lilypond输出乐谱
安装lilypond
sudo apt-get install lilypond
可以将composition,track,note三种输出为五线谱,用pdf/png保存。
[code lang="cpp"]
#!/usr/bin/python
# -*- coding: utf-8 -*-
from mingus.core import progressions, intervals
from mingus.core import chords as ch
from mingus.containers import NoteContainer, Note
from mingus.midi import fluidsynth
from mingus.extra import lilypond
import time
import sys
from random import random, choice, randrange

mystr = lilypond.from_Note(Note('C'))
lilypond.to_pdf(mystr, "music")
[/code]
效果如下:

也许,mingus正如介绍的那样,是给学生演示一些调性等当辅助工具,midi合成并不喜欢,暂时没有发现特别好玩的地方,生成谱子的话,mingus只是对lilypond用了一层封装,不过格式更友好一些。如果你有用到mingus来做一些好玩的事,请告诉我。