一、MusicXML文件结构分析
MusicXML是面向音乐乐谱的网络音乐分发和交换语言,音乐乐谱是针对某首乐曲的音乐信息记录载体,在计算机中,通常一首乐曲的MusicXML信息是以一个文件的组织形式对应的,一个MusicXML文件就是一首乐曲的乐谱信息汇集。
音乐乐谱的种类繁多,如歌谱、钢琴谱、小提琴谱、吉他谱、打击乐谱、管弦乐总谱等,乐谱需要承载的音乐信息多样,谱面结构复杂,还要兼容其他数字音乐格式。目前,MusicXML包含了MIDI兼容部分,这些MIDI兼容的信息和乐谱的音乐信息一一对应,满足基于MIDI音乐信息的软件使用。MusicXML能很好地表示一些基础的音符信息,包括符干、连音记号、变音记号、顿音记号和符干方向等,还为谐波分析和乐谱中的和弦符号提供了丰富的和声表现形式,这些乐谱包括许多当代的乐谱,如主音表,钢琴/声乐/吉他的编曲,大乐队乐谱的和弦等。MusicXML还可以描述一些乐器演奏指法的信息,包括指定的琴弦、琴品、弦调音,还有吉他特定的音符如按弦扫弦等。对于打击乐器,MusicXML还可以表示打击乐的部分技巧。从MusicXML 2.0开始,MusicXML增加了一个zip压缩格式,大幅减少了MusicXML文件大小。
合理而清晰地组织MusicXML文件结构是MusicXML音乐格式能被迅速推广和广泛使用的前提条件,MusicXML文件结构呈现层次性、结构化,它的“score-partwise”基本构成如下:
<XML声明><DTD声明><乐谱头文件信息><各声部声明><各声部音乐信息>
由于乐谱可能包含多个声部,关于如何有序地表示各个声部,MusicXML文件结构灵活地设置了两种文件结构,分别采用声部优先策略和时序优先策略。它们分别表示以乐谱声部的横向组织为主和以乐谱小节的纵向组织为主。在声部优先策略中,各个声部先后呈现,当一个声部的音乐信息呈现完毕后,再呈现下一个声部,直到所有声部都呈现完毕;在时序优先策略中,按乐谱中音符的时间顺序,某时刻同时间发声的音符按声部顺序分别呈现,然后再呈现下一时刻的所有声部中的音符。
目前,MusicXML有两个不同的顶级DTDs,每个都有其自己的根元素。如果使用声部优先的DTD,根元素是<score-partwise>,这时音乐以音乐声部为主,小节被包含在每个声部中。如果使用时序优先的DTD,根元素是<score-timewise>,这时以小节为主,声部被包含在每个小节中。MusicXML XSD在单个XSD文件中同时包括这两个的顶级文件元素。
两种不同呈现策略的文件组织结构之间可以相互等价转化,以满足不同用户的需求,达到良好运作的目的。MusicXML提供两个XSLT样式表单在两种文档类型之间来回转换。parttime.xsl样式表单从<score-partwise>转换到<score-timewise>,而timepart.xsl样式表单从<score-timewise>转换到<score-partwise>。用户的应用程序在创建MusicXML文件时,可以选择以哪种格式为主,并在使用时检查文件类型。当应用程序写入MusicXML时,只需写出符合需要的格式即可。如果有必要的话,在程序读取MusicXML时进行转换。不过,现今大多数的MusicXML软件缺省使用声部优先格式。
MusicXML文件由XML语言构成,每条语句都包含特定的标签符号,这些语句的样式被包含在score.mod文件中,score.mod文件定义了MusicXML文件结构语句的基本样式。
声部优先的MusicXML结构语句的基本样式定义为:
时序优先的MusicXML语句的基本样式定义为:
其中,“%partwise;”和“%timewise;”两个实体分别设置在partwise.dtd和timewise.dtd文件中的顶级DTDs中。“<![”意味着一个条件从句,所以如果partwise.dtd文件被使用,则<score-partwise>元素会被定义。同样,如果timewise.dtd文件被使用,则<score-timewise>元素会被定义。这两种基本样式之间的唯一区别是声部和小节元素的排列方式。乐谱声部优先(score-partwise)文档包含一个或多个声部,每个声部包含一个或多个小节元素,乐谱时序优先(score-timewise)文档则是将顺序倒过来。
每个MusicXML文件包含一个“%score-header”,即<乐谱头文件信息>,头信息定义为:
其中,“?”表示此信息可选,“*”表示可以重复使用零次或多次,“part-list”表示声部列表是必须的。而其中的标签,“work”表示音乐作品,“movement-number”表示乐章编号,“movement-title”表示乐章标题,“identification”表示创建MusicXML文件的软件信息等,“credit”表示乐谱页面上各个元素的属性,如字体大小、坐标位置等,“part-list”表示声部列表。
下面以弗朗兹·舒柏特(Franz Schubert)的声乐套曲《冬之旅》的第二十二首歌来说明乐谱的MusicXML头文件信息。此MusicXML文件包含了一些关于乐谱的基本元素,如标题和作曲家,还包括声部列表,其中列出了乐谱中的所有声部或乐器。
这个作品的一个简单乐谱头文件的MusicXML代码见附录【代码4-1】。在这些代码中,包含了实体中所有可能的五个顶级元素:作品(work)、乐章编号(movement-number)、乐章标题(movement-title)、标识(identification)和声部列表(part-list)。
接下来依次分析此音乐作品头文件信息的每一部分:
在MusicXML中,一般单独的乐章用单独的文件表示,作品(“work”标签)通常用于表示一个大的音乐作品的部分乐章。如上面代码中,舒伯特的作品通常更多指的是通过“D.xxx”的编号体系而不是作品数目编号来编的,所以在上面代码的“work-number”标签的内容使用了“D.911”,“work-title”标签是音乐作品的标题名称,这里是“Winterreise”。
《冬之旅》是二十四首声乐套曲,这里使用乐章编号“movement-number”表示乐章编号,“movement-title”标签表示乐章的标题,这里是“Mut”。
标识(“identification”标签)元素在identity.mod文件中定义,它包含基于都柏林核心集的基本元数据元素。在这首歌曲中,和其他许多歌曲一样,有两个创作者,分别是作曲家与诗人。“creator”标签用来表示创作者,并通过类型“type”属性来区分它们的角色。这里的“composer”和“poet”分别是“Franz Schubert”和“Wilhelm Müller”。
版权(“right”标签)包含版权声明。如果涉及多个版权,则可能有多个版权元素,比如歌词和音乐。与创作者creator元素一样,这些元素可以用type属性来表示涉及哪种类型的版权。
编码(“encoding”标签)包含关于创建MusicXML文件的内容,这些内容包括创建时间、创建者、创建软件和创建说明。
资源(“source”标签)指出此MusicXML文件乐谱资料的出处,由于许多音乐作品被多次出版,特别是著名音乐家的作品,同一作品的不同版本包含不同的音乐信息,因此,需要指出音乐信息的出处。此例子使用了Dover转载的“Breitkopf&Härtel”版的《冬之旅》。
声部列表(“part-list”标签)是乐谱头文件的一部分,它存在于每个MusicXML文件中,是必须的标签之一。它由一系列乐谱声部元素组成,每个元素都有一个必须的id属性和声部名称part-name元素。按照惯例,创建软件会把id属性简单地设置为“P1”“P2”。
当然,在“part-list”标签中,除了声部名称之外,还包含许多可选标签和属性,如声部缩写标签,声部名称在乐谱开始使用,声部缩写名称将在后续音乐信息中使用。比如“score-instrument”标签,用于描述乐器声音和虚拟仪器的设置,以及定义乐谱声部中的乐器列表。而一个或多个MIDI设备元素,用于在多端口配置中识别MIDI设备或端口,一个或多个MIDI乐器元素,为声部中的每一个乐谱的乐器进行特定的初始化MIDI设置。
无论声部优先还是时序优先,MusicXML乐谱中音乐信息的基本样式都定义为:
其中,“<!ENTITY%music-data”表示乐谱中音乐元素的数据,“note|backup|forward|direction|attributes|harmony|figured-bass|print|sound|barline|grouping|link|bookmark”表示不同的音乐元素,“*”表示这些音乐元素中,每个元素都可以重复使用零次或多次。
在MusicXML文件中,最常用的表示单位是小节(“measure”标签),并按音乐的时序,用小节标签的属性“number”来表示出现的小节的序号,通常乐谱的第一小节和其他小节相比,包含更多的信息,如谱号、拍号、调号等,如图4-1所示的乐谱只有一个小节,此小节包含有高音谱号、拍号4/4拍、一个全音符。
图4-1 中央C在谱线中的位置
我们以图4-1为例,来说明乐谱中音乐元素的标签使用方法。
语句“<measure number="1">”表示第一个小节开始,数字“1”表示第1个小节,“</measure>”表示小节结束,中间的“……”表示包含的音乐元素信息。
由于第一个小节往往还包含谱号、拍号、调号等音乐元素信息,所以,需要有语句“<attributes>”开始,语句“</attributes>”结束,中间的“……”表示包含的谱号、拍号、调号等音乐元素信息。(www.xing528.com)
许多音乐记谱法,特别是西方音乐记谱法,乐谱中的每个音符都有自己的时值,相对应的,在乐谱的MusicXML文件的每一个音符都有一个时值(“duration”)标签。基准单位(“divisions”)标签表明此乐谱中音乐的基本时间单位,每个音符的时值是基本时间单位的若干倍。基准单位相当于表示重量的“吨”“千克”或“克”,当需要为一头成年大象称重时,一般选择“吨”这一重量的基准单位,当需要表示手机的重量时,则采用“克”为基准单位。乐谱的基准单位是以四分音符为划分单位,如果某个乐谱中时值最短的音符其时值为四分音符,那么基准单位“divisions”的值为1;如果乐谱中时值最短的音符其时值为八分音符,那么基准单位“divisions”的值为2,以此类推。
常见的divisions值的设置情况见表4-1,它是利用MakeMusic公司的网站(https://www.finalemusic.com/)下载的Finale Demo软件(版本号:25.3.0.276),通过此软件菜单的“File”→“New”→“Default Document”,分别制作了8个独立的文件,每个文件只包含了一个音符,分别是全音符、二分音符、四分音符、八分音符、十六分音符、三十二分音符、三连音、五连音,共八个MusicXML文件。
表4-1 利用Finale软件制作的单音符MusicXML文件中的divisions值
调号(“key”标签)元素用于表示乐曲的调号。如图4-1所示的乐曲是C大调,没有升降,所以标签“fifths”的值为0。如果乐曲是有两个升调记号的D大调,则“fifths”值为2。如果乐曲是一个降调记号的F大调,则“fifths”值为-1。升降号数“fifths”表示的是乐曲调号在乐谱中的升调记号#或降调记号b数量,升调调号的“fifths”值为正数,降调调号的“fifths”值为负数。为了表示调性,还增加了一个“mode”标签,以表示小调(minor)或者是大调(major),图4-1是大调,所以“mode”标签的值为“major”。
节拍(“time”标签)元素表示此小节的拍号。如果一个MusicXML文件的某个小节没有这个标签,那么它沿用前一小节的拍号。“time”标签包含两个组成要素,分别表示乐曲每小节拍数和单位拍,也就是乐谱中拍号的分子和分母的数字。图4-1乐谱中的拍号是4/4拍,所以“time”标签的两个子标签“beats”和“beat-type”的值分别是4和4;如果一首乐曲的拍号是3/4拍,那么两个子标签“beats”和“beat-type”的值分别是3和4。
谱号(“clef”标签)元素表示乐曲此小节和以后小节的谱号,MusicXML允许许多不同的谱号,包括很多已经不再使用的谱号。如图4-1所示,使用的是标准的高音谱号G谱号,高音谱号的书写从五线谱中的第二线开始,所以“clef”标签的子标签“line”的值为2,而第二线上的音名是G,所以“clef”标签的子标签“sign”的值为2。
音符(“note”标签)元素表示乐曲一个音符的开始(<note>)和结束(</note>)。在MusicXML音乐语言中,音符包括乐音和休止符。
音高(“pitch”标签)元素必须有一个音级(“step”标签)和一个所属八度音组名称(“octave”标签)。如果涉及升或降,它也可以有一个随意改变音高的元素,这些元素组合表示此音符的实际音高。如图4-1所示,音高为中央C,小字1组,所以“step”标签和“octave”标签分别为C和4。
时值(“duration”标签)元素表示此音符的时值,如图4-1所示,由于基准单位是以每一个四分音符为一个基准单元,所以时长4就是4个四分音符的时长,就是4拍。
音符类型(“type”标签)元素表示音符的名称。如图4-1所示的音符的名称是“whole”表示是一个全音符。
二、MusicXML标签分析
XML是可扩展标记语言的标准,它可以对用户的文档和数据进行结构化处理,进而能够在互联网或内部网上进行信息交换,实现动态内容生成,满足用户的应用开发。任何XML文档都由纯文本的语句构成,方便了计算机处理和人工阅读理解。在XML中,用户可以定义自己的标签,它没有预定义的标签,允许用户定义自己的标签和文档结构。
基本的XML语句结构如下:
其中,“<name>”和“</name>”是一对标签语句,标签为“name”,标签内容为“John”。
在MusicXML音乐语言中,也定义了大量的标签,这些标签定义了不同的用途。截至2017年9月,在http://www.musicxml.com/网站上公布的电子文档“musicxml-index.xls”中,包含有不同的标签数量为682个,这些标签被分为元素(Element)、属性(Attribute)和实体(Entity)三类,它们出现在不同的版本中,具体数量见表4-2。
很显然,出现在不同时期的MusicXML音乐语言版本的标签数量是单调递增的,随着MusicXML音乐语言被广泛应用,为了适应不同的乐谱表示需要,得逐步增加新的标签适应不断扩展的应用场景。
表4-2 MusicXML音乐语言的标签分类数量
在这些标签中,有些是和音乐相关的标签,有些是和乐谱页面相关的标签,还有一些是控制或结构性标签。这里对音乐相关的标签进行说明,很显然,乐曲中出现最多的当然是音符,在MusicXML音乐语言中,音符分为两类,一类是有音高的音符,另一类是休止符。音符标签说明见表4-3和表4-4。
表4-3 带音高的音符标签的结构说明
表4-4 休止符的音符标签的结构说明
在MusicXML音乐语言中,包含与MIDI兼容的标签,这些标签出现在每个声部的说明中,一个声部对应一个MIDI标签说明,具体解释见表4-5。
表4-5 MusicxML音乐语言中MIDI兼容标签
在MusicXML音乐语言中,为了描述声乐乐谱,引入了“lyric”标签,它有两个子标签,分别是音节“syllabic”和歌词“text”,它们分别指出了此音符对应的歌词的音节部分,有:single、begin、end、middle四个不同的值,single表示此音符完整唱完对应的歌词,begin表示此音符歌唱的是对应歌词音节的开始部分,end表示此音符歌唱的是对应歌词音节的结束部分,middle表示此音符歌唱的是对应歌词音节的中间部分。“lyric”标签的使用举例:
此例中,歌词为“Dans”,音节标签“single”表示它需要在与它对应的音符的时值内歌唱完毕。
音乐的乐曲往往是多声部的,每个声部在音乐进行中,可能是多音符同时演奏,这些同时演奏的音符构成和声,和声在乐谱谱面上是纵向排列,由一个符干串联在一起。MusicXML音乐语言为了表示乐谱谱面的二维平面结构,特别是小节内的和声进行,采用了时序优先的表示方法,也就是说,对于一个小节里时序中的几个和声音程,采用先表示小节内每个和声音程第一个音符,整小节的第一个音符表示完后,再返回此小节开始处,采用表示所有和声音程的第二个音符,以此类推。
为了表示返回到哪里,使用了“backup”标签,它有一个子标签是时值“duration”标签。举例如下:
此语句表示回退16个基准单位时间,再开始描述音符。
有时,为了快速掠过和声音程中间的休止符,使用“forward”标签,它表示前进若干个基准单位时间。举例如下:
此语句表示前进8个基准单位时间,再开始描述音符。下面利用乐谱谱例对“backup”标签进行说明,如图4-2(a)所示是二个小节的钢琴乐谱,它的第一小节的高音谱表有音符,而低音谱表为全休止符,第二小节的高音谱表和低音谱表都有音符,但都只在第一拍上有音符。
图4-2 标签“backup”和“forward”的乐谱图例与MusicXML记录顺序
图4-2(b)用这些音符的音名来表示音符,其中休止符用圆圈表示。在MusicXML文件中记录钢琴谱的音符(包括音高音符和休止符)时,记录顺序是按小节为单位记录,在每个小节内,则先记录高音谱表的音符,再记录低音谱表的音符。所以,图4-2(a)的记录顺序如图4-2(b)所示,先记录第一小节高音谱表的音符,再记录第一小节的低音谱表的音符,然后是第二小节高音谱表的音符,再是第二小节的低音谱表的音符,以此类推。对于图4-2(a)的乐谱而言,当记录完第一小节的高音谱表中的音符后,就回退到第一小节的开始部分,接着记录第一小节的低音谱表的音符,在这个回退过程中,就需要使用“backup”标签。
免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。