uses
System.SysUtils,
System.Classes,
+ MMSystem,
+ spWav in 'spWav.pas',
wav in 'wav.pas',
- WriteHeader in 'WriteHeader.pas',
- spWav in 'spWav.pas';
+ selectFile in 'selectFile.pas',
+ effect in 'effect.pas';
-function cut(fpIn, fpOut: TFileStream; sp: SpParam): integer;
var
- Buffer: array of ShortInt;
- size: integer;
-begin
- result := 0;
- size := (sp.endpos - sp.startpos + 1) * sp.channels * sp.samplePerSec *
- sp.bitsPerSample div 8;
- SetLength(Buffer, size);
- try
- fpIn.ReadBuffer(Pointer(Buffer)^, size);
- fpOut.WriteBuffer(Pointer(Buffer)^, size);
- Finalize(Buffer);
- except
- result := -1;
- end;
-end;
-
-function checkRange(var sp: SpParam): integer;
-begin
- result := 0;
- if sp.startpos * sp.bytesPerSec > sp.sizeOfData then
- begin
- Writeln('\8aJ\8en\88Ê\92u\82ª\83t\83@\83C\83\8b\83T\83C\83Y\82ð\92´\82¦\82Ä\82¢\82Ü\82·');
- result := -1;
- end
- else if (sp.endpos + 1) * sp.bytesPerSec > sp.sizeOfData then
- begin
- Writeln('\8fI\97¹\88Ê\92u\82ª\83t\83@\83C\83\8b\83T\83C\83Y\82ð\92´\82¦\82Ä\82¢\82Ü\82·');
- Writeln('\8fI\97¹\82ð\83t\83@\83C\83\8b\82Ì\8dÅ\8cã\82É\92²\90®\82µ\82Ü\82µ\82½');
- sp.endpos := (sp.sizeOfData div sp.bytesPerSec) - 1;
- end;
-end;
-
-function wavDataWrite(fpIn, fpOut: TFileStream; const sp: SpParam): integer;
-begin
- fpIn.Position := sp.posOfData;
- result := cut(fpIn, fpOut, sp);
-end;
+ sp: SpParam;
+ pMem: TMemoryStream;
+ fileName: string;
-function wavWrite(inFile, outFile: PChar; var sp: SpParam): integer;
+function getPara(var sp: SpParam): integer;
var
- fpIn, fpOut: TFileStream;
+ i: integer;
begin
- try
- fpIn := TFileStream.Create(inFile, fmOpenRead);
- fpOut := TFileStream.Create(outFile, fmCreate);
- sp.sizeOfData := (sp.endpos - sp.startpos + 1) * sp.bytesPerSec;
- if waveHeaderWrite(fpOut, sp) > 44 then
- raise EWriteError.Create('\83w\83b\83_\82ð\8f\91\82«\8d\9e\82ß\82Ü\82¹\82ñ');
- if wavDataWrite(fpIn, fpOut, sp) = -1 then
- raise EWriteError.Create('\83G\83\89\81[\94\90¶');
- except
- on EFOpenError do
- Writeln(inFile, '\82ð\83I\81[\83v\83\93\82Å\82«\82Ü\82¹\82ñ');
- on EFOpenError do
- fpIn.Free;
- else
-
- begin
- fpIn.Free;
- fpOut.Free;
- end;
- result := -1;
- Exit;
- end;
- result := 0;
+ sp.pWav:=pMem.Memory;
+ sp.cyclicSec:=i;
+ result:=0;
end;
-var
- sp: SpParam;
-
begin
try
{ TODO -oUser -cConsole \83\81\83C\83\93 : \82±\82±\82É\83R\81[\83h\82ð\8bL\8fq\82µ\82Ä\82\82¾\82³\82¢ }
- sp.startpos := StrToInt(ParamStr(3));
- sp.endpos := StrToInt(ParamStr(4));
- if sp.startpos > sp.endpos then
- begin
- Writeln('\8aJ\8en\95b\82Í\8fI\97¹\95b\82ð\92´\82¦\82Ä\82Í\82È\82è\82Ü\82¹\82ñ');
+ fileName := ExtractFileName(ParamStr(1));
+ if wavHdrRead(PChar(ParamStr(1)), sp) < 0 then
Exit;
- end;
- if wavHdrRead(PChar(ParamStr(1)), sp) = -1 then
+ if readWav(ParamStr(1), pMem) = false then
Exit;
- if wavWrite(PChar(ParamStr(1)), PChar(ParamStr(2)), sp) = -1 then
+ if getPara(sp) = -1 then
+ begin
+ pMem.Free;
Exit;
- Writeln('\8a®\97¹');
+ end;
+ if effectWav(sp) = 0 then
+ begin
+ PlaySound(pMem.Memory, 0, SND_ASYNC or SND_NODEFAULT or SND_MEMORY);
+ Readln;
+ PlaySound(nil, 0, SND_PURGE);
+ end;
+ pMem.Free;
+ Finalize(sp.pWav^);
except
on E: Exception do
Writeln(E.ClassName, ': ', E.Message);