Я пытаюсь воспроизвести MIDI-файл в моем VB.NET (VB 2010 Express), и все хорошо работает с кодом из этот другой вопрос здесь, о переполнении стека , который я перевел с C на VB.
Однако мне также нужно PAUSE, пока этот код предназначен только для открытия и остановки. Я отредактировал код так:
Imports System.Runtime.InteropServices
Imports System.IO
''' <summary>
''' MCIPlayer is based off code by Slain.
''' Found here: http://www.sadeveloper.net/Articles_View.aspx?articleID=212
''' </summary>
Public Class MCIPlayer
Private Shared ReadOnly sAlias As String = "TeaTimerAudio"
<DllImport("winmm.dll")> _
Private Shared Function mciSendString(ByVal strCommand As String, ByVal strReturn As StringBuilder, ByVal iReturnLength As Integer, ByVal hwndCallback As IntPtr) As Long
End Function
Public Shared Sub Open(ByVal sFileName As String)
If _Status() <> "" Then
_Close()
End If
Dim sCommand As String = "open """ & sFileName & """ alias " & sAlias
mciSendString(sCommand, Nothing, 0, IntPtr.Zero)
End Sub
Public Shared Sub Close()
Dim sCommand As String = "close " & sAlias
mciSendString(sCommand, Nothing, 0, IntPtr.Zero)
End Sub
Public Shared Sub Pause()
Dim sCommand As String = "pause " & sAlias
mciSendString(sCommand, Nothing, 0, IntPtr.Zero)
End Sub
Public Shared Sub Play()
Dim sCommand As String = "play " & sAlias
mciSendString(sCommand, Nothing, 0, IntPtr.Zero)
End Sub
Public Shared Function Status() As String
Dim sBuffer As New StringBuilder(128)
mciSendString("status " & sAlias & " mode", sBuffer, sBuffer.Capacity, IntPtr.Zero)
Return sBuffer.ToString()
End Function
End Class
И я называю это так:
Private Sub Form1_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
MCIPlayer.Open("C:\Users\User\Desktop\aqua-roses_are_red.mid")
End Sub
Private Sub PlayButton_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles PlayButton.Click
MCIPlayer.Play()
End Sub
Private Sub PauseButton_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles PauseButton.Click
MCIPlayer.Pause()
End Sub
Private Sub StopButton_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles StopButton.Click
MCIPlayer.Close()
End Sub
Проблема в том, что, по какой-то причине, если я нажимаю кнопку воспроизведения, затем приостанавливаю, а затем снова запускаю, файл фактически возобновляет воспроизведение с того места, где он был оставлен, но инструменты совершенно другие. Мелодия переключается обратно на пианино по умолчанию, а перед нажатием паузы звучал совершенно другой звук.
Можете ли вы помочь мне в этом?
Я нахожусь на Win7x64
Большое спасибо! Лучший