Советы по 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. Смотрите другие файлы…


Рекомендуем почитать
Pro Git

Разработчику часто требуется много сторонних инструментов, чтобы создавать и поддерживать проект. Система Git — один из таких инструментов и используется для контроля промежуточных версий вашего приложения, позволяя вам исправлять ошибки, откатывать к старой версии, разрабатывать проект в команде и сливать его потом. В книге вы узнаете об основах работы с Git: установка, ключевые команды, gitHub и многое другое.В книге рассматриваются следующие темы:основы Git;ветвление в Git;Git на сервере;распределённый Git;GitHub;инструменты Git;настройка Git;Git и другие системы контроля версий.


Java 7

Рассмотрено все необходимое для разработки, компиляции, отладки и запуска приложений Java. Изложены практические приемы использования как традиционных, так и новейших конструкций объектно-ориентированного языка Java, графической библиотеки классов Swing, расширенной библиотеки Java 2D, работа со звуком, печать, способы русификации программ. Приведено полное описание нововведений Java SE 7: двоичная запись чисел, строковые варианты разветвлений, "ромбовидный оператор", NIO2, новые средства многопоточности и др.


MFC и OpenGL

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


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

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


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

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


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

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