Советы по Delphi. Версия 1.0.6 - [6]

Шрифт
Интервал

>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;

>   end;

>   ChunkSize.x:= M1;

>   nBlockAlign:= ChunkSize.up;

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

>   nBitsPerSample:= ChunkSize.dn;

>   for I:= 17 to fmtSize do Read(InFile,MM);

>   NoDataYet:= True;

>   while NoDataYet do begin

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

>    ReadChunkName;

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

>    ReadChunkSize;

>    DataSize:= ChunkSize.lint;

>    if ChunkName <> 'data' then begin

>     for I:= 1 to DataSize do  {пропуск данных, не относящихся к набору звуковых данных}

>      Read(InFile, MM);

>    end else NoDataYet:= False;

>   end;

>   nDataBytes:= DataSize;

>   {Наконец, начинаем считывать данные для байтов nDataBytes}

>   if nDataBytes>0 then DataYet:= True;

>   N:=0; {чтение с первой позиции}

>   while DataYet do begin

>    ReadOneDataBlock(Ki,Kj); {получаем 4 байта}

>    nDataBytes:= nDataBytes-4;

>    if nDataBytes<=4 then DataYet:= False;

>   end;

>   ScaleData(Ki);

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

>   ScaleData(Kj);

>  end;

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

>  CloseFile(InFile);

> end else begin

>  InitSpecs;{файл не существует}

>  InitSignals(Ki);{обнуляем массив "Ki"}

>  InitSignals(Kj);{обнуляем массив "Kj"}

> end;

>end; { ReadWAVFile}


>{================= Операции с набором данных ====================}

>const MaxNumberOfDataBaseItems = 360;

>type  SignalDirectoryIndex = 0..MaxNumberOfDataBaseItems;


>VAR DataBaseFile: file of Observation;

>LastDataBaseItem: LongInt; {Номер текущего элемента набора данных}

>ItemNameS: array[SignalDirectoryIndex] of String[40];


>procedure GetDatabaseItem(Kk : Observation; N : LongInt);

>begin

> if N

>  Seek(DataBaseFile, N);

>  Read(DataBaseFile, Kk);

> end else InitSignals(Kk);

>end; {GetDatabaseItem}


>procedure PutDatabaseItem(Kk : Observation; N : LongInt);

>begin

> if  N

>  Seek(DataBaseFile, N);

>  Write(DataBaseFile, Kk);

>  LastDataBaseItem:= LastDataBaseItem+1;


Еще от автора Валентин Озеров
Советы по Delphi. Версия 1.4.3 от 1.1.2001

…начиная с 1001. Смотрите другие файлы…


Рекомендуем почитать
Изучаем Java EE 7

Java Enterprise Edition (Java EE) остается одной из ведущих технологий и платформ на основе Java. Данная книга представляет собой логичное пошаговое руководство, в котором подробно описаны многие спецификации и эталонные реализации Java EE 7. Работа с ними продемонстрирована на практических примерах. В этом фундаментальном издании также используется новейшая версия инструмента GlassFish, предназначенного для развертывания и администрирования примеров кода. Книга написана ведущим специалистом по обработке запросов на спецификацию Java EE, членом наблюдательного совета организации Java Community Process (JCP)


Геймдизайн. Рецепты успеха лучших компьютерных игр от Super Mario и Doom до Assassin’s Creed и дальше

Что такое ГЕЙМДИЗАЙН? Это не код, графика или звук. Это не создание персонажей или раскрашивание игрового поля. Геймдизайн – это симулятор мечты, набор правил, благодаря которым игра оживает. Как создать игру, которую полюбят, от которой не смогут оторваться? Знаменитый геймдизайнер Тайнан Сильвестр на примере кейсов из самых популярных игр рассказывает как объединить эмоции и впечатления, игровую механику и мотивацию игроков. Познакомитесь с принципами дизайна, которыми пользуются ведущие студии мира! Создайте игровую механику, вызывающую эмоции и обеспечивающую разнообразие.


Обработка событий в С++

В книге рассказывается история главного героя, который сталкивается с различными проблемами и препятствиями на протяжении всего своего путешествия. По пути он встречает множество второстепенных персонажей, которые играют важные роли в истории. Благодаря опыту главного героя книга исследует такие темы, как любовь, потеря, надежда и стойкость. По мере того, как главный герой преодолевает свои трудности, он усваивает ценные уроки жизни и растет как личность.


MFC и OpenGL

В книге рассказывается история главного героя, который сталкивается с различными проблемами и препятствиями на протяжении всего своего путешествия. По пути он встречает множество второстепенных персонажей, которые играют важные роли в истории. Благодаря опыту главного героя книга исследует такие темы, как любовь, потеря, надежда и стойкость. По мере того, как главный герой преодолевает свои трудности, он усваивает ценные уроки жизни и растет как личность.


Симуляция частичной специализации

В книге рассказывается история главного героя, который сталкивается с различными проблемами и препятствиями на протяжении всего своего путешествия. По пути он встречает множество второстепенных персонажей, которые играют важные роли в истории. Благодаря опыту главного героя книга исследует такие темы, как любовь, потеря, надежда и стойкость. По мере того, как главный герой преодолевает свои трудности, он усваивает ценные уроки жизни и растет как личность.


Питон — модули, пакеты, классы, экземпляры

Python - объектно-ориентированный язык сверхвысокого уровня. Python, в отличии от Java, не требует исключительно объектной ориентированности, но классы в Python так просто изучить и так удобно использовать, что даже новые и неискушенные пользователи быстро переходят на ОО-подход.