Система регистрации речи диспетчерских переговоров
Дипломная работа - Компьютеры, программирование
Другие дипломы по предмету Компьютеры, программирование
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