OSDN Git Service

chapter6
[sample-delphi/sample-DELPHI.git] / wav_proj.dpr
1 program wav_proj;
2
3 {$APPTYPE CONSOLE}
4 {$R *.res}
5
6 uses
7   System.SysUtils,
8   System.Classes,
9   wav in 'wav.pas',
10   WriteHeader in 'WriteHeader.pas';
11
12 function cut(fpIn, fpOut: TFileStream; sp: SpParam): integer;
13 begin
14
15 end;
16
17 function checkRange(var sp: SpParam): integer;
18 begin
19   result := 0;
20   if sp.startpos * sp.bytesPerSec > sp.sizeOfData then
21   begin
22     Writeln('\8aJ\8en\88Ê\92u\82ª\83t\83@\83C\83\8b\83T\83C\83Y\82ð\92´\82¦\82Ä\82¢\82Ü\82·');
23     result := -1;
24   end
25   else if (sp.endpos + 1) * sp.bytesPerSec > sp.sizeOfData then
26   begin
27     Writeln('\8fI\97¹\88Ê\92u\82ª\83t\83@\83C\83\8b\83T\83C\83Y\82ð\92´\82¦\82Ä\82¢\82Ü\82·');
28     Writeln('\8fI\97¹\82ð\83t\83@\83C\83\8b\82Ì\8dÅ\8cã\82É\92²\90®\82µ\82Ü\82µ\82½');
29     sp.endpos := (sp.sizeOfData div sp.bytesPerSec) - 1;
30   end;
31 end;
32
33 function wavDataWrite(fpIn, fpOut: TFileStream; sp: SpParam): integer;
34 begin
35   fpIn.Position := sp.posOfData;
36  // fpOut.Position := sp.posOfData;
37   result:=cut(fpIn,fpOut,sp);
38 end;
39
40 function wavWrite(inFile, outFile: PChar; sp: SpParam): integer;
41 var
42   fpIn, fpOut: TFileStream;
43 begin
44   try
45     fpIn := TFileStream.Create(inFile, fmOpenRead);
46     fpOut := TFileStream.Create(outFile, fmCreate);
47     sp.sizeOfData := (sp.endpos - sp.startpos + 1) * sp.bytesPerSec;
48     if waveHeaderWrite(fpOut, sp) > 44 then
49       raise EWriteError.Create('\83w\83b\83_\82ð\8f\91\82«\8d\9e\82ß\82Ü\82¹\82ñ');
50     if wavDataWrite(fpIn, fpOut, sp) = -1 then
51       raise EWriteError.Create('\83G\83\89\81[\94­\90¶');
52   except
53     on EFOpenError do
54       Writeln(inFile, '\82ð\83I\81[\83v\83\93\82Å\82«\82Ü\82¹\82ñ');
55     on EFOpenError do
56       fpIn.Free;
57     else
58
59     begin
60       fpIn.Free;
61       fpOut.Free;
62     end;
63     result := -1;
64     Exit;
65   end;
66   result := 0;
67 end;
68
69 var
70   sp: SpParam;
71
72 begin
73   try
74     { TODO -oUser -cConsole \83\81\83C\83\93 : \82±\82±\82É\83R\81[\83h\82ð\8bL\8fq\82µ\82Ä\82­\82¾\82³\82¢ }
75     sp.startpos := LongInt(ParamStr(3));
76     sp.endpos := LongInt(ParamStr(4));
77     if sp.startpos > sp.endpos then
78     begin
79       Writeln('\8aJ\8en\95b\82Í\8fI\97¹\95b\82ð\92´\82¦\82Ä\82Í\82È\82è\82Ü\82¹\82ñ');
80       Exit;
81     end;
82     if wavHdrRead(PChar(ParamStr(1)), sp) = -1 then
83       Exit;
84     if wavWrite(PChar(ParamStr(1)), PChar(ParamStr(2)), sp) = -1 then
85       Exit;
86     Writeln('\8a®\97¹');
87   except
88     on E: Exception do
89       Writeln(E.ClassName, ': ', E.Message);
90   end;
91
92 end.