10 WriteHeader in 'WriteHeader.pas',
13 function cut(fpIn, fpOut: TFileStream; sp: SpParam): integer;
15 Buffer: array of ShortInt;
19 size := (sp.endpos - sp.startpos + 1) * sp.channels * sp.samplePerSec *
20 sp.bitsPerSample div 8;
21 SetLength(Buffer, size);
23 fpIn.ReadBuffer(Pointer(Buffer)^, size);
24 fpOut.WriteBuffer(Pointer(Buffer)^, size);
31 function checkRange(var sp: SpParam): integer;
34 if sp.startpos * sp.bytesPerSec > sp.sizeOfData then
36 Writeln('
\8aJ
\8en
\88Ê
\92u
\82ª
\83t
\83@
\83C
\83\8b\83T
\83C
\83Y
\82ð
\92´
\82¦
\82Ä
\82¢
\82Ü
\82·');
39 else if (sp.endpos + 1) * sp.bytesPerSec > sp.sizeOfData then
41 Writeln('
\8fI
\97¹
\88Ê
\92u
\82ª
\83t
\83@
\83C
\83\8b\83T
\83C
\83Y
\82ð
\92´
\82¦
\82Ä
\82¢
\82Ü
\82·');
42 Writeln('
\8fI
\97¹
\82ð
\83t
\83@
\83C
\83\8b\82Ì
\8dÅ
\8cã
\82É
\92²
\90®
\82µ
\82Ü
\82µ
\82½');
43 sp.endpos := (sp.sizeOfData div sp.bytesPerSec) - 1;
47 function wavDataWrite(fpIn, fpOut: TFileStream; const sp: SpParam): integer;
49 fpIn.Position := sp.posOfData;
50 result := cut(fpIn, fpOut, sp);
53 function wavWrite(inFile, outFile: PChar; var sp: SpParam): integer;
55 fpIn, fpOut: TFileStream;
58 fpIn := TFileStream.Create(inFile, fmOpenRead);
59 fpOut := TFileStream.Create(outFile, fmCreate);
60 sp.sizeOfData := (sp.endpos - sp.startpos + 1) * sp.bytesPerSec;
61 if waveHeaderWrite(fpOut, sp) > 44 then
62 raise EWriteError.Create('
\83w
\83b
\83_
\82ð
\8f\91\82«
\8d\9e\82ß
\82Ü
\82¹
\82ñ');
63 if wavDataWrite(fpIn, fpOut, sp) = -1 then
64 raise EWriteError.Create('
\83G
\83\89\81[
\94
\90¶');
67 Writeln(inFile, '
\82ð
\83I
\81[
\83v
\83\93\82Å
\82«
\82Ü
\82¹
\82ñ');
87 { TODO -oUser -cConsole
\83\81\83C
\83\93 :
\82±
\82±
\82É
\83R
\81[
\83h
\82ð
\8bL
\8fq
\82µ
\82Ä
\82
\82¾
\82³
\82¢ }
88 sp.startpos := StrToInt(ParamStr(3));
89 sp.endpos := StrToInt(ParamStr(4));
90 if sp.startpos > sp.endpos then
92 Writeln('
\8aJ
\8en
\95b
\82Í
\8fI
\97¹
\95b
\82ð
\92´
\82¦
\82Ä
\82Í
\82È
\82è
\82Ü
\82¹
\82ñ');
95 if wavHdrRead(PChar(ParamStr(1)), sp) = -1 then
97 if wavWrite(PChar(ParamStr(1)), PChar(ParamStr(2)), sp) = -1 then
102 Writeln(E.ClassName, ': ', E.Message);