Советы по Delphi. Версия 1.0.6 - страница 7

стр.

>

> {Записываем tag "fmt_"}

> WriteChunkName('fmt ');

> {Записываем ChunkSize}

> Ki.WAV.fmtSize:= 16;  {должно быть 16-18}

> WriteChunkSize(Ki.WAV.fmtSize);

> {Записываем  formatTag, nChannels}

> WriteChunkWord(Ki.WAV.formatTag);

> WriteChunkWord(Ki.WAV.nChannels);

> {Записываем  nSamplesPerSec}

> WriteChunkSize(Ki.WAV.nSamplesPerSec);

> {Записываем  nAvgBytesPerSec}

> WriteChunkSize(Ki.WAV.nAvgBytesPerSec);

> {Записываем  nBlockAlign, nBitsPerSample}

> WriteChunkWord(Ki.WAV.nBlockAlign);

> WriteChunkWord(Ki.WAV.nBitsPerSample);

> {Записываем метку блока данных "data"}

> WriteChunkName('data');

> {Записываем DataSize}

> WriteChunkSize(Ki.WAV.DataSize);

> N:=0; {первая запись-позиция}

> while N<=Ki.Last do WriteOneDataBlock(Ki,Kj);{помещаем 4 байта и увеличиваем счетчик n}

> {Освобождаем буфер файла}

> CloseFile(OutFile);

>end; {WriteWAVFile}


>procedure InitSpecs;

>begin

>end; { InitSpecs }


>procedure InitSignals(var Kk : Observation);

>var J: Integer;

>begin

> for  J:= 0 to MaxN do Kk.yyy[J]:= 0.0;

> Kk.MinO:= 0.0;

> Kk.MaxO:= 0.0;

> Kk.Last:= MaxN;

>end; {InitSignals}


>procedure InitAllSignals;

>begin

> InitSignals(K0R);

> InitSignals(K0B);

> InitSignals(K1R);

> InitSignals(K1B);

> InitSignals(K2R);

> InitSignals(K2B);

> InitSignals(K3R);

> InitSignals(K3B);

>end; {InitAllSignals}


>var chunkname: string[4];


>procedure ReadChunkName;

>var I : integer;

> MM : Byte;

>begin

> ChunkName[0]:= chr(4);

> for i := 1 to 4 do begin

>  Read(InFile, MM);

>  ChunkName[I]:=chr(MM);

> end;

>end; {ReadChunkName}


>procedure ReadChunkSize;

>var I: integer;

> MM : Byte;

>begin

> ChunkSize.x:= F0;

> ChunkSize.lint := 0;

> for i:= 0 to 3 do begin

>  Read(InFile, MM);

>  ChunkSize.chrs[I]:= MM;

> end;

> ChunkSize.x:= T1;

>end; {ReadChunkSize}


>procedure ReadOneDataBlock(var Ki,Kj:Observation);

>var I: Integer;

>begin

> if n<=maxn then begin

>  ReadChunkSize; {получаем 4 байта данных}

>  ChunkSize.x:=M1;

>  with Ki.WAV do case nChannels of

>  1:

>   if nBitsPerSample=16 then begin {1..2 Помещаем в буфер одноканальный 16-битный сэмпл}

>    Ki.yyy[N]:=1.0*ChunkSize.up;

>    if N

>    N:= N+2;

>   end else begin {1..4 Помещаем в буфер одноканальный 8-битный сэмпл}

>    for I:=0 to 3 do Ki.yyy[N+I]:=1.0*ChunkSize.chrs[I];

>    N := N+4;

>   end;

>  2:

>   if nBitsPerSample=16 then begin {2 Двухканальный 16-битный сэмпл}

>    Ki.yyy[N]:=1.0*ChunkSize.dn;

>    Kj.yyy[N]:=1.0*ChunkSize.up;

>    N:= N+1;

>   end else begin {4 Двухканальный 8-битный сэмпл}

>    Ki.yyy[N]:=1.0*ChunkSize.chrs[1];

>    Ki.yyy[N+1]:=1.0*ChunkSize.chrs[3];

>    Kj.yyy[N]:=1.0*ChunkSize.chrs[0];

>    Kj.yyy[N+1]:=1.0*ChunkSize.chrs[2];

>    N:= N+2;

>   end;

>  end;

>  if N<=MaxN then begin {LastN:= N;}

>   Ki.Last:= N;

>   if Ki.WAV.nChannels=2 then Kj.Last := N;

>  end else begin {lastn    := maxn;}

>   Ki.Last:= MaxN;

>   if Ki.WAV.nChannels=2 then Kj.Last := MaxN;

>  end;

> end;

>end; {ReadOneDataBlock}


>procedure ReadWAVFile(var Ki, K : Observation);

>var MM: Byte;

> I: Integer;

> OK: Boolean;

> NoDataYet: Boolean;

> DataYet: Boolean;

> nDataBytes: LongInt;

>begin

> if FileExists(StandardInput)then with Ki.WAV do begin  { Вызов диалога открытия файла }

>  OK:= True; {если не изменится где-нибудь ниже}

>  {Приготовления для чтения файла данных}

>  AssignFile(InFile, StandardInput); { Файл, выбранный в диалоговом окне }

>  Reset(InFile);

>  {Считываем ChunkName "RIFF"}

>  ReadChunkName;

>  if ChunkName<>'RIFF' then OK:= False;

>   {Считываем ChunkSize}

>   ReadChunkSize;

>   RIFFSize:= ChunkSize.lint; {должно быть 18,678}

>   {Считываем ChunkName "WAVE"}

>   ReadChunkName;

>   if ChunkName<>'WAVE' then OK:= False;

>   {Считываем ChunkName "fmt_"}

>   ReadChunkName;

>   if ChunkName<>'fmt ' then OK:= False;

>   {Считываем ChunkSize}

>   ReadChunkSize;

>   fmtSize:= ChunkSize.lint;  {должно быть 18}

>   {Считываем  formatTag, nChannels}

>   ReadChunkSize;

>   ChunkSize.x:= M1;

>   formatTag:= ChunkSize.up;

>   nChannels:= ChunkSize.dn;

>   {Считываем  nSamplesPerSec}

>   ReadChunkSize;

>   nSamplesPerSec := ChunkSize.lint;

>   {Считываем  nAvgBytesPerSec}

>   ReadChunkSize;

>   nAvgBytesPerSec:= ChunkSize.lint;

>   {Считываем  nBlockAlign}

>   ChunkSize.x:= F0;

>   ChunkSize.lint:= 0;

>   for i:= 0 to 3 do begin

>    Read(InFile, MM);

>    ChunkSize.chrs[I]:= MM;