音乐编码之道(十九)|用ABC OR Lilypond 格式输入乐谱 music21 - TinyNotation
到目前为止,在这本用户指南中,我们一直在使用其中之一的方法将音乐加载到 music21
中,要么是使用 corpus.parse
方法,如果您已经在语料库或文件中有一首音乐,要么是通过使用 converter.parse
和 stream.Stream()
对象逐音符地构建一个乐谱。
但是,假设您想要将一些太长而不适合使用 music21
逐步构建的音乐加载到 note.Note()
中,但又不值得启动您的符号编辑器来创建一个文件?正如您可能想象的那样,这是 note.Note()
设计团队在系统早期开发阶段经常遇到的问题,我们用一种称为“TinyNotation”的格式创建了自己的解决方案。
正如其名称所暗示的,TinyNotation旨在成为一种用于将简单音乐加载到 music21
中(然后加载到更大的世界中)的简单且轻量级的符号语法。它借鉴了以前的简单符号解决方案,特别是Lilypond的语法(还包括ABC符号和Humdrum/Kern)。我还试图从它们与MusicXML等更结构化符号系统的发展中汲取经验。我发现,输入简单音符的系统越简单,处理真正复杂音乐的格式就越复杂。这是简单解决方案的一个主要问题。
TinyNotation通过让更复杂的符号不可能成为一种方法来避免这个限制!解析TinyNotation应该总是很容易的,因为它故意非常有限。然而,正如我们将在下面演示的那样,我们设计TinyNotation时,使其易于子类化为我们希望能够满足您特定符号需求的NotSoTinyNotation方言(而且非常简单)。让我们从基础知识开始,我们将从示例开始。
这里有一堆4/4拍的四分音符:
s = converter.parse('tinyNotation: 4/4 C4 D4 E4 F4 G4 A4 B4 c4')
s.show()
注意最后一个“c”是小写的,而其他音符是大写的。大小写决定了音域:大写的“C”是低音谱号中的C(C3),而小写的“c”是中央C(C4)。这里还有一些其他的音域:
s = converter.parse("tinyNotation: 3/4 CC4 C4 c4")
s.show()
而且,CCC是CC下面的C,c’’’是c上面的c’’。记住,当你使用更高的音符时,要确保将字符