program mid2ctn; uses SysUtils, Algemeen, MidiDoos, MidiText; var Bron,Doel : string; OTF : textfile; procedure Some_Help; begin Writeln('MID2CTN'); Writeln; Writeln('Converts MidiFile to TextFile'); Writeln('Cumulative Times, Cumulative Notes (chords)'); Writeln; writeln('Syntax: [program] [IMF] [OTF]'); Writeln; Writeln('IMF = name of input MidiFile'); Writeln('OTF = name of output TextFile'); end; procedure Read_Parameters(var OK : boolean); var tel : byte; begin OK := true; tel := ParamCount; if (tel < 2) or (tel > 2) then begin Some_Help; OK := false; Exit; end; Bron := ParamStr(1); Doel := ParamStr(2); if not FileExists(Bron) then begin Writeln(Bron + ': does Not exist'); OK := false; Exit; end; AssignFile(OTF, Doel); Rewrite(OTF); end; procedure CT_CN(MF : Midi; var reeds : integer; aantal : integer); var p,t,tijd : integer; riedel : bytes; uit : string; noot : boolean; ch : integer; noten : verzameling; begin p := reeds; tijd := 0; Schoonmaken(noten); while p < reeds+aantal do begin t := MF.Get_Delta_Time(p); tijd := tijd + t; if t > 0 then begin for ch := 0 to 15 do begin uit := Polyfoon(ch,noten); if Length(uit) = 0 then Continue; Writeln(OTF,uit); end; end; MF.Data_Any_Event(p,riedel); noot := ((riedel[0] shr 4) = $8) or ((riedel[0] shr 4) = $9); uit := Any_Event(riedel); if noot then Cumulatief(riedel[0],riedel[1],riedel[2],noten); Write(OTF,tijd,' '); Writeln(OTF,uit); end; reeds := p; end; procedure HoofdRoutine; { Beginning of Main program } var MF : Midi; trk : integer; OK : boolean; punt,aantal : integer; begin Read_Parameters(OK); if not OK then Exit; MF := Midi.Create; MF.Read_MidiFile(Bron); MF.Check_Structure(OK); if not OK then Exit; Writeln(OTF,'File ',MF.Type01,' (',MF.Tracks,') ',MF.Ticks); Writeln(OTF,'* MID2CTN'); { Loop through all tracks: } punt := 14; for trk := 1 to MF.tracks do begin MF.Check_Track_Header(punt,aantal,OK); Writeln(OTF,'Track # ',trk - 1); CT_CN(MF,punt,aantal); end; Close(OTF); end; BEGIN HoofdRoutine; END.