OSDN Git Service

訂正状況
[sample-delphi/sample-DELPHI.git] / wav_proj.dpr
1 program wav_proj;
2
3 {$APPTYPE CONSOLE}
4 {$R *.res}
5
6 uses
7   System.SysUtils, System.Classes,
8   wav in 'wav.pas';
9
10 function dump8BitWav(fpIn: TFileStream; sizeOfData: SmallInt): integer;
11 var
12   i: integer;
13   s: Single;
14   c: array [0 .. 1] of Word;
15 begin
16   result := 0;
17   i := 0;
18   s := sizeOfData / SizeOf(c);
19   while i < s do
20   begin
21     try
22       fpIn.ReadBuffer(c, SizeOf(c));
23     except
24       result := -1;
25       break;
26     end;
27     Writeln(c[0], ',', c[1]);
28     inc(i);
29   end;
30 end;
31
32 function dump16BitWav(fpIn: TFileStream; sizeOfData: SmallInt): integer;
33 var
34   i: integer;
35   s: Single;
36   c: array [0 .. 1] of SmallInt;
37 begin
38   result := 0;
39   i := 0;
40   s := sizeOfData / SizeOf(c);
41   while i < s do
42   begin
43     try
44       fpIn.ReadBuffer(c, SizeOf(c));
45     except
46       result := -1;
47       break;
48     end;
49     Writeln(c[0], ',', c[1]);
50     inc(i);
51   end;
52 end;
53
54 function dumpDataSub(fpIn: TFileStream; posOfData, sizeOfData: integer;
55   bytesPerSingleCh: SmallInt): SmallInt;
56 begin
57   fpIn.Seek(posOfData, soFromCurrent);
58   if bytesPerSingleCh = 1 then
59     result := dump8BitWav(fpIn, sizeOfData)
60   else
61     result := dump16BitWav(fpIn, sizeOfData);
62 end;
63
64 function dumpData(inFile: PChar; sampBits, posOfData, sizeOfData: Word)
65   : SmallInt;
66 var
67   bytesPerSingleCh: SmallInt;
68   fpIn: TFileStream;
69 begin
70   result := -1;
71   bytesPerSingleCh := sampBits div 8;
72   if FileExists(inFile) = false then
73   begin
74     Writeln('\83I\81[\83v\83\93\82Å\82«\82Ü\82¹\82ñ.');
75     Exit;
76   end;
77   fpIn := TFileStream.Create(inFile, fmOpenRead);
78   try
79     if dumpDataSub(fpIn, posOfData, sizeOfData, bytesPerSingleCh) <> 0 then
80       Writeln('\83G\83\89\81[\94­\90¶.')
81     else
82       result := 0;
83   finally
84     fpIn.Free;
85   end;
86 end;
87
88 var
89   sampRate, sampBits: SmallInt;
90   posOfData, sizeOfData: Cardinal;
91   i: integer;
92
93 begin
94   try
95     { TODO -oUser -cConsole \83\81\83C\83\93 : \82±\82±\82É\83R\81[\83h\82ð\8bL\8fq\82µ\82Ä\82­\82¾\82³\82¢ }
96     if ParamCount < 1 then
97     begin
98       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,
99         '\97á : dumpWav  in.wav');
100       Exit;
101     end;
102     if ParamStr(1) = '-h' then
103       i:=2
104     else
105       i:=1;
106     wavHdrRead(PChar(ParamStr(i)), sampRate, sampBits, posOfData, sizeOfData);
107     if i = 1 then
108       dumpData(PChar(ParamStr(1)), sampBits, posOfData, sizeOfData);
109     Writeln('\8a®\97¹');
110   except
111     on E: Exception do
112       Writeln(E.ClassName, ': ', E.Message);
113   end;
114
115 end.