Challenge: 
Version: 
Music
Winner?: 
No
Code Snippet: 
type note_thing
   note as integer
   speed as integer
   volume as integer
endtype

dim master_note(-1) as note_thing

make_midi("A",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")
make_midi("B",63,7,"q A4 A4 A4 r A4 A4 A4 r A4 C5 F4 G4 h A4 r q A#4 A#4 A#4 A#4 A#4 A4 A4 A4 A4 G4 G4 A4 h G4 C5")
make_midi("C",99,7,"q b6 b6 f#7 f#7 e7 d7 c#7 b6 a6 b6 c#7 d7 e7 h f#7 q b6 b6 f#7 f#7 e7 d7 c#7 b6 a6 b6 c#7 d7 e7 h f#7 q f#7 g7 e7 f#7 g7 a7 b7 g7 F#7 e7 b6 c#7 d7 h e7 q e7 f#7 g7 f#7 f#7 e7 d7 c#7 h b6")

load music "A.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