admin 管理员组文章数量: 1184232
2024年4月19日发(作者:unity3d破解版安装教程)
视谱精灵的设计和实现
[摘要] 本文介绍了一个音乐教学计算机辅助程序—“视谱精
灵”的设计和实现。此系统通过midi接口将计算机与钢琴相连,
计算机显示五线谱,学生弹奏的音符通过midi接口传入计算机,“视
谱精灵”判断接收的信息是否与乐谱要弹奏的音符一致,给出正误
的信息。对此系统的总体模块结构,和各模块的功能及实现方法进
行了说明。
[关键词] 五线谱 辅助教学 midi portaudio
1.引言
随着生活水平的提高,人们越来越重视艺术修养的培养,学习
钢琴的人越来越多。近几年来中小学音乐教育慢慢受到重视,我国
音乐教育水平也在不断提高,各个音乐学院和综合大学音乐专业都
扩大了招生,学生的数量在不断的增加。随着学生人数的增加,加
上艺术技能课的特殊性,许多学校都出现师资和教学经费短缺的问
题。针对这一问题,许多院校开始采用一对二甚至是一对三的教学
模式改革,用以减少教学经费节省师资。一对二的教学模式虽然节
省了师资经费,但是,艺术技能课教学是一门始源于一对一独立教
学的课程,课程时间的缩短,一定程度影响了教学的质量。钢琴技
能课是许多音乐专业学生的必修课,在钢琴技能课的教学过程中,
视谱能力的培养、技巧训练及音乐能力是构成钢琴教学的三个重要
部分。但是在一对二的实际教学中,除去纠正错误和技巧训练的时
间,教师很难在有限的课堂时间内划分出充足的时间来训练学生的
视谱能力。如果能够将视谱能力的培养这一部分从钢琴小课中分离
开来,既节省了教学资源,又可以修补一对二授课的不足,从而提
高教学质量。
随着计算机技术的发展和应用范围的扩大,越来越多地应用到
艺术领域。由此,我们想到设计一个计算机辅助教学软件帮助学生
提高视谱能力,我们将其起名为“视谱精灵”。在课堂之外,学生
将钢琴通过midi接口与计算机相连,计算机通过“视谱精灵”软
件显示练习的钢琴谱,学生按照乐谱的显示进行弹奏。弹奏过程中,
“视谱精灵”会将弹奏错误的音符用红色显示,正在弹奏的音符高
亮显示,其他正常显示。弹奏完成,软件可以根据学习者弹奏的情
况显示统计结果,甚至给出提高视谱能力的建议。
2.视谱精灵的模块结构
“视谱精灵”应该具有以下功能:
(1)能够显示当前主要乐谱编辑软件编写的乐谱。
(2)能够根据乐谱进行演奏。
(3)能够接收midi接口输入,如果处于练习状态,能够将接
收的midi输入与相应的乐谱中的音符比较,不正确则显示红色音
符,无论正确与否,都高亮显示下一个要弹奏的内容。
针对以上需求,经过分析,完成了“视谱精灵”的总体设计,
如图1所示。系统接收的输入有两个,一是各种格式的乐谱文件,
一是midi输入设备;系统的输出有两个,一是屏幕显示乐谱,一
是播放音乐。在图中都以粗框线表示。系统打开要练习的乐谱文件,
将其转化为musicxml文件,然后将musicxml文件解析,产生树型
数据结构。以此树型数据结构为基础,建立完成屏幕显示乐谱功能
的数据和方法,就形成图形模块;建立完成播放功能功能的数据和
方法,就形成播放模块。播放和图形显示同步模块,根据播放模块
和图形模块的数据和方法,通过映射完成同步功能。midi输入模块,
完成midi输入信息的接收,以及对比,根据对比结果控制图形模
块显示。
图1 视谱精灵模块结构
下面就主要模块进行说明。
2.1 xml格式描述乐谱文件
用计算机进行音乐的辅助教学,我们需要解决的首要问题是让
计算机能够存储和显示五线谱。目前,五线谱的存储格式有很多,
不同的打谱软件支持的文件格式也不相同,因此要显示不同的打谱
软件编辑的五线谱,需要搞清楚这些文件的格式并进行解析,增加
了工作量。音乐扩展标记语言musicxml是专为解决这一类问题而
产生的。musicxml是一个开放的基于xml 的音乐符号文件格式,
用来作为乐谱信息的交换格式,特别是在不同的乐谱显示软件之间
进行信息交换。musicxml将整体乐曲元素和属性信息表示为一份
xml文档[1](如图2所示),克服其他格式兼容性差,结构复杂等缺
点,目前已经被很多应用软件支持。在系统中,我们采用一些插件
将其他格式的的乐谱文件,转换为相应的musicxml格式的乐谱描
述文件。这样,我们只需要根据musicxml格式的文件,显示五线
谱。
musicxml文件格式有两种:partwise格式和timewise格式。
partwise格式是由几个并行的声部part组成,而每个声部又是由
若干个小节measure组成;timewise格式格式刚好相反,是由一系
列的小节measure组成,每个小节measure是由若干个并行的声部
part组成。系统采用partwise格式,转换时间少。
图2 musicxml文件格式
图3 musicxml文件树型结构图[2]
musicxml文件描述的是一个树型结构,如图3所示。树根是
score-partwise结点,它的孩子是part结点。part结点的孩子是
measure结点。measure结点的孩子是属性attribute以及这一小
节中的音符note等。
2.2 树型数据结构
为了更有效地显示五线谱和播放乐谱,必须建立一个内存结构,
存储五线谱的各种信息。系统使用dom(documentobjectmodel文
档物件模型)对musicxml文件进行解析。dom是表示文档(比如
html和xml)和访问、操作构成文档的各种元素的一个应用程序接
口(api)。通过dom找到一个标签,建立与这个标签相对应的数据
结构,从而建立一个树型数据结构。
由于五线谱中的图形元素较多,使用面向对象的程序设计方法
更有效。因此针对由musicxml文件描述的五线谱,建立了以elment
类为基类,其他元素如 note,clef,measure等均直接或间接派生
自element类。所有元素均包括所属乐谱对象的指针,在屏幕、打
印机等的显示位置,在乐谱演奏中的时间位置等信息。
在musicxml文件中对五线谱的描述,是按声部part,小节
measure来描述的,而要将乐谱显示到具有一定长度和宽度的窗口
上,需要将musicxml文件中所描述的事件序列分割成若干页,每
一页是以一行一行显示的,所以需要将同一时间序列的事件以行进
行分割,产生一系列的system(如图4所示)。因此,系统除了建
立了musicxml文件所对应的元素类外,还建立了page类,system
等类。
图4 五线谱中图形类的示意图[4]
2.3 图形显示模块
图形显示模块需要根据建立的树型数据结构在屏幕上绘制出五
线谱,必需解决三个问题:
1.确定所要显示的符号;
2.确定在什么位置显示这个符号;
3.显示符号。
解决第一个问题的方法是,由已经建立的树型数据结构的结点
类型,从音乐字体中找到相应要显示的符号。对于第二个问题,需
要先根据页的大小,音符字体的大小,五条线的长和宽,计算出每
个音符在页面中的位置。然后,为了符合传统五线谱的表示方法,
还需要将其优化。
2.4播放模块
系统从树型数据结构中解析出midi事件,建立一个midi事件
列表,每个事件都有时间码,此时间码以tick为单位,这个时间
码也是与其他设备同步的关键。
系统支持多种发声方式,有jack audio,linux下使用的alsa,
跨平台的portaudio库。所以,我们使用由抽象类driver派生出
alsaaudio、jackaudio、portaudio的三个类,系统默认使用
portaudio类,系统也可由用户设置具体使用的音频驱动器类。
portaudio是一个开源的多媒体库,系统将其封装在portaudio
类中。portaudio采用并发机制,系统中声卡驱动定时调用
portaudio的回调函数,在回调函数中对输入缓冲区和输出缓冲区
进行操作。在播放模块,建立一个类负责播放逻辑,控制演奏时播
放和显示的同步,并实现在播放时能实时改变速度、音量等[5]。
2.5 播放和显示同步模块和midi输入模块
图5 播放和显示同步原理[6]
播放状态下,放音和此时发音的所有音符高亮显示需要同步。
上面可以看到从树型结构中,我们收集了所有的midi事件,并建
立了按时间顺序建立的midi事件列表。播放是根据事件列表及其
事件中存储的时间码进行的,我们建立了由时间码和绝对时间之间
进行转换的函数。这样,我们可以根据当前的时间与开始播放的时
间的时间差,得到绝对时间,考虑到设置的节奏等因素,计算出相
对时间,即事件所对应的时间码。由此时间码可以很快找到所对应
的事件。由事件可快速找到对应的图形元素的坐标。
播放器是按绝对时间进行播放的,负责同步的模块建立一个计
数器,每隔100ms检测绝对时间,看看绝对时间是不是到了下一个
要显示区段所计算出来的绝对时间,不是则不移动显示,否则移动
显示位置。从而实现了播放和显示的同步。
在练习状态下,只需要找到事件序列中同一拍的所有音符即可,
由事件的相对时间tick定位即可。
3.结束语
在此基础上,我们还可以做更多辅助教学的应用,例如统计学
习者弹奏错误音符的数量,并对其容易出错的地方进行分析,可以
给出进一步有针对性的练习建议;将练习的乐谱根据难易程度或教
学内容分成等级;可以将辅助教学软件做成c/s或b/s结构,学生
练习的情况可以上传到老师,老师可以根据学生课外练习情况,在
课堂上给出有效专业指导;对学习者的一次练习可以录下来,进行
回放,学习者可以在回放中,体会和提高。
参考文献:
[1] d. goto,1 t. gotoh, kawa-tachino,and n.
tamura1, a transcription system from musicxml format to
braille music notation,hindawi publishing
corporation,eurasip journal on advances in signal
processing,volume 2007, article id 42498, 9 pages.
[2] recordare, “musicxml software,” 2006,
/.
[3]m. good, “musicxml for notation and analysis,” in the
virtual score: representation, retrieval, restoration, vol.
12.
of computing in musicology, pp. 113–124, mit press,
cambridge,mass, usa, 2001.
[4] hoos h.; hamel k.; renz k.; kilian j. representing
score-level music using the guido music-notation format.
computing in musicology,vol 12, editors: t,
dge-field; mit press, 2001.
[5] portmedia, “platform independent libraries for sound
and midi”, /.
[6]renz kai ”algorithms and data structures for a music
notation system based on guido music notation”phd thesis,
technischen universit¨at darmstadt,2002.
作者简介:
宋沛(1971-),女,河南省长垣县人,硕士,讲师,主要研究领
域为计算信息技术及应用、电子设计自动化。
蔡扬(1977-),女,广州潮州人,硕士,副教授,主要研究领
域为钢琴表演、键盘发展史、钢琴与计算机应用等。
罗琼(1971-),女, 四川德阳人,硕士,讲师,主要研究领域为数
据挖掘、软件工程。
版权声明:本文标题:视谱精灵设计和实现论文 内容由网友自发贡献,该文观点仅代表作者本人, 转载请联系作者并注明出处:http://www.roclinux.cn/p/1713505010a637999.html, 本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。
发表评论