Советы по 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)


MFC и OpenGL

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


Как функции, не являющиеся методами, улучшают инкапсуляцию

Когда приходится инкапсулировать, то иногда лучше меньше, чем большеЯ начну со следующего утверждения: Если вы пишете функцию, которая может быть выполнена или как метод класса, или быть внешней по отношению к классу, Вы должны предпочесть ее реализацию без использования метода. Такое решение увеличивает инкапсуляцию класса. Когда Вы думаете об использовании инкапсуляции, Вы должны думать том, чтобы не использовать методы.Удивлены? Читайте дальше.


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

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


Программное обеспечение встроенных систем. Общие требования к разработке и документированию

Embedded system software. General requirements for development and documentationСтандарт подготовлен в развитие ГОСТ Р ИСО/МЭК 12207-99 «Информационная технология. Процессы жизненного цикла программных средств» с целью учета специфики разработки и документирования программного обеспечения встроенных систем реального времени.


Как пасти котов. Наставление для программистов, руководящих другими программистами

«Как пасти котов» – это книга о лидерстве и руководстве, о том, как первое совмещать со вторым. Это, если хотите, словарь трудных случаев управления IT-проектами. Программист подобен кошке, которая гуляет сама по себе. Так уж исторически сложилось. Именно поэтому так непросто быть руководителем команды разработчиков. Даже если вы еще месяц назад были блестящим и дисциплинированным программистом и вдруг оказались в роли менеджера, вряд ли вы знаете, с чего надо начать, какой выбрать стиль руководства, как нанимать и увольнять сотрудников, проводить совещания, добиваться своевременного выполнения задач.