i VAR WORD channel = 0 mbyte2 = 58 GOSUB midiprog: ' change program to tuba myloop: FOR i = 48 TO 72 mbyte2 = i ' note number mbyte3 = 64 ' mid velocity GOSUB midion: PAUSE 200 GOSUB midioff: ' it is generally a good idea to ' turn off all notes you turn on NEXT GOTO myloop: '******************************************************************** '***** USEFUL MIDI FUNCTIONS ' Set channel to 0 - 15 ' NOTE: mbyte2 and mbyte3 must be in range 0-127!! channel VAR NIB mbyte2 VAR BYTE mbyte3 VAR BYTE lastnote VAR BYTE noteOn CON 144 channel0 CON 0 noteOff CON 128 controlr CON 176 atouch CON 208 bender CON 224 prgchang CON 192 MIDIPIN CON 7 MIDITIME CON 12 '**** 12 for BS2, 60 for BS2SX *' '*** Standard Note On *' midion: SEROUT MIDIPIN, MIDITIME, 0, [noteOn + channel, mbyte2, mbyte3] ' debug "NoteOn ", dec mbyte2, " ", dec mbyte3, cr RETURN '*** Standard Note Off, uses real NoteOff status byte *' midioff: SEROUT MIDIPIN, MIDITIME, 0, [noteOff + channel, mbyte2, 64] ' debug "NoteOff ", dec mbyte2, cr RETURN '*** Monophonic aftertouch *' miditouch: SEROUT MIDIPIN, MIDITIME, 0, [atouch + channel, mbyte2] ' debug "ATouch ", dec mbyte2, cr RETURN '*** Send Bank Select first,then Program Number *' midiprog: SEROUT MIDIPIN, MIDITIME, 0, [controlr + channel, 0, 0] SEROUT MIDIPIN, MIDITIME, 0, [prgchang + channel, mbyte2] RETURN midiprogbase: SEROUT MIDIPIN, MIDITIME, 0, [prgchang + channel, mbyte2] RETURN '*** Standard Pitch Bend *' midibend: SEROUT MIDIPIN, MIDITIME, 0, [bender + channel, 127, mbyte3] ' debug "Bender ", dec mbyte3, cr RETURN '*** Control Change Message *' midicont: SEROUT MIDIPIN, MIDITIME, 0, [controlr + channel, mbyte2, mbyte3] ' debug "Controller ", dec mbyte2, " ", dec mbyte3, cr RETURN