Система регистрации речи диспетчерских переговоров

Дипломная работа - Компьютеры, программирование

Другие дипломы по предмету Компьютеры, программирование



Offering(Sender: TObject;

OfferingMode: TLineOfferingModes; Rights: TLineCallPrivilege);

begin

TAPIAddress1.InboundCall.Accept;// приложение примет контроль вызова

end;

//если запрос находится в неактивном состоянии

procedure TSysWaves.TAPICall1StateIdle(Sender: TObject;

Rights: TLineCallPrivilege);

begin

TAPICall1.DeallocateCall;

end;

//при состоянии занято

procedure TSysWaves.TAPICall1StateBusy(Sender: TObject;

BusyMode: TLineBusyMode; Rights: TLineCallPrivilege);

begin

TAPIAddress1.OutboundCall.Drop;

end;

//ответ модема

procedure TSysWaves.TAPICall1Reply(Sender: TObject; AsyncFunc: TAsyncFunc;

Error: Cardinal);

begin

if Error <> 0 then errormsg(Ошибка.Модем не может реагировать на запрос.);

if AsyncFunc =afDrop then TAPICall1.DeallocateCall;

end;

{***********************набор номера с клавиатура на экране******************************************}

procedure TSysWaves.SpeedButton1Click(Sender: TObject);

begin

CallNo.Text:=CallNo.Text + 1;

end;

procedure TSysWaves.SpeedButton2Click(Sender: TObject);

begin

CallNo.Text:=CallNo.Text + 2;

end;

procedure TSysWaves.SpeedButton3Click(Sender: TObject);

begin

CallNo.Text:=CallNo.Text + 3;

end;

procedure TSysWaves.SpeedButton4Click(Sender: TObject);

begin

CallNo.Text:=CallNo.Text + 4;

end;

procedure TSysWaves.SpeedButton5Click(Sender: TObject);

begin

CallNo.Text:=CallNo.Text + 5;

end;

procedure TSysWaves.SpeedButton6Click(Sender: TObject);

begin

CallNo.Text:=CallNo.Text + 6;

end;

procedure TSysWaves.SpeedButton7Click(Sender: TObject);

begin

CallNo.Text:=CallNo.Text + 7;

end;

procedure TSysWaves.SpeedButton8Click(Sender: TObject);

begin

CallNo.Text:=CallNo.Text + 8;

end;

procedure TSysWaves.SpeedButton9Click(Sender: TObject);

begin

CallNo.Text:=CallNo.Text + 9;

end;

procedure TSysWaves.SpeedButton10Click(Sender: TObject);

begin

CallNo.Text:=CallNo.Text + 0;

end;

procedure TSysWaves.SpeedButton11Click(Sender: TObject);

begin

CallNo.Text:=CallNo.Text + *;

end;

procedure TSysWaves.SpeedButton12Click(Sender: TObject);

begin

CallNo.Text:=CallNo.Text + #;

end;

{******************Работа со звуком****************************************}

//=========================инициализация===================================

//Размещение формата и заголовков wav, буфера данных, и получение временного имени файла

function TSysWaves.InitWaveRecorder : integer;

var

Temp : array [0..MAX_PATH] of char;

begin

Result := -1;

// размещение в памяти структуры формата wav...

if AllocWaveFormatEx <> 0 then

Exit;

// размещение в памяти заголовка wav...

if AllocWaveHeader <> 0 then begin

Result := -3;

Exit;

end;

// размещение в памяти буфера данных wav

if AllocPCMBuffers <> 0 then begin

Result := -4;

Exit;

end;

//Генирируем имя временного файла

GetTempPath(sizeof(Temp), Temp);

SetLength(FTmpFileName, MAX_PATH);

GetTempFileName(Temp, wr, 0, PChar(FTmpFileName));

Result := 0;

end;

////////////////////////////////////////////////////////////////////////////

//Размещение и захват структуры WAVEFORMATEX, основанной на максимальном размере

//формата согласно ACM.

function TSysWaves.AllocWaveFormatEx : Integer;

var

v:variant;

begin

//если не получен наибольший размер формата, требуемый от установленного ACM...

if acmMetrics(nil, ACM_METRIC_MAX_SIZE_FORMAT, FMaxFmtSize) <> 0 then begin

errormsg(Ошибка получения размера максимального формата сжатия .);

Result := -1;

Exit;

end;

//выделение памяти

GetMem(FWaveFormat, FMaxFmtSize);

//если формат неопределен

if FWaveFormat = nil then begin

errormsg(Ошибка размещения в памяти WaveFormatEx структуры.);

Result := -2;

Exit;

end;

//обнуление структуры FWaveFormat

FillChar(FWaveFormat^, FMaxFmtSize, 0);

//загрузка настроек звукового формата из config.ini

try

ConfigFile:=TIniFile.Create(IncludeTrailingBackslash(ExtractFilePath(Application.ExeName))+config.ini);

FWaveFormat.wFormatTag:=ConfigFile.ReadInteger(WaveFormat,FormatTag,WAVE_FORMAT_PCM);

FWaveFormat.nChannels:=ConfigFile.ReadInteger(WaveFormat,Channels,1);

v:=ConfigFile.ReadInteger(WaveFormat,SamplesPerSec,8000);

FWaveFormat.nSamplesPerSec:=v;

v:=ConfigFile.ReadInteger(WaveFormat,AvgBytesPerSec,8000);

FWaveFormat.nAvgBytesPerSec:=v;

FWaveFormat.nBlockAlign:=ConfigFile.ReadInteger(WaveFormat,BlockAlign,1 );

FWaveFormat.wBitsPerSample:=ConfigFile.ReadInteger(WaveFormat,BitsPerSample,16);

FWaveFormat.cbSize:=ConfigFile.ReadInteger(WaveFormat,Size,0);

ConfigFile.Free;

except

errormsg(Ошибка загрузки конфигурации!);

Application.Terminate;

end;

// сохранить формат и теги строки описания

GetFormatTagDetails(FWaveFormat.wFormatTag);

GetFormatDetails(FWaveFormat);

Result := 0;

end;

////////////////////////////////////////////////////////////////////////////

// Получение подробности формата, и сохранение строкового описания.

function TSysWaves.GetFormatDetails(pfmtin : PWAVEFORMATEX) : integer;

var

acmfmtdetails : TACMFORMATDETAILS;

begin

//обнуление структуру acmfmtdetails

FillChar(acmfmtdetails, sizeof(acmfmtdetails), 0);

acmfmtdetails.cbStruct := sizeof(acmfmtdetails);

acmfmtdetails.pwfx := pfmtin;

acmfmtdetails.dwFormatTag := pfmtin.wFormatTag;

acmfmtdetails.cbwfx := sizeof(TWAVEFORMATEX) + pfmtin.cbSize;

//если запрос о сведении формата <> 0 то FormatDetails функция потерпела неудачу

if acmFormatDetails(nil, acmfmtdetails, ACM_FORMATDETAILSF_FORMAT) <> 0 then begin

errormsg(Ошибка, FormatDetails не работает);

Result := -1;

Exit;

end;

// сохранение строки описания деталей формата...

FFormatDesc := acmfmtdetails.szFormat;

Result := 0;

end;

////////////////////////////////////////////////////////////////////////////

// размещение в памяти заголовка wave

function TSysWaves.AllocWaveHeader : integer;

var

i : Integer;

begin

for i := Low(FWaveHdr) to High(FWaveHdr) do begin

GetMem(FWaveHdr[i], sizeof(TWAVEHDR));//выделяем память под заголовок

//если заголовок не определен

if FWaveHdr[i] = nil then begin

errormsg(Ошибка размещения в памяти заголовка wave.);

Result := -1;

Exit;

end;

end;

Result := 0;

end;

/////////////////////////////////////////////////////////////////////////////

//размещение wave буфера в памяти

function TSysWaves.AllocPCMBuffers : Integer;

var

i : Integer;

begin

for i := Low(FWaveMem) to High(FWaveMem) do begin

GetMem(FWaveMem[i], WAVE_BUFSIZE);//выделяем память под wav буфер

//если w