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


Рекомендуем почитать
Язык PL/SQL

В учебно-методическом пособии рассматриваются основы языка программирования PL/SQL, реализованного в системе управления базами данных Oracle Database Server. Приводятся сведения о поддерживаемых типах данных, структуре программ PL/SQL и выполнении SQL-предложений в них. Отдельно рассмотрено создание хранимых в базах данных Oracle программ PL/SQL – процедур, функций, пакетов и триггеров.


Java 7

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


Системное программное обеспечение. Лабораторный практикум

В книге рассматриваются базисные теоретические основы, необходимые для построения компиляторов, основные технологические приемы и методы их реализации. В ней приведены различные варианты заданий для выполнения лабораторного практикума по курсу «Системное программное обеспечение», а также примеры выполнения этих заданий. В каждом примере подробно рассматриваются все особенности его выполнения, как на этапе подготовки необходимой математической базы, так и на этапе программной реализации. В лабораторных работах автор обращает внимание на основные сложности, связанные с ее выполнением, а также на возможные типичные ошибки и недочеты, дает рекомендации по возможностям программной реализации, отличным от кода, приводимого в примерах.Книга ориентирована на студентов, обучающихся в технических вузах по специальностям, связанным с вычислительной техникой.


Программирование на языке Пролог для искусственного интеллекта

Книга известного специалиста по программированию (Югославия), содержащая основы языка Пролог и его приложения для решения задач искусственного интеллекта. Изложение отличается методическими достоинствами — книга написана в хорошем стиле, живым языком. Книга дополняет имеющуюся на русском языке литературу по языку Пролог.Для программистов разной квалификации, специалистов по искусственному интеллекту, для всех изучающих программирование.


Программирование на Visual C++. Архив рассылки

РАССЫЛКА ЯВЛЯЕТСЯ ЧАСТЬЮ ПРОЕКТА RSDN, НА САЙТЕ КОТОРОГО ВСЕГДА МОЖНО НАЙТИ ВСЮ НЕОБХОДИМУЮ РАЗРАБОТЧИКУ ИНФОРМАЦИЮ, СТАТЬИ, ФОРУМЫ, РЕСУРСЫ, ПОЛНЫЙ АРХИВ ПРЕДЫДУЩИХ ВЫПУСКОВ РАССЫЛКИ И МНОГОЕ ДРУГОЕ.


Язык программирования С# 2005 и платформа .NET 2.0.

В этой книге содержится описание базовых принципов функционирования платформы .NET, системы типов .NET и различных инструментальных средств разработки, используемых при создании приложений .NET. Представлены базовые возможности языка программирования C# 2005, включая новые синтаксические конструкции, появившиеся с выходом .NET 2.0, а также синтаксис и семантика языка CIL. В книге рассматривается формат сборок .NET, библиотеки базовых классов .NET. файловый ввод-вывод, возможности удаленного доступа, конструкция приложений Windows Forms, доступ к базам данных с помощью ADO.NET, создание Web-приложений ASP.NET и Web-служб XML.