数字化音乐毕业设计_第1页
数字化音乐毕业设计_第2页
数字化音乐毕业设计_第3页
数字化音乐毕业设计_第4页
免费预览已结束,剩余1页可下载查看

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、摘 要 针对数字化音乐教学的需要,提出了基于vb环境开发五线谱作曲工具的可行性,并对其中技术原理、关键问题给出了具体的解决方法,实现了一个基本的可视化作曲工具,对一般音乐教育工作者具有很好的启发性。关键词 数字化音乐;五线谱;音乐软件目前在数字化音乐教学过程中需要用到许多编辑软件和作曲软件。许多音乐教育工作者对如何开发自己的数字音乐工具很感兴趣,而一般的计算机类书刊对此类问题探讨和介绍的比较少,本文试图从这一领域做些原理性的研究工作,以供音乐教育工作者和其他相关爱好者发挥、扩展,起到抛砖引玉的作用。因此本文以业余程序员最熟悉的开发工具vb为平台,开发设计了一个基本的五线谱编辑工具,并实现了数字

2、音乐的合成、播放、保存和读写。可视化图形界面的设计首先在vb环境中建立一个新的窗体并保存,然后在窗体中建立菜单和工具条,为简便起见,工具条用option控件组来实现(需要把风格设为 graphical模式),并把事先做好的图标加载到控件上。图1是五线谱作曲工具的主界面,其中picture1控件作为可视化编辑工具的客户操作区, picture2控件中所加载的位图包含了作曲过程中需要的基本音符,在操作过程中通过位图提取的方式来获得相应的音符,然后插入到所需的位置。图1 vb环境中的设计界面五线谱作曲功能的实现在工具条上的五个option控件构成一个控件组,根据option控件本身的特性,其中一个选

3、中时其它的自动设为非选择项,因此操作起来很方便。当选中其中的一个音符图标后,自动触发相应的事件。事件处理代码如下:private sub option1_click(index as integer)picture1.setfocus 焦点集中到客户区yinfu = index 获得音符序号end sub其中整型数yinfu是一个全局变量,通过控件组中的索引index可以知道哪个音符按钮被选中。为了记录作曲过程中的操作,定义一个二维数组 music用来存放数据,光标点取在picture1客户区中的坐标经过圆整后作为数组的行、列序号,数组元素记录所选的音符。整个处理过程放在 picture1控件

4、的mousedown事件中进行,代码如下:private sub picture1_mousedown(button as integer, shift as integer, x as single, y as single)dim liney&, coloumx&liney& = round(y - 13) / 5) 行圆整coloumx& = round(x - 30) / 16) 列圆整if not (coloumx& 0 and liney& 0) thenexit subend ifif music(liney&, coloumx& + hscroll1.value) = 0 th

5、enmusic(liney&, coloumx&+ hscroll1.value) = selection 记录音符end ifdisplaynotes 在客户区显示当前音符end sub当程序运行时,首先通过主窗体的form load事件在picture1的客户区绘出五线谱的五条平行的水平线,作曲者便可以根据不同的音高在相应位置插入音符。插入音符的过程是通过上面的 displaynotes函数来实现的,利用windows系统的api(应用程序接口)函数bitblt所具有的内存数据传送的功能将picture2 中位图的一部分提取出来并按照一定的变换后插入到picture1的客户区制定位置,主要

6、代码如下:select case idcase 1bitblt picture1.hdc, x& - 7, y& - 18, 20, 30, picture2.hdc, 66, 0, srcandcase 2bitblt picture1.hdc, x& - 5, y& - 18, 20, 30, picture2.hdc, 0, 0, srcand图2 五线谱作曲工具的运行效果曲谱的保存和读取在可视化编辑工具中所作的曲目应当能够保存为数据文件。保存和读取的操作是通过通用对话框commondialog来实现的,设计程序界面时在窗体上加载一个通用对话框控件。当点取程序菜单上的“保存”时,弹出文件

7、保存对话框,然后设置文件路径对音乐数据进行保存,其代码如下:commondialog1.filename = app.path & *.txtcommondialog1.showopen 显示保存对话框if commondialog1.filename = app.path & *.txt then exit subme.mousepointer = 11for liney& = 1 to 40outputs = tone & leadingzeros$(liney&, 2) & : for coloumx = 1 to 150a = chr(music(liney&, coloumx) +

8、asc(0)outputs = outputs & a 写入文件next coloumxwhole$ = whole$ & outputs & vbcrlfnext lineyopen commondialog1.filename for output as #1print #1, whole$close #1 关闭文件文件的读取过程与保存过程类似,只要通过input语句将文件中的数据加载到二维数组music中去就可以了。曲谱的合成与播放曲谱的合成是通过windows自带的多媒体api函数来实现的,这些api函数在winmm.dll文件中,因此需要把该文件引用到程序中。该动态链接库中包含了多个数字音乐(midi)输入、输出、合成等方面的库函数。在对曲谱进行midi合成播放时,首先将二维数组music中的数据转化为数字音频信号,然后通过计算机的声卡播放出来,其中的关键代码如下:for liney& = 1 to 30if music(liney&, x) 0 and not isagainflag thenmidimsg = &h90 + (46 + liney&) * &h100) + (volume * &h10000) + tempchannel 定义音高midioutsh

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论