6 System.Classes, System.SysUtils, spWav;
8 function readFmtChank(fp: TFileStream; out waveFmtPcm: tWaveFormatPcm): integer;
9 function wavHdrRead(wavefile: PChar; var sp: SpParam): integer;
13 function readFmtChank(fp: TFileStream; out waveFmtPcm: tWaveFormatPcm): integer;
17 fp.ReadBuffer(waveFmtPcm, SizeOf(tWaveFormatPcm));
18 Writeln('
\83f
\81[
\83^
\8c`
\8e®
\81F', waveFmtPcm.formatTag);
19 Writeln('
\83`
\83\83\83\93\83l
\83\8b\90\94\81F', waveFmtPcm.channels);
20 Writeln('
\83T
\83\93\83v
\83\8a\83\93\83O
\8eü
\94g
\90\94\81F', waveFmtPcm.sampleParSec);
21 Writeln('
\83o
\83C
\83g
\90\94\81@/
\81@
\95b
\81F', waveFmtPcm.bytesPerSec);
22 Writeln('
\83o
\83C
\83g
\90\94 \82w
\83`
\83\83\83\93\83l
\83\8b\90\94\81F', waveFmtPcm.blockAlign);
23 Writeln('
\83r
\83b
\83g
\90\94\81@/
\81@
\83T
\83\93\83v
\83\8b\81F', waveFmtPcm.bitsPerSample);
28 Writeln('
\83X
\83e
\83\8c\83I
\83t
\83@
\83C
\83\8b\82ð
\91Î
\8fÛ
\82Æ
\82µ
\82Ä
\82¢
\82Ü
\82·');
29 Writeln('
\83`
\83\83\83\93\83l
\83\8b\90\94\82Í', channels);
32 if formatTag <> 1 then
34 Writeln('
\96³
\88³
\8fk
\82ÌPCM
\82Ì
\82Ý
\91Î
\8fÛ');
35 Writeln('
\83t
\83H
\81[
\83}
\83b
\83g
\8c`
\8e®
\82Í', formatTag);
38 if (bitsPerSample <> 8) and (bitsPerSample <> 16) then
40 Writeln('8/16
\83r
\83b
\83g
\82Ì
\82Ý
\91Î
\8fÛ');
41 Writeln('bit/sec
\82Í', bitsPerSample);
51 function wavHdrRead(wavefile: PChar; var sp: SpParam): integer;
53 waveFileHeader: SWaveFileHeader;
54 waveFmtPcm: tWaveFormatPcm;
60 fp := TFileStream.Create(wavefile, fmOpenRead);
61 fp.ReadBuffer(waveFileHeader, SizeOf(SWaveFileHeader));
65 Writeln('
\93Ç
\82Ý
\8d\9e\82Ý
\8e¸
\94s');
69 Writeln('
\8aJ
\82¯
\82Ü
\82¹
\82ñ');
74 if CompareStr(waveFileHeader.hdrRiff, STR_RIFF) <> 0 then
76 Writeln('RIFF
\83t
\83H
\81[
\83}
\83b
\83g
\82Å
\82È
\82¢');
81 if CompareStr(waveFileHeader.hdrWave, STR_WAVE) <> 0 then
83 Writeln('"WAVE"
\82ª
\82È
\82¢');
89 len := waveFileHeader.sizeOfFile;
93 fp.ReadBuffer(chank, SizeOf(tChank));
102 if CompareStr(chank.hdrFmtData, STR_fmt) = 0 then
104 len := chank.sizeOfFmtData;
105 Writeln('fmt
\82Ì
\92·
\82³', len, '[bytes]');
107 if readFmtChank(fp, waveFmtPcm) <> 0 then
113 sp.samplePerSec := waveFmtPcm.sampleParSec;
114 sp.bitsPerSample := waveFmtPcm.bitsPerSample;
115 sp.channels := waveFmtPcm.channels;
116 sp.bytesPerSec := waveFmtPcm.bytesPerSec;
117 fp.Seek(fPos + len, soFromBeginning);
119 else if CompareStr(chank.hdrFmtData, STR_data) = 0 then
121 sp.sizeOfData := chank.sizeOfFmtData;
122 Writeln('data
\82Ì
\92·
\82³:', sp.sizeOfData, '[bytes]');
123 sp.posOfData := fp.Position;
124 fp.Seek(fPos + len, soFromBeginning);
129 len := chank.sizeOfFmtData;
130 Writeln(chank.hdrFmtData, '
\82Ì
\92·
\82³[bytes]', len);
132 fp.Seek(len, soFromCurrent);