OSDN Git Service

fPosが必要なことに気づく
authoryamat0jp <yamat0jp@yahoo.co.jp>
Fri, 11 May 2018 13:06:53 +0000 (22:06 +0900)
committeryamat0jp <yamat0jp@yahoo.co.jp>
Fri, 11 May 2018 13:06:53 +0000 (22:06 +0900)
wav.pas

diff --git a/wav.pas b/wav.pas
index d5bf375..8042601 100644 (file)
--- a/wav.pas
+++ b/wav.pas
@@ -26,20 +26,20 @@ begin
     if waveFmtPcm.channels <> 2 then
     begin
       Writeln('\83X\83e\83\8c\83I\83t\83@\83C\83\8b\82ð\91Î\8fÛ\82Æ\82µ\82Ä\82¢\82Ü\82·');
-      Writeln('\83`\83\83\83\93\83l\83\8b\90\94\82Í',waveFmtPcm.channels);
-      result:=-1;
+      Writeln('\83`\83\83\83\93\83l\83\8b\90\94\82Í', waveFmtPcm.channels);
+      result := -1;
     end;
     if waveFmtPcm.formatTag <> 1 then
     begin
       Writeln('\96³\88³\8fk\82ÌPCM\82Ì\82Ý\91Î\8fÛ');
-      Writeln('\83t\83H\81[\83}\83b\83g\8c`\8e®\82Í',waveFmtPcm.formatTag);
-      result:=-1;
+      Writeln('\83t\83H\81[\83}\83b\83g\8c`\8e®\82Í', waveFmtPcm.formatTag);
+      result := -1;
     end;
-    if (waveFmtPcm.bitsPerSample <> 8)and(waveFmtPcm.bitsPerSample <> 16) then
+    if (waveFmtPcm.bitsPerSample <> 8) and (waveFmtPcm.bitsPerSample <> 16) then
     begin
       Writeln('8/16\83r\83b\83g\82Ì\82Ý\91Î\8fÛ');
-      Writeln('bit/sec\82Í',waveFmtPcm.bitsPerSample);
-      result:=-1;
+      Writeln('bit/sec\82Í', waveFmtPcm.bitsPerSample);
+      result := -1;
     end;
   except
     on EReadError do
@@ -53,7 +53,7 @@ var
   waveFileHeader: SWaveFileHeader;
   waveFmtPcm: tWaveFormatPcm;
   chank: tChank;
-  len: integer;
+  fPos, len: integer;
   fp: TFileStream;
 begin
   try
@@ -101,6 +101,7 @@ begin
     begin
       len := chank.sizeOfFmtData;
       Writeln('fmt \82Ì\92·\82³', len, '[bytes]');
+      fPos := fp.Position;
       if readFmtChank(fp, waveFmtPcm) <> 0 then
       begin
         result := -1;
@@ -109,19 +110,21 @@ begin
       end;
       sampRate := waveFmtPcm.sampleParSec;
       sampBits := waveFmtPcm.bytesPerSec;
+      fp.Seek(fPos + len, soFromBeginning);
     end
     else if CompareStr(chank.hdrFmtData, STR_data) = 0 then
     begin
       sizeOfData := chank.sizeOfFmtData;
       Writeln('data\82Ì\92·\82³:', sizeOfData, '[bytes]');
       posOfData := fp.Position;
-      fp.Seek(sizeOfData - 4, soCurrent);
+      fp.Seek(fPos + len, soFromBeginning);
       break;
     end
     else
     begin
       len := chank.sizeOfFmtData;
       Writeln(chank.hdrFmtData, '\82Ì\92·\82³[bytes]', len);
+      fPos := fp.Position;
       fp.Seek(len, soFromCurrent);
     end;
   end;