vb模拟生日歌(失败品)
vb吧
全部回复
仅看楼主
level 11
Teletypes 楼主
[汗]
Option Explicit
Private Declare Function midiOutOpen Lib "winmm" (lphMidiOut As Long, ByVal uDeviceID As Long, ByVal dwCallback As Long, ByVal dwInstance As Long, ByVal dwFlags As Long) As Long
Private Declare Function midiOutClose Lib "winmm" (ByVal hMidiOut As Long) As Long
Private Declare Function midiOutShortMsg Lib "winmm" (ByVal hMidiOut As Long, ByVal dwMsg As Long) As Long
Private Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long)
'参考资料一:https://tieba.baidu.com/p/7232176258
'参考资料二:https://blog.csdn.net/vcacc/article/details/17787239
'参考资料三:生日快乐歌简谱
Dim I As Integer, hMO As Long, YueQi As Long
Dim A As Long, j As Long, k As Long
Private Sub Form_Activate()
Me.AutoRedraw = False
Me.FontSize = 15
Me.Print "模拟音效播放ing"
DoEvents
j = 1
k = 5
If midiOutOpen(hMO, -1&, 0&, 0&, 0&) Then Exit Sub
midiOutShortMsg hMO, &HC0& Or (26 * &H100&)
A = &H7F3990
'ret=midiOutShortMsg(midiout, &H90 + ((flip) * &H100) + (volume * &H10000) + channel)
midiOutShortMsg hMO, A + &H500 * j: Sleep 50 * k
midiOutShortMsg hMO, A + &H500 * j: Sleep 50 * k
midiOutShortMsg hMO, A + &H600 * j: Sleep 100 * k
midiOutShortMsg hMO, A + &H500 * j: Sleep 100 * k
midiOutShortMsg hMO, A + &H800 * j: Sleep 100 * k
midiOutShortMsg hMO, A + &H700 * j: Sleep 200 * k
midiOutShortMsg hMO, A + &H500 * j: Sleep 50 * k
midiOutShortMsg hMO, A + &H500 * j: Sleep 50 * k
midiOutShortMsg hMO, A + &H600 * j: Sleep 100 * k
midiOutShortMsg hMO, A + &H500 * j: Sleep 100 * k
midiOutShortMsg hMO, A + &H900 * j: Sleep 100 * k
midiOutShortMsg hMO, A + &H800 * j: Sleep 200 * k
midiOutShortMsg hMO, A + &H500 * j: Sleep 50 * k
midiOutShortMsg hMO, A + &H500 * j: Sleep 50 * k
midiOutShortMsg hMO, A + &HC00 * j: Sleep 100 * k
midiOutShortMsg hMO, A + &HA00 * j: Sleep 100 * k
midiOutShortMsg hMO, A + &H800 * j: Sleep 100 * k
midiOutShortMsg hMO, A + &H700 * j: Sleep 100 * k
midiOutShortMsg hMO, A + &H600 * j: Sleep 100 * k
midiOutClose hMO
Me.Print "模拟音效播放完毕"
End Sub
2021年02月21日 07点02分 1
level 11
复制这段内容后打开百度网盘App,操作更方便哦。链接:网页链接提取码:gt94
2021年02月21日 16点02分 2
[真棒]
2021年02月22日 02点02分
level 11
恰巧学过一点点音乐知识,所以按照我的理解对代码进行了修改(其实是直接根据谱子重写的),并保留原代码用以对比
2021年02月21日 16点02分 3
level 11
查了一下midi音符代码表,发现基准音高为77(也即F大调)(另外,代码只是仿写你的,实际上并未学过相关函数,建议楼主若有兴趣可以更仔细的研究dwMsg)
2021年02月21日 17点02分 4
[真棒]厉害,代码看着就比我专业。我也是照搬模拟飞机海浪的代码试着改音乐玩玩没弄成功。因为网上资料里写着可以模拟乐器,所以简单尝试了一下。
2021年02月22日 02点02分
60是中央C,所以65才是F大调的基准音高,77比65大12刚好高出一个八度。65是小字一组的F,77是小字二组的F。
2021年02月23日 02点02分
@yjryym 贴吧大神果然多,说得就很专业。[真棒]
2021年02月23日 02点02分
@yjryym 我还以为72为中央C
2021年02月23日 04点02分
1