Читать «Советы по Delphi. Версия 1.0.6» онлайн - страница 9
Валентин Озеров
ChunkSize.up = trunc(Ki.yyy[N]+0.5);
if N<MaxN then ChunkSize.dn := trunc(Ki.yyy[N+1]+0.5);
N:= N+2;
end else begin {1..4 Помещаем в буфер одноканальный 8-битный сэмпл}
for I:=0 to 3 do ChunkSize.chrs[I]:= trunc(Ki.yyy[N+I]+0.5);
N:= N+4;
end;
2:
if nBitsPerSample=16 then begin {2 Двухканальный 16-битный сэмпл}
ChunkSize.dn:= trunc(Ki.yyy[N]+0.5);
ChunkSize.up := trunc(Kj.yyy[N]+0.5);
N:= N+1;
end else begin {4 Двухканальный 8-битный сэмпл}
ChunkSize.chrs[1]:= trunc(Ki.yyy[N]+0.5);
ChunkSize.chrs[3]:= trunc(Ki.yyy[N+1]+0.5);
ChunkSize.chrs[0]:= trunc(Kj.yyy[N]+0.5);
ChunkSize.chrs[2]:= trunc(Kj.yyy[N+1]+0.5);
N:= N+2;
end;
end; {with wav do begin..}
end; {четырехбайтовая переменная "chunksize" теперь заполнена}
ChunkSize.x:=T1;
WriteChunkSize(ChunkSize.lint);{помещаем 4 байта данных}
end; {WriteOneDataBlock}
procedure WriteWAVFile(var Ki, Kj : Observation);
var MM: Byte;
I: Integer;
OK: Boolean;
begin
{Приготовления для записи файла данных}
AssignFile(OutFile, StandardOutput); { Файл, выбранный в диалоговом окне }
ReWrite(OutFile);
With ki.wav do begin
DataSize:= nChannels*(nBitsPerSample div 8)*(Ki.Last+1);
RIFFSize:= DataSize+36;
fmtSize:= 16;
end;
{Записываем ChunkName "RIFF"}
WriteChunkName('RIFF');
{Записываем ChunkSize}
WriteChunkSize(Ki.WAV.RIFFSize);
{Записываем ChunkName "WAVE"}
WriteChunkName('WAVE');
{Записываем 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}