program mid2trks; uses SysUtils, MidiDoos; var { File containing the filenames of tracks: } Bron : string; Sporen : string; procedure Some_Help; begin Writeln('MID2TRKS'); Writeln; Writeln('Decompose MidiFile into separate Tracks'); Writeln; writeln('Syntax: [program] [IMF] [composed]'); Writeln; Writeln(' IMF = name of Input MidiFile'); Writeln('composed = name of input file containing filenames of tracks'); Writeln(' default content supplied if NOT present as input'); end; procedure Read_Parameters(var OK : boolean); begin OK := true; if (ParamCount <> 2) then begin Some_Help; OK := false; Exit; end; Bron := ParamStr(1); Sporen := ParamStr(2); if not FileExists(Bron) then begin Writeln(Bron + ': does Not exist'); OK := false; Exit; end; end; procedure verwerken(MF : Midi; var TF : text); { Split MidiFile into separate Tracks } var punt,aantal,many : integer; trk : integer; OK : boolean; TrkText : string; TrkFile : file; begin punt := 14; many := MF.Tracks; MF.set_type01(0); MF.set_Tracks(1); for trk := 0 to many-1 do begin MF.Check_Track_Header(punt,aantal,OK); Readln(TF,TrkText); if TrkText = '' then begin punt := punt + aantal; Continue; end; AssignFile(TrkFile,TrkText); Rewrite(TrkFile, 1); BlockWrite(TrkFile,MF.invoer[0],14); { File Header } BlockWrite(TrkFile,MF.invoer[punt-8],8); { Track Header } BlockWrite(TrkFile,MF.invoer[punt],aantal); { Event Data } Close(TrkFile); if EoF(TF) then Break; punt := punt + aantal; end; end; procedure HoofdRoutine; { Beginning of Main program } var MF : Midi; TracksFile : text; trk : integer; OK : boolean; begin MF := Midi.Create; Read_Parameters(OK); if not OK then Exit; MF.Read_MidiFile(Bron); MF.Check_Structure(OK); if not OK then Exit; if MF.Type01 = 0 then begin Writeln('MidiFile type 0: done.'); Exit; end; if MF.Tracks = 1 then begin Writeln('Only ONE track: done.'); Exit; end; if not FileExists(Sporen) then begin AssignFile(TracksFile,Sporen); Rewrite(TracksFile); for trk := 0 to MF.Tracks-1 do Writeln(TracksFile,'track_',trk,'.mid'); CloseFile(TracksFile); end; AssignFile(TracksFile,Sporen); Reset(TracksFile); verwerken(MF,TracksFile); CloseFile(TracksFile); end; BEGIN HoofdRoutine; END.