OSDN Git Service

仕上げました
[sample-delphi/sample-DELPHI.git] / wav_proj.dpr
index 6753803..a59ce19 100644 (file)
@@ -6,97 +6,47 @@ program wav_proj;
 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);