music21

如果你问玩音乐知不知道music21,我不知道,但对于喜欢音乐的程序员来说,利用代码创造音乐
是一种必然.
而music21是一个python语言下的工具,很强大.

music21是什么

music21是一个基于python的计算机辅助音乐学工具包。该系统自2008年以来一直在不断发展壮大。
music21中的方法和传统已被用在许多以前的软件系统中。

music21中的21指的是在MIT中所有的课程都有数字和音乐,还有其他一些人文科学部门,编号为21.

MIT的音乐部门以及哈佛大学,史密斯学院和圣约克山学院帮助把这个工具包从最简单的根源变成了一个成熟的系统。

安装

直接用pip就行,更多安装参考官方文档music

1
$ pip install music21

简单使用

1. 展示一个音符

1
2
3
4
In [1]: from music21 import *
In [2]: n = note.Note("D#3")
In [3]: n.duration.type = 'half'
In [4]: n.show()

你以为会出现图片,但由于没有打开mxl文件的应用会报错:

1
SubConverterException: Cannot find a valid application path for format musicxml. Specify this in your Environment by calling environment.set('musicxmlPath', '/path/to/application')

这时安装musescore,这个跨平台的开源乐谱编辑器.其路径默认在/usr/bin/musescore

然后配置路径再显示: (注意:这个environment是music21下的)

1
2
3
4
In [7]: environment.set('musicxmlPath', '/usr/bin/musescore')

In [8]: n.show()
qt5ct: using qt5ct plugin

应该会打开musescore软件:

2.播放midi

同样需要配置midi播放器:这里使用timidity

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
In [9]: littleMelody = converter.parse("tinynotation: 3/4 c4 d8 f g16 a g f#")
In [13]: environment.set('midiPath', '/usr/bin/timidity')
In [14]: littleMelody.show('midi')
Requested buffer size 32768, fragment size 8192
ALSA pcm 'default' set buffer size 32768, period size 8192 bytes
Playing /tmp/music21/tmpxc26drbk.mid
MIDI file: /tmp/music21/tmpxc26drbk.mid
Format: 1 Tracks: 1 Divisions: 1024
Sequence:
No instrument mapped to tone bank 0, program 0 - this instrument will not be heard
No pre-resampling cache hit
Last 1 MIDI events are ignored
Playing time: ~4 seconds
Notes cut: 0
Notes lost totally: 0

可以看到,默认这些临时文件都在/tmp/music21/下.

3.其他

还可以生成图片,读取mxl文件,生成和弦等.

如果不想配置软件,就直接去tmp目录下查看文件.

学习还是官方文档最好:music21-doc