just a little function to make in game midi's could be cool if you had little tunes based on people putting things together. Note durations are not perfect and you might need to tweak them some
type note_thing
note as integer
speed as integer
volume as integer
endtype
dim master_note(-1) as note_thing
make_midi("R",63,7,"q c5 c5 c5 r c5 c5 c5 r c5 d#5 g#4 a#4 c5 r c#5 c#5 c#5 c#5 c#5 c5 c5 r c5 c5 c5 a#4 a#4 c5 a#4 h d#5 r q c5 c5 c5 r c5 c5 c5 r c5 d#5 g#4 a#4 c5 r c#5 c#5 c#5 c#5 c#5 c5 c5 r c5 c5 c5 d#5 d#5 c#5 a#4 h g#4 r")
load music "r.mid",1
loop music 1
do
sync
loop
function make_midi(file as string,instrument as integer,tempo as integer,notes as string)
SPEED=135
notes=" "+notes
for a = 1 to len(notes)
watch$=mid$(notes,a)
if watch$=" "
start=a:test_note$=""
repeat
inc start
new$=mid$(notes,start)
if new$<>" "
test_note$=test_note$+new$
endif
until new$=" " or start=len(notes)
note_on=1
if len(test_note$)=1
select lower$(test_note$)
case "q":SPEED=135:endcase
case "8":speed=134:endcase
case "h":speed=140:endcase
case "r":array insert at bottom master_note():count=array count(master_note())
master_note(count).note=0:master_note(count).speed=SPEED:master_note(count).volume=0
endcase
endselect
note_on=0
else
temp_note$=left$(test_note$,1):temp_octave=val(right$(test_note$,1))
select lower$(temp_note$)
case "c":note_base=0:endcase
case "d":note_base=2:endcase
case "e":note_base=4:endcase
case "f":note_base=5:endcase
case "g":note_base=7:endcase
case "a":note_base=9:endcase
case "b":note_base=11:endcase
endselect
inc note_base,Temp_octave*12
if len(test_note$)=3 then inc note_base
endif
if note_on=1
array insert at bottom master_note()
count=array count(master_note())
master_note(count).note=note_base
master_note(count).speed=SPEED
master_note(count).volume=127
endif
endif
next a
`figure bytes in the track
track_total=20+((array count(master_note())+1)*9)
if file exist("making_bytes.txt")=1 then delete file "making_bytes.txt"
open to write 1,"making_bytes.txt"
write long 1,track_total
close file 1
open to read 1,"making_bytes.txt"
read byte 1,track_bytesD
read byte 1,track_bytesc
read byte 1,track_bytesB
read byte 1,track_bytesA
close file 1
`create the actual midi file
file=file+".mid"
if file exist(file)=1 then delete file file
open to write 1,file
`write the header
write byte 1,77:write byte 1,84:write byte 1,104:write byte 1,100:write byte 1,0:write byte 1,0:write byte 1,0:write byte 1,6
write byte 1,0:write byte 1,0:write byte 1,0:write byte 1,1
`write track header
write byte 1,TEMPO:write byte 1,192 `affects duration
write byte 1,77:write byte 1,84:write byte 1,114:write byte 1,107
`number of bytes in the track
write byte 1,track_bytesa:write byte 1,track_bytesb:write byte 1,track_bytesc:write byte 1,track_bytesd
`instrument and delta set up
write byte 1,0:write byte 1,192:write byte 1,INSTRUMENT `instrument
write byte 1,0:write byte 1,255:write byte 1,89:write byte 1,2:write byte 1,0:write byte 1,0:write byte 1,0:write byte 1,255:write byte 1,81:write byte 1,3:write byte 1,9:write byte 1,39:write byte 1,192:write byte 1,0
`write the notes
`turn the note on
for count = 0 to array count(master_note())
write byte 1,144:write byte 1,master_note(count).note:write byte 1,master_note(count).volume:write byte 1,master_note(count).speed:write byte 1,64
`turn it off
write byte 1,128:write byte 1,master_note(count).note:write byte 1,0:write byte 1,0
next count
`write track end
write byte 1,255,:write byte 1,47,:write byte 1,0,:write byte 1,1
close file 1
endfunction