program humanize; uses SysUtils, Algemeen, MidiDoos; var Bron,Doel : string; veel : integer; procedure Some_Help; begin Writeln('HUMANIZE'); Writeln; Writeln('Make small variations in time stamps'); Writeln; Writeln('Syntax: [program] [IMF] [OMF] [HUM]'); Writeln; Writeln('IMF = name of Input MidiFile'); Writeln('OMF = name of Output MidiFile'); Writeln; Writeln('HUM = how 1 < much << 127 humanizing'); end; procedure Read_Parameters(var OK : boolean); var tel : integer; woord : string; begin OK := true; tel := ParamCount; if tel <> 3 then begin Some_Help; OK := false; Exit; end; Bron := ParamStr(1); Doel := ParamStr(2); woord := ParamStr(3); veel := getnum(woord); OK := (1 < veel) and (veel < 128); if not OK then begin Writeln('Nothing to humanize'); Exit; end; if not FileExists(Bron) then begin Writeln(Bron + ': does Not exist'); OK := false; end; end; procedure verwerk(IMF : Midi; var OK : boolean); var punt,aantal,p,trk,tijd : integer; del1,del2,som,erbij,q : integer; begin OK := true; punt := 14; for trk := 0 to IMF.Tracks-1 do begin IMF.Check_Track_Header(punt,aantal,OK); if not OK then Break; p := punt; som := 0; while (p < punt+aantal) do begin q := p; tijd := IMF.Get_Delta_Time(p); del1 := ByteCount(tijd); if tijd = 0 then begin erbij := 0; while erbij = 0 do erbij := Random(veel); IMF.Put_Delta_Time(erbij,q); som := som + erbij; end; if tijd > 0 then begin tijd := tijd - som; if tijd < 0 then begin Writeln('Timestamp negative'); OK := false; Break; end; del2 := ByteCount(tijd); if del2 < del1 then begin IMF.invoer[q] := $80; q := q + 1; end; IMF.Put_Delta_Time(tijd,q); som := 0; end; IMF.Skip_Any_Event(p); end; punt := punt+aantal; end; end; procedure HoofdRoutine; { Beginning of Main program } var IMF : Midi; OK : boolean; begin Read_Parameters(OK); if not OK then Exit; IMF := Midi.Create; IMF.Read_MidiFile(Bron); IMF.Check_Structure(OK); if not OK then Exit; verwerk(IMF,OK); if not OK then Exit; IMF.Write_MidiFile(Doel); end; BEGIN HoofdRoutine; END.