摘 要
针对数字化音乐教学的需要提出了基于VB环境开发五线谱作曲工具的可行性并对其中技术原理关键问题给出了具体的解决方法实现了一个基本的可视化作曲工具对一般音乐教育工作者具有很好的启发性
关键词
数字化音乐;五线谱;音乐软件
目前在数字化音乐教学过程中需要用到许多编辑软件和作曲软件许多音乐教育工作者对如何开发自己的数字音乐工具很感兴趣而一般的计算机类书刊对此类问题探讨和介绍的比较少本文试图从这一领域做些原理性的研究工作以供音乐教育工作者和其他相关爱好者发挥扩展起到抛砖引玉的作用因此本文以业余程序员最熟悉的开发工具VB为平台开发设计了一个基本的五线谱编辑工具并实现了数字音乐的合成播放保存和读写
可视化图形界面的设计
首先在VB环境中建立一个新的窗体并保存然后在窗体中建立菜单和工具条为简便起见工具条用Option控件组来实现(需要把风格设为 Graphical模式)并把事先做好的图标加载到控件上图是五线谱作曲工具的主界面其中Picture控件作为可视化编辑工具的客户操作区 Picture控件中所加载的位图包含了作曲过程中需要的基本音符在操作过程中通过位图提取的方式来获得相应的音符然后插入到所需的位置
图 VB环境中的设计界面
五线谱作曲功能的实现
在工具条上的五个Option控件构成一个控件组根据Option控件本身的特性其中一个选中时其它的自动设为非选择项因此操作起来很方便当选中其中的一个音符图标后自动触发相应的事件事件处理代码如下
Private Sub Option_Click(Index As Integer)
PictureSetFocus 焦点集中到客户区
Yinfu = Index 获得音符序号
End Sub
其中整型数Yinfu是一个全局变量通过控件组中的索引Index可以知道哪个音符按钮被选中为了记录作曲过程中的操作定义一个二维数组 Music用来存放数据光标点取在Picture客户区中的坐标经过圆整后作为数组的行列序号数组元素记录所选的音符整个处理过程放在 Picture控件的MouseDown事件中进行代码如下
Private Sub Picture_MouseDown(Button As Integer Shift As Integer X As Single Y As Single)
Dim LineY& ColoumX&
LineY& = Round((Y ) / ) 行圆整
ColoumX& = Round((X ) / ) 列圆整
If Not (ColoumX& > And LineY& > ) Then
Exit Sub
End If
If Music(LineY& ColoumX& + HScrollValue) = Then
Music(LineY& ColoumX&
+ HScrollValue) = Selection 记录音符
End If
DisplayNotes 在客户区显示当前音符
End Sub
当程序运行时首先通过主窗体的Form Load事件在Picture的客户区绘出五线谱的五条平行的水平线作曲者便可以根据不同的音高在相应位置插入音符插入音符的过程是通过上面的 DisplayNotes函数来实现的利用Windows系统的API(应用程序接口)函数Bitblt所具有的内存数据传送的功能将Picture 中位图的一部分提取出来并按照一定的变换后插入到Picture的客户区制定位置主要代码如下
Select Case ID
Case
BitBlt Picturehdc X& Y& Picturehdc SRCAND
Case
BitBlt Picturehdc X& Y& Picturehdc SRCAND
…
图 五线谱作曲工具的运行效果