Habe mal den Code deutlich verkleinert (Man möge mir die Fehler verzeihen, aber auch gerne zeigen)
Code: Alles auswählen
#MIDIRequ_InSet = 2
#MIDIRequ_OutSet = 1
OutDevice.l=1
InDevice.l=0
MIDIResult=3
InfoOut.MIDIOUTCAPS
Structure MIDIData
Channel.b
Note.b
Velocity.b
Null.b
EndStructure
Procedure MidiInProc(hMidiIn.l, wMsg.l, dwInstance.l, dwParam1.l, dwParam2.l)
Protected Status.l, OnOf.l, NoteNr.l, Velocity.l
Select wMsg
Case #MM_MIM_DATA
Status=dwParam1 & $FF
key1=(dwParam1 >> 8) & $FF
key2=(dwParam1 >> 16) & $FF
key3=dwParam1 & $F
key4=dwParam2
SetGadgetText(11,Str(Status))
SetGadgetText(12,Str(key1))
SetGadgetText(13,Str(key2))
SetGadgetText(14,Str(key3))
SetGadgetText(15,Str(key4))
EndSelect
EndProcedure
If MIDIResult & #MIDIRequ_InSet
hMidiIn.l
If midiInOpen_(@hMidiIn, InDevice, @MidiInProc(), 0, #CALLBACK_FUNCTION) = #MMSYSERR_NOERROR
If midiInStart_(hMidiIn) = #MMSYSERR_NOERROR
EndIf
EndIf
EndIf
If hMidiIn And hMidiOut
If midiConnect_(hMidiIn, hMidiOut, 0) = 0
EndIf
EndIf
main:
OpenWindow(0,0,0,260,90,"",#PB_Window_ScreenCentered)
TextGadget(1, 10,10,40,20,"Status")
TextGadget(2, 60,10,40,20,"Key1")
TextGadget(3,110,10,40,20,"Key2")
TextGadget(4,160,10,40,20,"Key3")
TextGadget(5,210,10,40,20,"Key4")
ButtonGadget(7,10,60,80,20,"EXIT")
StringGadget(11, 10,30,40,20,"",#PB_Text_Right)
StringGadget(12, 60,30,40,20,"",#PB_Text_Right)
StringGadget(13,110,30,40,20,"",#PB_Text_Right)
StringGadget(14,160,30,40,20,"",#PB_Text_Right)
StringGadget(15,210,30,40,20,"",#PB_Text_Right)
Repeat
Delay(1)
Event=WindowEvent()
Select Event
Case #PB_Event_Gadget
Gadget=EventGadget()
Select Gadget
Case 7
midiDisconnect_(hMidiIn, hMidiOut, 0)
While midiInClose_(hMidiIn) = #MIDIERR_STILLPLAYING : Wend
While midiOutClose_(hMidiOut) = #MIDIERR_STILLPLAYING : Wend
End
EndSelect
EndSelect
ForEver
Damit kannste den Datenfluss der MIDI Schnittstelle anzeigen. Wie man jedoch wieder einen genauen Wert (0-127) vom Drehregler bekommt, kriege ich nicht hin, sorry. Vielleicht schafft es ein anderer....