Code: Select all
Declare MIDIOpen()
Declare ChargeInstrument(Channel.a,Instrument.a)
Declare SendMIDIMessage(nStatus.l,nChannel.l,nData1.l,nData2.l)
Declare PlayNoteMIDI(Channel.a,Note.a,VelociteDown.a,VelociteUp.a)
Global m_hMidiOut,m_MIDIOpen.a
Procedure SendMIDIMessage(nStatus.l,nChannel.l,nData1.l,nData2.l)
Protected dwFlags.l = nStatus | nChannel | (nData1 << 8 ) | (nData2 << 16)
Protected temp.l = midiOutShortMsg_ (m_hMidiOut,dwFlags) ;
If temp<>0
MessageRequester ( "Error Midi" , "Error sending message to MIDI" ,0)
EndIf
EndProcedure
Procedure MIDIOpen()
If m_MIDIOpen = 0
If midiOutOpen_ (@m_hMidiOut,#MIDIMAPPER,0,0,0) <> 0
MessageRequester ( "Error Midi" , "Failed to open MIDI device" ,0)
Else
SendMIDIMessage($C0,0,0,0)
m_MIDIOpen = 1
EndIf
EndIf
EndProcedure
Procedure MIDIClose(handle.l)
midiOutClose_(m_hMidiOut)
EndProcedure
Procedure PlayNoteMIDI(Channel.a,Note.a,VelociteDown.a,VelociteUp.a)
If m_MIDIOpen
SendMIDIMessage($80 | Channel,0,Note,VelociteDown)
SendMIDIMessage($90 | Channel,0,Note,VelociteUp)
EndIf
EndProcedure
Procedure OpenInstrument(Channel.a,Instrument.a)
If m_MIDIOpen
SendMIDIMessage($C0 | Channel,0,Instrument,0)
EndIf
EndProcedure
MIDIOpen()
ExamineDesktops()
w.f = DesktopWidth(0)
h.f = DesktopHeight(0)
pt.point
lx.i
c1 = Random(15)
c2 = Random(15)
I1 = Random(127)
i2 = Random(127)
OpenInstrument(c1,i1)
OpenInstrument(c2,i2)
OpenWindow(#PB_Any, 0, 0, 0, 0, "", #PB_Window_Invisible)
Repeat
GetCursorPos_(@pt)
If lx <> pt\x
lx=pt\x
note.f = (((0-127) / (1-w)) * pt\x)
If pt\y > h/2
PlayNoteMIDI(c1,Int(note),127,127)
Else
PlayNoteMIDI(c2,Int(note),127,127)
EndIf
EndIf
Delay(note)
If GetAsyncKeyState_(#VK_ESCAPE) & $8000
End
EndIf
ForEver