OSDN Git Service

chapter2
authoryamat0jp <yamat0jp@yahoo.co.jp>
Thu, 10 May 2018 08:35:30 +0000 (17:35 +0900)
committeryamat0jp <yamat0jp@yahoo.co.jp>
Thu, 10 May 2018 08:35:30 +0000 (17:35 +0900)
まだファイルオープンできませんが都合によりCommit

WriteHeader.pas [new file with mode: 0644]
spWav.pas [moved from spWave.pas with 61% similarity]
wav.pas
wav_proj.dpr
wav_proj.dproj
wav_proj.dproj.local
wav_proj.identcache

diff --git a/WriteHeader.pas b/WriteHeader.pas
new file mode 100644 (file)
index 0000000..7ece02e
--- /dev/null
@@ -0,0 +1,39 @@
+unit WriteHeader;
+
+interface
+
+uses System.Classes;
+
+{$INCLUDE spWav}
+function waveHeaderWrite(fp: TFileStream; sizeOfData: integer; ch: SmallInt;
+  sampRate: Cardinal; sampBits: SmallInt): integer;
+
+implementation
+
+function waveHeaderWrite(fp: TFileStream; sizeOfData: integer; ch: SmallInt;
+  sampRate: Cardinal; sampBits: SmallInt): integer;
+var
+  bytes: SmallInt;
+  wrWavHdr: WrSWaveFileHeader;
+  s: tWaveFormatPCM;
+begin
+  wrWavHdr.hdrRiff := STR_RIFF;
+  wrWavHdr.sizeOfFile := sizeOfData + SizeOf(WrSWaveFileHeader) - 4;
+  wrWavHdr.hdrWave := STR_WAVE;
+  wrWavHdr.hdrFmt := STR_fmt;
+  wrWavHdr.sizeOfFmt := SizeOf(tWaveFormatPCM);
+  wrWavHdr.stWaveFormat := s;
+  s.formatTag := 1;
+  s.channels := ch;
+  s.sampleParSec := sampRate;
+  bytes := sampBits div 8;
+  s.bytesPerSec := bytes * ch * sampRate;
+  s.blockAlign := bytes * ch;
+  s.bytesPerSec := sampBits;
+  wrWavHdr.hdrData := STR_data;
+  wrWavHdr.sizeOfData := sizeOfData;
+  fp.WriteBuffer(wrWavHdr, SizeOf(WrSWaveFileHeader));
+  result:=fp.Position;
+end;
+
+end.
similarity index 61%
rename from spWave.pas
rename to spWav.pas
index 52aa723..d78005d 100644 (file)
+++ b/spWav.pas
@@ -20,6 +20,17 @@ type
     bitsPerSample: Word;
   end;
 
+  WrSWaveFileHeader = record
+    hdrRiff: array [0..3] of AnsiChar;
+    sizeOfFile: Cardinal;
+    stWaveFormat: tWaveFormatPCM;
+    hdrWave: array [0..3] of AnsiChar;
+    hdrFmt: array [0..3] of AnsiChar;
+    sizeOfFmt: Cardinal;
+    hdrData: array [0..3] of AnsiChar;
+    sizeOfData: Cardinal;
+  end;
+
 const
   STR_RIFF = 'RIFF';
   STR_WAVE = 'WAVE';
diff --git a/wav.pas b/wav.pas
index 39e0ca0..3759926 100644 (file)
--- a/wav.pas
+++ b/wav.pas
@@ -5,7 +5,8 @@ interface
 uses
   System.Classes, System.SysUtils;
 
-{$INCLUDE spWave}
+{$INCLUDE spWav}
+
 function readFmtChank(fp: TFileStream; waveFmtPcm: tWaveFormatPcm): integer;
 function wavHdrRead(wavefile: PChar; var sampRate, sampBits: SmallInt;
   var posOfData, sizeOfData: Cardinal): integer;
@@ -97,7 +98,7 @@ begin
       sizeOfData := chank.sizeOfFmtData;
       Writeln('data\82Ì\92·\82³:', sizeOfData, '[bytes]');
       posOfData := fp.Position;
-      fp.Seek(sizeOfData - 4, soFromCurrent);
+      fp.Seek(sizeOfData - 4, soCurrent);
       break;
     end
     else
index 14b6d20..462f426 100644 (file)
@@ -4,14 +4,16 @@ program wav_proj;
 {$R *.res}
 
 uses
-  System.SysUtils, System.Classes,
-  wav in 'wav.pas';
+  System.SysUtils,
+  System.Classes,
+  wav in 'wav.pas',
+  WriteHeader in 'WriteHeader.pas';
 
-function dump8BitWav(fpIn: TFileStream; sizeOfData: SmallInt): integer;
+function effect8BitWav(fpIn, fpOut: TFileStream; sizeOfData: SmallInt): integer;
 var
   i: integer;
   s: Single;
-  c: array [0 .. 1] of ShortInt;
+  c: array [0 .. 1] of Word;
 begin
   result := 0;
   i := 0;
@@ -20,16 +22,19 @@ begin
   begin
     try
       fpIn.ReadBuffer(c, SizeOf(c));
+      c[0] := 128;
+      fpOut.WriteBuffer(c, SizeOf(c));
     except
       result := -1;
       break;
     end;
-    Writeln(c[0],',',c[1]);
+    Writeln(c[0], ',', c[1]);
     inc(i);
   end;
 end;
 
-function dump16BitWav(fpIn: TFileStream; sizeOfData: SmallInt): integer;
+function effect16BitWav(fpIn, fpOut: TFileStream; sizeOfData: SmallInt)
+  : integer;
 var
   i: integer;
   s: Single;
@@ -42,49 +47,61 @@ begin
   begin
     try
       fpIn.ReadBuffer(c, SizeOf(c));
+      c[0] := 0;
+      fpOut.WriteBuffer(c, SizeOf(c));
     except
       result := -1;
       break;
     end;
-    Writeln(c[0],',',c[1]);
+    Writeln(c[0], ',', c[1]);
     inc(i);
   end;
 end;
 
-function dumpDataSub(fpIn: TFileStream; posOfData, sizeOfData: integer;
-  bytesPerSingleCh: SmallInt): SmallInt;
+function wavDataWrite(fpIn, fpOut: TFileStream; posOfData, sizeOfData: integer;
+  bytesPerSingleCh: SmallInt): integer;
 begin
   fpIn.Seek(posOfData, soFromCurrent);
   if bytesPerSingleCh = 1 then
-    result := dump8BitWav(fpIn, sizeOfData)
+    result := effect8BitWav(fpIn, fpOut, sizeOfData)
   else
-    result := dump16BitWav(fpIn, sizeOfData);
+    result := effect16BitWav(fpIn, fpOut, sizeOfData);
 end;
 
-function dumpData(inFile: PChar; sampBits, posOfData, sizeOfData: SmallInt)
-  : SmallInt;
+function wavWrite(inFile, outFile: PChar; sampRate: Cardinal; sampBits: Word;
+  posOfData, sizeOfData: integer): integer;
 var
-  bytesPerSingleCh: SmallInt;
-  fpIn: TFileStream;
+  bytesPerSingleCh: Word;
+  fpIn, fpOut: TFileStream;
 begin
-  result := -1;
-  bytesPerSingleCh := sampBits div 8;
-  if FileExists(inFile) = false then
-  begin
-    Writeln('\83I\81[\83v\83\93\82Å\82«\82Ü\82¹\82ñ.');
-    Exit;
-  end;
-  fpIn := TFileStream.Create(inFile, fmOpenRead);
   try
-    if dumpDataSub(fpIn, posOfData, sizeOfData, bytesPerSingleCh) <> 0 then
+    if FileExists(inFile) = true then
+      fpIn := TFileStream.Create(inFile, fmOpenRead)
+    else
     begin
-      Writeln('\83G\83\89\81[\94­\90¶.');
+      result := -1;
+      Writeln(inFile, '\82ð\83I\81[\83v\83\93\82Å\82«\82Ü\82¹\82ñ');
+      Exit;
+    end;
+    fpOut := TFileStream.Create(outFile, fmCreate);
+    bytesPerSingleCh := sampBits div 8;
+    if waveHeaderWrite(fpOut, sizeOfData, bytesPerSingleCh, sampRate, sampBits)
+      = -1 then
+    begin
+      result := -1;
+      Writeln('\83w\83b\83_\82ð\8f\91\82«\8d\9e\82ß\82Ü\82¹\82ñ');
       Exit;
     end;
+    if wavDataWrite(fpIn, fpOut, posOfData, sizeOfData, bytesPerSingleCh) = -1
+    then
+    begin
+      result := -1;
+      Write('\83G\83\89\81[\94­\90¶');
+    end;
   finally
     fpIn.Free;
+    fpOut.Free;
   end;
-  result := 0;
 end;
 
 var
@@ -94,14 +111,9 @@ var
 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¢ }
-    if ParamCount <> 1 then
-    begin
-      Writeln('wav \83t\83@\83C\83\8b\82ð\83_\83\93\83v\82µ\82Ü\82·.'#13#10, '\88ø\90\94\82É <\93ü\97Í\83t\83@\83C\83\8b\96¼> \82ð\8ew\92è\82µ\82Ä\82­\82¾\82³\82¢.'#13#10#13#10,
-        '\97á : dumpWav  in.wav');
-      Exit;
-    end;
     wavHdrRead(PChar(ParamStr(1)), sampRate, sampBits, posOfData, sizeOfData);
-    dumpData(PChar(ParamStr(1)), sampBits, posOfData, sizeOfData);
+    wavWrite(PChar(ParamStr(1)), PChar(ParamStr(2)), sampRate, sampBits,
+      posOfData, sizeOfData);
     Writeln('\8a®\97¹');
   except
     on E: Exception do
index 0508dcc..4f5b9c2 100644 (file)
         <DCC_RemoteDebug>true</DCC_RemoteDebug>
     </PropertyGroup>
     <PropertyGroup Condition="'$(Cfg_1_Win32)'!=''">
+        <Debugger_RunParams>easy.wav effect.wav</Debugger_RunParams>
         <DCC_RemoteDebug>false</DCC_RemoteDebug>
     </PropertyGroup>
     <PropertyGroup Condition="'$(Cfg_1_Win64)'!=''">
             <MainSource>MainSource</MainSource>
         </DelphiCompile>
         <DCCReference Include="wav.pas"/>
+        <DCCReference Include="WriteHeader.pas"/>
         <BuildConfiguration Include="Release">
             <Key>Cfg_2</Key>
             <CfgParent>Base</CfgParent>
index 646bd3d..74aa953 100644 (file)
@@ -4,28 +4,28 @@
     <Transaction>2017/07/29 10:51:42.000.518,=C:\Users\yamat\Documents\Embarcadero\Studio\Projects\Unit1.pas</Transaction>
     <Transaction>2017/09/17 22:32:14.000.990,=C:\Users\yamat\Documents\Embarcadero\Studio\Projects\WebModuleUnit1.pas</Transaction>
     <Transaction>2017/10/14 15:27:41.000.965,=C:\Users\yamat\Documents\Embarcadero\Studio\Projects\FormUnit1.pas</Transaction>
-    <Transaction>2017/10/14 15:27:42.000.078,=C:\Users\yamat\Documents\Embarcadero\Studio\Projects\ServerMethodsUnit1.pas</Transaction>
     <Transaction>2017/10/14 15:27:42.000.160,=C:\Users\yamat\Documents\Embarcadero\Studio\Projects\WebModuleUnit1.pas</Transaction>
+    <Transaction>2017/10/14 15:27:42.000.078,=C:\Users\yamat\Documents\Embarcadero\Studio\Projects\ServerMethodsUnit1.pas</Transaction>
     <Transaction>2017/10/19 20:48:10.000.837,=C:\Users\yamat\Documents\Embarcadero\Studio\Projects\ServerMethodsUnit1.pas</Transaction>
     <Transaction>2017/10/19 20:48:11.000.893,=C:\Users\yamat\Documents\Embarcadero\Studio\Projects\ServerContainerUnit1.pas</Transaction>
     <Transaction>2017/10/19 20:49:15.000.988,=C:\Users\yamat\Documents\Embarcadero\Studio\Projects\Unit1.pas</Transaction>
     <Transaction>2017/10/19 20:49:16.000.125,=C:\Users\yamat\Documents\Embarcadero\Studio\Projects\ServerMethodsUnit1.pas</Transaction>
     <Transaction>2017/10/19 20:49:16.000.218,=C:\Users\yamat\Documents\Embarcadero\Studio\Projects\ServerContainerUnit1.pas</Transaction>
-    <Transaction>2017/10/19 20:49:45.000.816,=C:\Users\yamat\Documents\Embarcadero\Studio\Projects\ServerMethodsUnit1.pas</Transaction>
     <Transaction>2017/10/19 20:49:45.000.913,=C:\Users\yamat\Documents\Embarcadero\Studio\Projects\ServerContainerUnit1.pas</Transaction>
+    <Transaction>2017/10/19 20:49:45.000.816,=C:\Users\yamat\Documents\Embarcadero\Studio\Projects\ServerMethodsUnit1.pas</Transaction>
     <Transaction>2017/10/19 20:50:18.000.999,=C:\Users\yamat\Documents\Embarcadero\Studio\Projects\ServerMethodsUnit1.pas</Transaction>
     <Transaction>2017/10/19 20:50:19.000.049,=C:\Users\yamat\Documents\Embarcadero\Studio\Projects\ServerContainerUnit1.pas</Transaction>
     <Transaction>2017/10/19 21:37:00.000.271,=C:\Users\yamat\Documents\Embarcadero\Studio\Projects\Unit1.pas</Transaction>
-    <Transaction>2017/10/19 21:37:00.000.365,=C:\Users\yamat\Documents\Embarcadero\Studio\Projects\ServerMethodsUnit1.pas</Transaction>
     <Transaction>2017/10/19 21:37:00.000.652,=C:\Users\yamat\Documents\Embarcadero\Studio\Projects\ServerContainerUnit1.pas</Transaction>
+    <Transaction>2017/10/19 21:37:00.000.365,=C:\Users\yamat\Documents\Embarcadero\Studio\Projects\ServerMethodsUnit1.pas</Transaction>
     <Transaction>2017/10/28 22:58:31.000.296,=C:\Users\yamat\Documents\Embarcadero\Studio\Projects\Unit1.pas</Transaction>
     <Transaction>2017/10/29 14:44:00.000.024,=C:\Users\yamat\Documents\Embarcadero\Studio\Projects\Unit1.pas</Transaction>
-    <Transaction>2017/10/29 16:13:37.000.174,=C:\Users\yamat\Documents\Embarcadero\Studio\Projects\ServerMethodsUnit1.pas</Transaction>
     <Transaction>2017/10/29 16:13:37.000.037,=C:\Users\yamat\Documents\Embarcadero\Studio\Projects\Unit1.pas</Transaction>
     <Transaction>2017/10/29 16:13:37.000.809,=C:\Users\yamat\Documents\Embarcadero\Studio\Projects\ServerContainerUnit1.pas</Transaction>
+    <Transaction>2017/10/29 16:13:37.000.174,=C:\Users\yamat\Documents\Embarcadero\Studio\Projects\ServerMethodsUnit1.pas</Transaction>
     <Transaction>2017/10/29 16:55:16.000.244,=C:\Users\yamat\Documents\Embarcadero\Studio\Projects\ServerMethodsUnit1.pas</Transaction>
-    <Transaction>2017/10/29 16:55:16.000.109,=C:\Users\yamat\Documents\Embarcadero\Studio\Projects\Unit1.pas</Transaction>
     <Transaction>2017/10/29 16:55:16.000.343,=C:\Users\yamat\Documents\Embarcadero\Studio\Projects\ServerContainerUnit1.pas</Transaction>
+    <Transaction>2017/10/29 16:55:16.000.109,=C:\Users\yamat\Documents\Embarcadero\Studio\Projects\Unit1.pas</Transaction>
     <Transaction>2017/10/30 15:04:38.000.106,=C:\Users\yamat\Documents\Embarcadero\Studio\Projects\WebModuleUnit1.pas</Transaction>
     <Transaction>2017/11/01 16:00:52.000.956,=C:\Users\yamat\Documents\Embarcadero\Studio\Projects\ServerMethodsUnit1.pas</Transaction>
     <Transaction>2017/11/01 16:00:53.000.058,=C:\Users\yamat\Documents\Embarcadero\Studio\Projects\ServerContainerUnit1.pas</Transaction>
     <Transaction>2017/11/01 18:21:25.000.947,=C:\Users\yamat\Documents\Embarcadero\Studio\Projects\ServerMethodsUnit1.pas</Transaction>
     <Transaction>2017/11/01 18:21:26.000.254,=C:\Users\yamat\Documents\Embarcadero\Studio\Projects\WebModuleUnit1.pas</Transaction>
     <Transaction>2017/11/01 18:23:22.000.440,=C:\Users\yamat\Documents\Embarcadero\Studio\Projects\WebModuleUnit1.pas</Transaction>
-    <Transaction>2017/11/01 18:23:22.000.344,=C:\Users\yamat\Documents\Embarcadero\Studio\Projects\ServerMethodsUnit1.pas</Transaction>
     <Transaction>2017/11/01 18:23:22.000.193,=C:\Users\yamat\Documents\Embarcadero\Studio\Projects\FormUnit1.pas</Transaction>
-    <Transaction>2017/11/01 18:33:21.000.032,=C:\Users\yamat\Documents\Embarcadero\Studio\Projects\ServerMethodsUnit1.pas</Transaction>
+    <Transaction>2017/11/01 18:23:22.000.344,=C:\Users\yamat\Documents\Embarcadero\Studio\Projects\ServerMethodsUnit1.pas</Transaction>
     <Transaction>2017/11/01 18:33:21.000.133,=C:\Users\yamat\Documents\Embarcadero\Studio\Projects\ServerContainerUnit1.pas</Transaction>
+    <Transaction>2017/11/01 18:33:21.000.032,=C:\Users\yamat\Documents\Embarcadero\Studio\Projects\ServerMethodsUnit1.pas</Transaction>
     <Transaction>2017/11/01 18:33:39.000.795,=C:\Users\yamat\Documents\Embarcadero\Studio\Projects\WebModuleUnit1.pas</Transaction>
     <Transaction>2017/11/01 19:08:03.000.193,=C:\Users\yamat\Documents\Embarcadero\Studio\Projects\WebModuleUnit1.pas</Transaction>
     <Transaction>2017/11/30 19:11:41.000.772,=C:\Users\yamat\Documents\Embarcadero\Studio\Projects\Unit1.pas</Transaction>
@@ -49,5 +49,7 @@
     <Transaction>2018/05/07 18:01:39.000.274,C:\Users\yamat\Documents\Embarcadero\Studio\Projects\Project1.dproj=C:\Users\yamat\Documents\Embarcadero\Studio\Projects\myapp\wav\wav_proj.dproj</Transaction>
     <Transaction>2018/05/07 21:20:21.000.796,=C:\Users\yamat\Documents\Embarcadero\Studio\Projects\myapp\wav\Unit1.pas</Transaction>
     <Transaction>2018/05/07 21:20:27.000.646,C:\Users\yamat\Documents\Embarcadero\Studio\Projects\myapp\wav\spWave.pas=C:\Users\yamat\Documents\Embarcadero\Studio\Projects\myapp\wav\Unit1.pas</Transaction>
+    <Transaction>2018/05/09 21:56:39.000.226,=C:\Users\yamat\Documents\Embarcadero\Studio\Projects\myapp\wav\Unit1.pas</Transaction>
+    <Transaction>2018/05/09 21:56:54.000.027,C:\Users\yamat\Documents\Embarcadero\Studio\Projects\myapp\wav\WriteHeader.pas=C:\Users\yamat\Documents\Embarcadero\Studio\Projects\myapp\wav\Unit1.pas</Transaction>
   </Transactions>
 </BorlandProject>
index 4f3b88a..1545e8d 100644 (file)
Binary files a/wav_proj.identcache and b/wav_proj.identcache differ