【VB开源代码栏目提醒】:网学会员为广大网友收集整理了,vb电子琴程序设计 - 琴棋书画,希望对大家有所帮助!
一、窗体设计现在介绍窗体的
设计过程。
打开
VB 6 并新建一个工 程。
调整主窗体的长宽,并且设置KeyPreview 属性为 True, 这样主窗体才能对按键事件作出响应,这是非常重要的。
接 着添加一个 PictureBox 控件,用来产生一片凹陷的区域,以 便在它上面布置琴键。
现在要添加一组命令按钮用作白色 琴键。
先给窗体添加一个命令按钮控件,调整其尺寸为白 色琴键应有的大小,拖放到最左的琴键的位置,并修改其 Style 属性为 1、BackColor 属性为白色、Caption 属性为 空字符。
复制该命令按钮控件,作第一次粘贴,对
系统 提问的是否创建控件数组,回答“是”。
拖动粘贴出的这个命令按钮,在前一个白色琴键之右并排放置。
接着重 复粘贴、拖放操作,直至有 31 个白色琴键并排放好。
下 面添加黑色琴键。
仍做一个粘贴操作,调整其尺寸为黑色 琴键应有的大小,并在其属性设置中设置 BackColor 属性为黑色,拖放到最左的黑色琴键的位置。
再复制该黑色琴 键的命令按钮控件,粘贴,拖放到相应位置直至有 22 个黑色琴键放好。
为了与相应的音符对应,修改所有黑白 琴键按钮控件属性中 Index 的值,按琴键所代表的音阶的 顺序,从最右起,取值由 88 ,87 ,86 ,,逐个下 降,至 36 为最左琴键按钮的 Index 值。
最后添加三个 OptionButton 控件以便让弹奏者选择音色, “ 在我的程序中 设置了 “ 钢琴 ”、 黑管 ” 和 “ 合唱 ”三种音色 。
不 过,如果要提供更全面的音色选择,读者可以自行采用滚 动条控件 。
另外 , 还可设计一个类似于电子琴上“POWER”按钮的命令按钮用于关闭 MIDI 电子琴软件。
二、
代码编写我们的电子琴将使用 MIDI 来演奏。
什么是 MIDI 呢? MIDI 是 Musical Instrument DigitalInterface 的缩写, 也就是(电子)乐器数字(化)接口的意思,1983 年 由若干商业乐器制造商联合定制的。
MIDI 的最终目的就是 能够让乐器与
计算机一起工作,你只要发送弹奏某个音符的命令,MIDI 乐器就能够像一台大型音乐
工作站一样自行 演奏。
对于 Windows
程序员,想让电脑演奏 MIDI 音乐还是 非常简单的,我们只要调用几个与 MIDI 相关的函数就可以 了。
为了追求效果,你还可以安装软波表
软件来提升音质。
为了播放 MIDI 音乐,首先我们应该依次选择菜单条 上的“Porject”、“Add Module”为窗体添加一个模块,并在这个模块中声明以下三个 API 函数:Public Declare Function _midiOutOpen Lib winmm.dll _lphMidiOut As Long _ByVal uDeviceID As Long _ByVal dwCallback As Long _ByVal dwInstance As Long _ByVal dwFlags As Long As LongPublic Declare Function _midiOutClose Lib winmm.dll _ByVal hMidiOut As Long As LongPublic Declare Function _midiOutShortMsg Lib winmm.dll _ByVal hMidiOut As Long _ByVal dwMsg As Long As Long以上三个函数是 Windows 提供给程序员最基本的处理 MIDI 信息的函数。
第一、第二个函数分别用以打开和关闭 MIDI 输出设备。
第三个函数是最重要的,调用它可以产生 演奏效果。
其中,hMidiOut 参数为设备句柄,其值由 midiOutOpen 函数返回。
dwMsg 参数是用户要传送的 MIDI 指令,主要的运用变化就在这个参数上。
限于篇幅,详细的 MIDI 指令信息
代码不便一一列出,请查阅有关资料。
接着编写窗体
代码:Dim MidiOut YS YF As LongDim n125 As IntegerDim xz p2 As IntegerFunction PlayByVal p As Integer ByVal k As IntegerYS H100 p HC0midiOutShortMsg MidiOut YSYF H10000 127 H100 k H90midiOutShortMsg MidiOut YF End FunctionPrivate Sub Form_LoadDim i j As IntegerDim s As Strings zZxXcvVbBnNmaAsSdfFgGhHjs s qQwWerRtTyYu1234567890For j 36 To 88i AscMids j - 35 1ni jNext j’ 以上设置字符与琴键对应其中大写字母对黑键n44 48: n46 50: n47 52n107 60: n108 62n59 64: n39 65n105 72: n111 74: n112 76n91 77: n93 79p0 0: p1 71: p2 91MidiOut 0midiOutOpen MidiOut -1 0 0 0End SubPrivate Sub Form_KeyPressKeyAscii As IntegerDim a As Integera KeyAsciimidiOutShortMsg MidiOut H7BB0If na 35 And na 89 ThenCommand1na.SetFocusPlay pxz naElseOption1xz.SetFocusEnd IfEnd SubPrivate Sub Command1_MouseDownIndex As Integer Button As Integer Shift As Integer X AsSingle Y As SinglePlay pxz Command1Index.IndexEnd SubPrivate Sub Command2_ClickmidiOutClose MidiOutEndEnd SubPrivate Sub Form_UnloadCancel As IntegermidiOutClose MidiOutEndEnd SubPrivate Sub Form_MouseDownButton As Integer Shift As Integer X As Single Y As SinglemidiOutShortMsg MidiOut H7BB0Option1xz.SetFocusEnd SubPrivate Sub Form_KeyDownKeyCode As Integer Shift As IntegerIf KeyCode 111 And KeyCode 115 Thenxz KeyCode - 112Option1xz.SetFocusEnd IfEnd SubPrivate Sub Option1_ClickIndex As Integerxz Option1Index.IndexEnd Sub