用VB做电子琴 暂停播放文件

weixin_39505338 2017-07-13 11:32:24
Private Sub open_Click()
Dim b As String
Dim ch(16) As Integer
Dim Channel As Integer
Dim Temp As String
Dim ChannelNo As Integer
Dim MusicNo As Integer
Dim filename As String
Dim i, j As Long
For j = 1 To 16
For i = 1 To 3000
Delay(j, i) = -1
Next i
Next j
Me.CommonDialog1.ShowOpen
If Me.CommonDialog1.filename = "" Then Exit Sub
filename = Me.CommonDialog1.filename
If Dir(filename) = "" Then
MsgBox "找不到文件"
Exit Sub
End If
Open filename For Input As #1

Do While Not EOF(1)
Input #1, b
If InStr(UCase(b), "CHANNEL") <> 0 Then
Temp = Trim(Mid(b, 9, 10))
ChannelNo = Val(Mid(Temp, 1, InStr(Temp, " ")))
MusicNo = Val(Mid(Temp, InStr(Temp, " "), 10))
Call midi_outshort(&HB0 + ChannelNo, 0, 0)
Call midi_outshort(&HC0 + ChannelNo, MusicNo, 0)

Else
Channel = Val(Mid(b, 14, 2))
ch(Channel) = ch(Channel) + 1
Sound(Channel, ch(Channel)) = Mid(b, 1, 10)
Delay(Channel, ch(Channel)) = Val(Mid(b, 11, 3))
End If
Loop
Close #1
End Sub

Private Sub play_Click()
Dim s As String
Dim i As Integer
Dim j As Integer
Dim k As Integer
'Timer1.Enabled = True
For i = 1 To 16
Playch(i) = 1
PlaySound(i) = Sound(i, 1)
PlayDelay(i) = Delay(i, 1)
For j = 1 To 10
s = Mid(PlaySound(i), j, 1)
If s <> " " And s <> "" Then StartNote NoteFromkey(Asc(s)), i
Next j
Next i
Call PlaySoundTimer

Private Sub PlaySoundTimer()
Dim i As Integer
Dim k As Integer
Dim j As Integer
Dim s As String
flag = True
Do While flag
k = 0
For i = 1 To 16
' k = k + PlayDelay(Playch(i))
k = k + PlayDelay(i)
If k = -16 Then
flag = False
Exit Sub
End If
Next i
For i = 1 To 16
If PlayDelay(i) <> -1 Then
If PlayDelay(i) = 0 Then
'关闭上一组
' StopNote NoteFromKey(Asc(Mid(PlaySound(i), 1, 1))), i
For j = 1 To 10
s = Mid(PlaySound(i), j, 1)
If s <> " " And s <> "" Then StopNote NoteFromkey(Asc(s)), i
Next j
Playch(i) = Playch(i) + 1
PlaySound(i) = Sound(i, Playch(i))
PlayDelay(i) = Delay(i, Playch(i))
'开启下一组
' StartNote NoteFromKey(Asc(Mid(PlaySound(i), 1, 1)))
For j = 1 To 10
s = Mid(PlaySound(i), j, 1)
If s <> " " And s <> "" Then StartNote NoteFromkey(Asc(s)), i
Next j

Else
PlayDelay(i) = PlayDelay(i) - 1
End If
End If
Next i
DoEvents
Sleep (DelayTimer)
DoEvents
Loop
End Sub

Private Sub stop_Click()
Timer1.Enabled = False
flag = False
DoEvents
If flag = False Then
End If
End Sub

要用暂停的命令来停止发声的过程
...全文
686 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
VBAHZ 2017-07-26
  • 打赏
  • 举报
回复
引用 1 楼 Chen8013 的回复:
贴一堆破代码,又不能运行! 也不说清楚具体遇到了什么难题,有个屁用!
呵呵,刚看个开头,就是这个感觉!
无·法 2017-07-16
  • 打赏
  • 举报
回复
告诉你一个好办法,利用vb的缺陷,你要暂停直接弹出个msgbox即可
舉杯邀明月 2017-07-14
  • 打赏
  • 举报
回复
贴一堆破代码,又不能运行! 也不说清楚具体遇到了什么难题,有个屁用!
脆皮大雪糕 2017-07-14
  • 打赏
  • 举报
回复
贴完代码对着屏幕描述了一番问题以后就提交发布了

1,502

社区成员

发帖
与我相关
我的任务
社区描述
VB 网络编程
社区管理员
  • 网络编程
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧