9609747 Article/Article

9609747

Command 9609747 Article/Article
Applicable release versions:
Category Article (24)
Description acronym for Musical Instrument Digital Interface. The MIDI specification was developed by a consortium of music industry companies led by roland to standardize the interface for electronic keyboards, synthesizers, controllers, etc. MIDI data is sent and received as asynchronous serial data (just like the twisted pair rs-232 serial send and receive data used to communicate with terminals) transmitted at 38,400 baud. The following program reads midi data and writes it into a file and as such is a definition of the MIDI specification. This Advanced Pick Reference Manual entry and more particularly the program is included because it is concise, performs a useful function and has a high degree of difficultly (programs meeting these criteria are hard to find).
Syntax
Options
Example
echo off
tcl 'esc-data'
tcl 'xcs-on'
tcl 'xonoff (f'
tcl 'set-baud 38400'
file midi.data
tcl 'clear-file midi.data'
id=1 
first.data=1 
tick=''
start=system(12)
loop
  loop in byte while byte=248 do tick=tick+1 repeat
  begin case
    case byte >= 128 ;* st byte
      midi.data=''
      if byte<240 then 
        midi.data(st)=int(byte/16)
        midi.data(ch)=rem(byte,16)+1
      end else 
        midi.data(st)=byte

      end
    case first.data 
      midi.data(dt1)=byte
      first.data=0
      if status=13 or status=14 or status=241 or status=243 then gosub write.it
em
    case 1 ;* second data byte
      midi.data(dt2)=byte
      first.data=1 
      if midi.data(st)<10 then
        if byte=0 then
          read midi.data from midi.data(ch):midi.data(note) 
          midi.data(tickoff)=tick
          midi.data(secsoff)=system(12)-start
          write midi.data on id
          id=id+1
          delete midi.data,midi.data(ch):midi.data(note)
        end else
          midi.data(seconds)=system(12)-start
          midi.data(tick)=tick
          write midi.data on midi.data(ch):midi.data(note) 
        end
      end else gosub write.item

  end case
repeat
write.item:
  midi.data(seconds)=system(12)-start
  midi.data(tick)=tick
  write midi.data on id
  id=id+1
return
Purpose
Related