一、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中。“<