利用Visual Basic6.0实现五线谱作曲工具


  摘 要

  针对数字化音乐教学的需求,提出了基于VB环境开发五线谱作曲工具的可行性,并对其中技术原理、 要害问题给出了具体的解决 步骤,实现了一个 根本的可视化作曲工具,对普通音乐教育工作者 存在很好的启示性 。

   要害词

  数字化音乐;五线谱;音乐软件

  目前在数字化音乐教学过程中需求用到许多编辑软件和作曲软件 。许多音乐教育工作者对如何开发自己的数字音乐工具很有兴趣,而普通的计算机类书刊对此类问题探讨和介绍的 比较少,本文试图从这一领域做些原理性的探究工作,以供音乐教育工作者和 其余 有关 爱好者 施展、 扩大,起到抛砖引玉的作用 。 因此本文以业余程序员最 相熟的开发工具VB为平台,开发设计了一个 根本的五线谱编辑工具,并实现了数字音乐的合成、播放、 保留和读写 。

  可视化图形界面的设计

  首先在VB环境中 构建一个新的窗体并 保留, 而后在窗体中 构建菜单和工具条,为简便起见,工具条用Option控件组来实现(需求把 格调设为 Graphical模式),并把事先做好的图标加载到控件上 。图1是五线谱作曲工具的主界面,其中Picture1控件作为可视化编辑工具的客户操作区, Picture2控件中所加载的位图包括了作曲过程中需求的 根本音符,在操作过程中通过位图提取的 模式来 获得相应的音符, 而后插入到所需的位置 。

利用Visual Basic6.0实现五线谱作曲工具

图1 VB环境中的设计界面

  五线谱作曲 性能的实现

  在工具条上的五个Option控件组成一个控件组,依据Option控件 本身的 特点,其中一个选中时其它的自动设为非 取舍项, 因此操作起来很容易 。 当选中其中的一个音符图标后,自动触发相应的事件 。事件 解决代码如下:

Private Sub Option1_Click(Index As Integer)

 Picture1.SetFocus ‘ 焦点集中到客户区

 Yinfu = Index ‘ 获得音符序号

End Sub

  其中整型数Yinfu是一个全局变量,通过控件组中的索引Index 可以晓得哪个音符按钮被选中 。为了记录作曲过程中的操作,定义一个二维数组 Music用来 存放数据,光标点取在Picture1客户区中的坐标 通过圆整后作为数组的行、列序号,数组元素记录所选的音符 。整个 解决过程放在 Picture1控件的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) Then

  Exit Sub

 End If

 If Music(LineY&, ColoumX& + HScroll1.Value) = 0 Then

  Music(LineY&, ColoumX&

  + HScroll1.Value) = Selection ‘ 记录音符

 End If

 DisplayNotes ‘在客户区显示目前音符

End Sub

  当程序运行时,首先通过主窗体的Form Load事件在Picture1的客户区绘出五线谱的五条平行的水平线,作曲者便 可以依据不同的音高在相应位置插入音符 。插入音符的过程是通过上面的 DisplayNotes函数来实现的,利用Windows系统的API( 利用程序接口)函数Bitblt所 存在的内存数据 传递的 性能将Picture2 中位图的一 部分提 存入来并依照 定然的变换后插入到Picture1的客户区 制订位置,重要代码如下:

Select Case ID

 Case 1

  BitBlt Picture1.hdc, X& - 7, Y& - 18, 20, 30, Picture2.hdc, 66, 0, SRCAND

 Case 2

  BitBlt Picture1.hdc, X& - 5, Y& - 18, 20, 30, Picture2.hdc, 0, 0, SRCAND

  …

利用Visual Basic6.0实现五线谱作曲工具

图2 五线谱作曲工具的运行 动机