03/09/09 11:33
orma674
Ciao a tutti,
ho creato un programmino per acquisire i messaggi midi di lunghi (SysEx) da periferiche midi. Questo funziona in fase di debug ma quando creo il file eseguibile questo mi da errore. La funzione che chiamo in callback all'apertura del device midi è la seguente
Public Sub fMidiIn_Proc(ByVal hmIN As Long, ByVal wMsg As Long, ByVal dwInstance As Long, ByVal dwParam1 As Long, ByVal dwParam2 As Long)
Dim ct As Integer
Dim mimdata As String
Dim ret As Integer
Dim tShortMsg As String
Dim tByte0 As String
Dim tByte1 As String
Dim tByte2 As String
Dim tByte3 As String
On Error Resume Next
Select Case wMsg
Case MM_MIM_OPEN ': MsgBox ("MidiIn Open"
Case MM_MIM_CLOSE ': MsgBox ("MidiIn Close"
'MidiIn_Hdr.dwFlags = MHDR_DONE '1
Case MM_MIM_DATA ': MsgBox ("DATA RECEIVED"
If dwParam1 > 0 Then tShortMsg = Right("00000000" & hex(dwParam1), 8)
' Pack the data into a Long variable
' Byte 3 = 00
tByte3 = Mid$(tShortMsg, 7, 2)
' Byte 2 = Volume
tByte2 = Mid$(tShortMsg, 5, 2)
' Byte 1 = Note
tByte1 = Mid$(tShortMsg, 3, 2)
' Byte 0 (LSB) = Status
tByte0 = Mid$(tShortMsg, 1, 2)
mimdata = tByte0 & " - " & tByte1 & " - " & tByte2 & " - " & tByte3
Call tMidi.cMidiIn_RxMessage(MM_MIM_DATA, mimdata)
Case MM_MIM_LONGDATA
For ct = 0 To MidiIn_Hdr.dwBytesRecorded - 1
If MidiIn_String(ct) <> 247 Then 'not F7 EOX
mimdata = mimdata & Mid$("00", 1, 2 - Len(hex(MidiIn_String(ct)))) & hex(MidiIn_String(ct)) & " "
MidiIn_String(ct) = 0
Else
mimdata = mimdata & Mid$("00", 1, 2 - Len(hex(MidiIn_String(ct)))) & hex(MidiIn_String(ct))
MidiIn_String(ct) = 0
End If
Next ct
Call tMidi.cMidiIn_RxMessage(MM_MIM_LONGDATA, mimdata)
' If MidiIn_Hdr.dwBufferLength = 0 Then Call fMidiIn_AddBuffer
Call fMidiIn_AddBuffer
Case MM_MIM_ERROR ': MsgBox ("ERROR"
Case MM_MIM_LONGERROR ': MsgBox ("LONGERROR"
Case Else
End Select
End Sub
Ovviamente prima di aprire di avviare il MidiIn, preparo il tutto per la ricezione del buffer. Il codice è abbastanza lungo per questo non lo invio tutto e mi limito alla sola funzione di callback.
Grazie per la collaborazione.
ho creato un programmino per acquisire i messaggi midi di lunghi (SysEx) da periferiche midi. Questo funziona in fase di debug ma quando creo il file eseguibile questo mi da errore. La funzione che chiamo in callback all'apertura del device midi è la seguente
Public Sub fMidiIn_Proc(ByVal hmIN As Long, ByVal wMsg As Long, ByVal dwInstance As Long, ByVal dwParam1 As Long, ByVal dwParam2 As Long)
Dim ct As Integer
Dim mimdata As String
Dim ret As Integer
Dim tShortMsg As String
Dim tByte0 As String
Dim tByte1 As String
Dim tByte2 As String
Dim tByte3 As String
On Error Resume Next
Select Case wMsg
Case MM_MIM_OPEN ': MsgBox ("MidiIn Open"
Case MM_MIM_CLOSE ': MsgBox ("MidiIn Close"
'MidiIn_Hdr.dwFlags = MHDR_DONE '1
Case MM_MIM_DATA ': MsgBox ("DATA RECEIVED"
If dwParam1 > 0 Then tShortMsg = Right("00000000" & hex(dwParam1), 8)
' Pack the data into a Long variable
' Byte 3 = 00
tByte3 = Mid$(tShortMsg, 7, 2)
' Byte 2 = Volume
tByte2 = Mid$(tShortMsg, 5, 2)
' Byte 1 = Note
tByte1 = Mid$(tShortMsg, 3, 2)
' Byte 0 (LSB) = Status
tByte0 = Mid$(tShortMsg, 1, 2)
mimdata = tByte0 & " - " & tByte1 & " - " & tByte2 & " - " & tByte3
Call tMidi.cMidiIn_RxMessage(MM_MIM_DATA, mimdata)
Case MM_MIM_LONGDATA
For ct = 0 To MidiIn_Hdr.dwBytesRecorded - 1
If MidiIn_String(ct) <> 247 Then 'not F7 EOX
mimdata = mimdata & Mid$("00", 1, 2 - Len(hex(MidiIn_String(ct)))) & hex(MidiIn_String(ct)) & " "
MidiIn_String(ct) = 0
Else
mimdata = mimdata & Mid$("00", 1, 2 - Len(hex(MidiIn_String(ct)))) & hex(MidiIn_String(ct))
MidiIn_String(ct) = 0
End If
Next ct
Call tMidi.cMidiIn_RxMessage(MM_MIM_LONGDATA, mimdata)
' If MidiIn_Hdr.dwBufferLength = 0 Then Call fMidiIn_AddBuffer
Call fMidiIn_AddBuffer
Case MM_MIM_ERROR ': MsgBox ("ERROR"
Case MM_MIM_LONGERROR ': MsgBox ("LONGERROR"
Case Else
End Select
End Sub
Ovviamente prima di aprire di avviare il MidiIn, preparo il tutto per la ricezione del buffer. Il codice è abbastanza lungo per questo non lo invio tutto e mi limito alla sola funzione di callback.
Grazie per la collaborazione.
aaa