music21简明指南
music21
是一个由MIT开发的功能强大的计算音乐学分析Python库。相比于pretty_midi
库只能处理MIDI文件,music21
可以处理包括MusicXML,MIDI,abc等多种格式的音乐文件,并可以从零开始构建音乐文件或对音乐进行分析。
在搜索引擎中搜索music21,大概率会被引导到这个网址:https://web.mit.edu/music21/。我在初次接触music21
时看到这个网页感觉版面杂乱,不知何从下手。但是,进入右侧的Get Started with music21,并一步步查看教程,这时结构就清晰了许多,并且一步一步由浅入深阅读就可掌握music21
的使用方法了。
music21
官方教程其实介绍相当详尽易懂,教程中由浅入深介绍了music21
的各个模块和使用方式。即使你对Python不甚了解,直接阅读官方教程也不会特别吃力,因为教程中有针对Python特性以及使用方法的介绍。
唯一的缺点是官方教程过于冗长,共有58章,每章也很长。如果需要快速上手,生成一份音乐文件,那一步步阅读教程所耗费的时间就过长了。因此,本文介绍了一些简单功能,足以使读者在短时间内使用music21
生成需要的音乐文件,并令读者概略了解music21
的使用方式。本文中大部分内容是从music21
官方教程中摘录而来,并假设读者对Python有简单的了解。
首先,导入music21
包,在这里我们使用官方教程中的习惯对music21包进行全部加载,但使用时建议通过import music21
进行导入以避免污染命名空间。music21
可以很方便的使用pip install music21
安装。
from music21 import *
创建音符
音符是音乐中的最基本单位,music21
库的风格是强类型的。基本来说,构成乐谱的每个音乐元素都有相应的类,并有其成员、方法。所有元素的类型都应是明确的。音符在music21
中为music.note.Note
类型,可以直接使用note.Note()
初始化该类的实例(note.Note()
中无参数则返回一个C4音高的四分音符)。
f = note.Note("F5#") #创建一个音高为F5#的音符
f.name #音符的音名
'F#'
f.step #音符的音级(不包含变化音及八度信息的音名,这里成为音级严格来说并不准确)
'F'
f.pitch.pitchClassString #音级(以C为0级的音程数)
'6'
f.octave #八度
5
f.pitch #音符的音高,返回一个音高对象
<music21.pitch.Pitch F#5>
f.duration #音符的时值,返回一个时值对象
<music21.duration.Duration 1.0>
f.duration.type #音符的时值的类型
'quarter'
在音符创建后,可修改其中的属性
f.octave=6
f.pitch
<music21.pitch.Pitch F#6>
f = note.Note("F5#") #可以在note.Note()中指定音高、八度及变化音来初始化音符对象
f.pitch.accidental=pitch