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

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

> Last       : SampleIndex; {Последний доступный индекс yyy}

> MinO, MaxO : Real;        {Диапазон значений yyy}

>end;


>var K0R, K1R, K2R, K3R: Observation;

> K0B, K1B, K2B, K3B : Observation;


>{================== Переменные имени файла ===================}

>var StandardDatabase: String[80];

> BaseFileName: String[80];

> StandardOutput: String[80];

> StandardInput: String[80];


>{=============== Объявления процедур ==================}

>procedure ReadWAVFile(var Ki, Kj : Observation);

>procedure WriteWAVFile(var Ki, Kj : Observation);

>procedure ScaleData(var Kk: Observation);

>procedure InitallSignals;

>procedure InitLinearSystem;


>implementation

>{$R *.DFM}


>uses VarGraph, SysUtils;

>{================== Стандартный формат WAV-файла ===================}

>const MaxDataSize : LongInt = (MaxN+1)*2*2;

>const MaxRIFFSize : LongInt = (MaxN+1)*2*2+36;

>const StandardWAV : WAVHeader = (

> nChannels       : Word(2);

> nBitsPerSample  : LongInt(16);

> nSamplesPerSec  : LongInt(8000);

> nAvgBytesPerSec : LongInt(32000);

> RIFFSize        : LongInt((MaxN+1)*2*2+36);

> fmtSize         : LongInt(16);

> formatTag       : Word(1);

> nBlockAlign     : LongInt(4);

> DataSize        : LongInt((MaxN+1)*2*2)

>);


>{================== Сканирование переменных сопровождения ===================}

>procedure ScaleData(var Kk : Observation);

>var I : SampleIndex;

>begin

> {Инициализация переменных сканирования}

> Kk.MaxO:= Kk.yyy[0];

> Kk.MinO:= Kk.yyy[0];

> {Сканирование для получения максимального и минимального значения}

> for I:= 1 to Kk.Last do begin

>  if kk.maxo < kk.yyy[i] then kk.maxo:= kk.yyy[i];

>  if kk.mino > kk.yyy[i] then kk.mino:= kk.yyy[i];

> end;

>end; { scaledata }


>procedure ScaleAllData;

>begin

> ScaleData(K0R);

> ScaleData(K0B);

> ScaleData(K1R);

> ScaleData(K1B);

> ScaleData(K2R);

> ScaleData(K2B);

> ScaleData(K3R);

> ScaleData(K3B);

>end; {scalealldata}


>{================== Считывание/запись WAV-данных ===================}

>VAR InFile, OutFile: file of Byte;

>type Tag = (F0, T1, M1);

>type FudgeNum = record

> case X:Tag of

> F0 : (chrs : array[0..3] of byte);

> T1 : (lint : LongInt);

> M1 : (up,dn: Integer);

>end;


>var ChunkSize  : FudgeNum;


>procedure WriteChunkName(Name: String);

>var i: Integer;

> MM: Byte;

>begin

> for i:= 1 to 4 do begin

>  MM:= ord(Name[i]);

>  write(OutFile, MM);

> end;

>end; {WriteChunkName}


>procedure WriteChunkSize(LL:Longint);

>var I: integer;

>begin

> ChunkSize.x:=T1;

> ChunkSize.lint:=LL;

> ChunkSize.x:=F0;

> for I:= 0 to 3 do Write(OutFile,ChunkSize.chrs[I]);

>end;


>procedure WriteChunkWord(WW: Word);

>var I: integer;

>begin

> ChunkSize.x:=T1;

> ChunkSize.up:=WW;

> ChunkSize.x:=M1;

> for I:= 0 to 1 do Write(OutFile,ChunkSize.chrs[I]);

>end; {WriteChunkWord}


>procedure WriteOneDataBlock(var Ki, Kj : Observation);

>var I: Integer

>begin

> ChunkSize.x:=M1;

> with Ki.WAV do begin

>  case nChannels of

>  1:

>   if nBitsPerSample=16 then begin {1..2 Помещаем в буфер одноканальный 16-битный сэмпл}

>    ChunkSize.up = trunc(Ki.yyy[N]+0.5);

>    if N

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


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

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


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

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


Пишем драйвер Windows на ассемблере

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


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

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


Вариации на тему STL. Адаптер обобщенного указателя на функцию-член класса

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


Информационная технология. Руководство по управлению документированием программного обеспечения

ГОСУДАРСТВЕННЫЙ СТАНДАРТ РОССИЙСКОЙ ФЕДЕРАЦИИИнформационная технологияРУКОВОДСТВО ПО УПРАВЛЕНИЮ ДОКУМЕНТИРОВАНИЕМ ПРОГРАММНОГО ОБЕСПЕЧЕНИЯInformation technology. Guidelines for the management of software documentationИздание официальноеДата введения 1994-07-01ГОССТАНДАРТ РОССИИ Москва© Издательство стандартов, 1994.


Самоучитель UML

Самоучитель UMLПервое издание.В книге рассматриваются основы UML – унифицированного языка моделирования для описания, визуализации и документирования объектно-ориентированных систем и бизнес-процессов в ходе разработки программных приложений. Подробно описываются базовые понятия UML, необходимые для построения объектно-ориентированной модели системы с использованием графической нотации. Изложение сопровождается примерами разработки отдельных диаграмм, которые необходимы для представления информационной модели системы.