1、改进的电子乐谱数据结构一 电子乐谱数据结构设想(二)树型结构:.多首歌曲数据结构.Typedef struct multisongint number; /歌曲号SYSTEMS *systems /歌曲链表 MULTISONG;一曲钢琴曲数据结构.Typedef struct systemInt linedistance; /五线谱谱线间距离Int stavecontype;/ 五线谱声部连接符号类型 1,花括号 2 中括号Int number; / 五线谱数STAVES *staves; SYSTEM五线谱数据结构typedef struct staveint v_distance;/ 声部
2、距离int number; /声部数VOICE * voice; / 五线谱声部链表 STAVE声部数据结构.typedef struct voiceint number; /小节数 MEASURE * fmeasure; / 指向前一小节MEASURE * bmeasure; / 指向后一小节 VOICE 小节数据结构.typedef struct measureint total number;/ 音符的总数int number;/ 组合音符看成一个音符时的音符总数,为确定连接线位置做基准CLEF *clef;/ 谱号KEYSIGATURE * keysignature;/ 调号BAT *
3、bats;/ 拍号NOTATION *fnotation;/ 音符链表,指向第一个音符NOTATION *bnotation; / 指向最后一个音符BARLINE * barline; / 小节线CONNECTS * connect; /音符连接线CONNECTS *connectsyin / 连音符TRAILBRIDGES *trailbridges; /尾桥队列BOOL repeat; /有无重复符号int repeattype;/ 重复符号的类型int start4, end4; /重复符号的起点,终点位置;位置五线谱号,声部, 小节和音符(组合音符看成一个音符)决定. MEASURE;
4、.谱号数据结构.typedef struct clefCLEF_TPYE type; /谱号类型int location; /谱号线位置 (从下加三线到上加三线, 第一线位置设定为0)CLEF;Enum CLEF_TYPE G,F,C调号数据结构.typedef struct keysignatureint type; /调号值 (-77)int location; /调号线位置 KEYSIGNATURE;拍号数据结构.typedef struct batint top, down; /拍号上、下数字int posx, posy / 拍号线坐标 BAT.小节线数据结构.typedef stru
5、ct batlineBARTLINE_TPYE type;/小节线的类型BOOL decoration; / 有无装饰符号int decorationtype2; /小节线装饰符号类型,如延长音,换气符号等。 BATLINE; enum barlinebarline,dbline,slineBARLINE_TYPE; /小节线类型,小节线,复纵线,终止线 typedef struct legatoBOOL type; / 连接线的类型,ture 完全在一个小节内 int start4, end4; /连接线起点和重点位置,位置定义同重复符号 LEGATOtypedef struct conne
6、ctyinBOOL type; / 连音符的类型, 几连音 int start4; /连接音起点位置, CONNECTTypedef struct trailbridgeint start4, end4,; /尾桥起点位置 TRAILBRIDGE .特征音符数据结构.基类符号数据结构.typedef struct notationint location;struct notation *flink;struct notation *blink;.单个音符数据结构.typedef struct note BOOL e_stem; / 标示音符有无符干BOOL stemup; / 标志符干的方向
7、BOOL hook;/标志有无符尾int nflag;/记录符尾的数目HEAD *head;BOOL dot;Note.符头数据结构.typedef struct headHEAD_TYPE h_type; / 记录符头形状(空心或实心)int location; / 记录符头谱线位置ACCID_TYPE accidental; 记录变音记号类型;升音、降音和还原记号int a_location; 记录变音记号谱线位置Head;enum head_typehollowness,solid;.单个音符数据结构.typedef struct notefloat duration;struct no
8、te *flink;struct note *blink;int naugdots;/ 记录附点数int type;/ 记录特征音符和休止符的类型 (如0表示全音符)int location;/ 记录符头谱线位置BOOL stemup; / 标志符干的方向ACCID_TYPE type;/ 记录变音记号类型;升音、降音和还原记号int nflags;/ 记录符尾个数int varlocation; /记录变音记号谱线位置BOOL ornament; /有无装饰音Int ornamenttype; / 装饰音的类型BOOL ellipsis;/有无省略符号Int ellipsis;/省略符号的类
9、型BOOL common;/有无常用记号Int common;/常用记号类型BOOL yiyin; /有无倚音;YIYIN note; / 倚音信息;Note;.和弦数据结构.typedef struct chordint nnotes;/记录和弦中音符个数struct note Cnotennotes;/构成和弦的音符int locationnnotes;/记录各音符符头在五线谱中的位置int naugdots;/ 记录附点数int type;/ 记录特征音符和休止符的类型 (如0表示全音符)int location;/ 记录符头谱线位置BOOL stemup; / 标志符干的方向ACCID
10、_TYPE type;/ 记录变音记号类型;升音、降音和还原记号int nflags;/ 记录符尾个数int varlocation; /记录变音记号谱线位置BOOL ornament; /有无装饰音Int ornamenttype; / 装饰音的类型BOOL ellipsis;/有无省略符号Int ellipsis;/省略符号的类型BOOL common;/有无常用记号Int common;/常用记号类型BOOL yiyin; /有无倚音;YIYIN note; / 倚音信息;CHORD;.休止符数据结构.typedef struct restint location;rest_type r
11、type;BOOL edot;float duration;(1,1/2,1/4)struct note *link;Restenum rest_type.附点数据结构.typedef struct dotint location;Dot_type dot;/记录附点类型(单附点,复符点)Dotenum dot_typesingledot,doubledot;.typedef struct strongweakint type; / 由强变弱,还是弱变强int start2,end2; /起点、终点位置,位置定义由小节,音符决定int length; / 长度(几个音符)STRONGWEAKT
12、ypedef struct pauseint location;typedef struct yiyinint type; / 倚音的类型 ,int notetype2; /倚音中的音符类型int location2; / 倚音音符号位置(在第几线上)YIYIN-typedef struct mordentint type; / 波音的类型int notetype2; /波音中的音符类型int location2; /波音音符的位置Mordenttypedef struct trillint type; / 颤音的类型int notetype2; /颤音中的音符类型int location2;
13、 /颤音音符的位置Trilltypedef struct inverted turnint type; / 回音的类型int notetype2; /回音中的音符类型int location2; /回音音符的位置Turntypedef struct octaveint type; /八度记号的类型int notetype2; /八度记号的音符类型int location2; /八度记号音符的位置Octavetypedef struct tremboloint type; /震音记号的类型int notetype2; /震音记号的音符类型int location2; /震音记号音符的位置Trem
14、bolo /(震音记号的斜线数目和尾符相同)typedef struct rptnotationint type; /反复记号的类型int notetype2; /反复记号的音符类型int location2; /反复记号音符的位置Enum repeattypedef struct staccatoint type; /断音记号的类型int notetype2; /断音记号的音符类型int location2; /断音记号音符的位置typedef struct sostenutoint location;/保持音记号typedef struct arpeggio /琶音记号只用在和弦中int
15、type;/琶音记号int notetype2;int location;typedef struct glissandoint type;int location;/滑音记号typedef struct breathint location;/呼吸记号typedef struct accentint location;/重音记号typedef struct tieBOOL interbar;/延音线是否在一个小节内int start4,end4;(前奏prelude,间奏interlude,后奏coda)Typedef struct intervalInterval_type type;/音
16、程 以悲怆交响乐第一乐章的五线谱为例,其五线谱数据结构可以表示为:SYSTEM a; a.linedistance=20; /表示该歌曲五线谱谱线间隔为20个象素 a.stavecontype=1; /表示该歌曲五线谱两个声部之间由花括号相连a.number=5; /表示该歌曲由五个五线谱构成a.staves=b0; / b0为其中一个五线谱,该歌曲中一共有五个, 因为是描述第一五线谱,/所以取b0, 如果描述第2个,则取b1STAVE *b4; /五个五线谱b0.number=2; /表示第1个五线谱包含2个声部 b0.voiceparts=&c0; / c0为乐谱中的第一个声部,该歌曲中一
17、共有10个, 因为是描述第一个声部,/所以取c0, 如果描述第2个,则取c1VOICEPART *c10; /五个五线谱c0.number=4; /表示第1个声部包含4个小节 c0.voiceparts=&d0; /d0为乐谱中的一个小节,该歌曲中一共有40个, 因为是描述/第一个小节,/所以取d0, MEASURE *d40; /40个小节d0.pedigrees=&e10; /表示第1个谱号 d0.signatures=&e20; /表示第1个调号 d0.bats=&e30; /表示第1个拍号 d0.chords=&e40; /表示第1个音符 d0.barlines=&e50; /表示第1
18、个小节线 d0.connects=&f10; /表示有1个连接线,f10 表示PEDIGREE *e140; /一共有40个谱号 SIGATURE *e240; /一共有40个谱号 BATS *e340; /一共有40个谱号 CHORDS *e440; /一共有40个谱号 BARLINES *e540; /一共有40个谱号 e10.type=1; / 表示高音谱号 e10.location=3; / 表示起点位置在第二线 调号,拍号,小节线的描述方法都相类型,只需对照数据结构即可很轻易的描述出来,在这里不再描述,下面把第一个乐谱符号表达如下:e40. Naugdots=0; /表示没有附点数e
19、40. length =50; /表示符干的长度为50e40. type =6; /表示4分休止符e40. location =3; /位置在第二线上e40. type =0; /表示无变音记号e40. nflags=0; /表示无符尾e40. varlocation =0; /表示无位置信息e40. bflags; =0; /表示无尾桥e40. decoration =false; /表示无装饰符号CONNECT *f10;f10.type=false; /不在一个小节内f10.start=false; /不在一个小节内f10.end=false; /不在一个小节内谱号的类型:G谱, F谱,
20、C一线谱 C二线谱,C三线谱(中音谱表),C四线谱(次中音谱), C五线谱,连谱号中的由括号(分为直括号和花括号两种)和起线(连接数行五线谱的垂直线)组成。小节线类型:单一垂直线,复纵线,终止线音符类型:全音符 .1/32 音符, 全休止符(四线下) 二分休止符(三线上).1/32休止符, 其他 长休止符(表示整小节休止)( 连续休止数小节时 可在长休止符上方加小节号表示)附点: 个数连接线:上括号或下括号,根据符头的位置来确定类型延长记号: 放在休止符、音符的上方或下方,连音符:包括单纯音符构成的连音符和附点音符构成的连音符,常见的单纯音连音符有三连音,五连音,七连音,九连音,十连音(还有十
21、一十五)等, 常见的附点音符构成的连音符有二连音和四连音(即将附点音符(即带附点的音符)分成两部分,四部分,代替三部分)。变音符号:升高,降低,重升,重降,还原拍号:分为分子和分母两部分装饰音:倚音(前倚音(记录在主要音的前面)和后倚音(记录在主要音的后面)、长倚音(符干向上,与主要音相隔2度,总在主要音的前面) ; 波音(记录在音符上方,顺波,复顺波,逆波,复逆波);颤音( 音符的上方,显示的时候,只有颤音一种装饰音,使用第二种表示方法,否则使用第一种表示方法); 回音( 顺回音或逆回音,记录在音符的上方或两个音符之间)省略记号:移动八度记号(高八度和低八度)(标记在声部信息内), 重复八度(标记在音符的上方或者下方,标记作为音符装饰音的一种类型)震音记号:(用斜线表示,数目与符尾数目相同)
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1