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

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

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



wave буфера.);

Result := -1;

Exit;

end;

// переключите для следующего буфера...

FBufIndex := 1 - FBufIndex;

end;

Result := 0;

end;

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

// Читайте кусок wav из временного файла

function TSysWaves.ReadWaveBuffer : Integer;

begin

// если мы не столкнулись с концом wav , читайте другой буфер

if FByteDataSize < FTotalWaveSize then begin

// читайте кусок wav из временного файла

FWaveHdr[FBufIndex].dwBufferLength :=

_lread(FTmpFileHandle, FWaveMem[FBufIndex], FWaveBufSize);

// модифицируйте общее количество байтов чтения

Inc(FByteDataSize, FWaveHdr[FBufIndex].dwBufferLength);

Result := 0;

Exit;

end;

FMoreToPlay := FALSE;// обработанный в MM_WOM_DONE сообщении

Result := 1;

end;

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

//стоп проигывание wav файла

procedure TSysWaves.StopWavePlay;

begin

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

if not FDeviceOpened then Exit;

// стоп игра

waveOutReset(FWaveOut);

// стоп таймер

Timer1.Enabled := FALSE;

FRecorderMode := recModeOff;

FMoreToPlay := FALSE;

// закройте устройство и освободите память заголовков

CloseWaveDevicePlay;

end;

//====================работа с сообщениями wave=================================

//вызывается если устройство завершило передачу данных в блок памяти, установленный

//процедурой waveInAddBuffer;

procedure TSysWaves.MMWimData(var msg: TMessage);

var

pwavehdrtmp : PWAVEHDR;

begin

// Сделанный буфер регистрации, выпишите это

pwavehdrtmp := PWAVEHDR(msg.lparam);

0thenStopWaveRecord;"> if WriteWaveBuffer(pwavehdrtmp.dwBytesRecorded) <> 0 then StopWaveRecord;

if FRecorderMode <> recModeOff then AddNextBuffer //буфер в очередь

else

CloseWaveDeviceRecord;// стоп запись

end;

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

//Сделать проигрывание очередного волнового буфера, если проигран предыдущий.

procedure TSysWaves.MMWomDone(var msg: TMessage);

begin

if FMoreToPlay then QueueNextBuffer

else

StopWavePlay;

end;

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

// посылается, когда устройство закрывается функцией waveOutClose;

procedure TSysWaves.MMWomClose(var msg: TMessage);

begin

FDeviceOpened := FALSE;

end;

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

// Запись записаных даных в временый файл

function TSysWaves.WriteWaveBuffer(size : UINT) : integer;

begin

Result := 0;

if size = 0 then Exit;

if _lwrite(FTmpFileHandle, FWaveMem[FBufIndex], size) <> size then begin

errormsg(Ошибка записи данных во временный файл.);

Result := -1;

Exit;

end;

Inc(FByteDataSize, size);

end;

{************************Other*******************************************************}

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

//вызывает окно выбора кодека

procedure TSysWaves.GetFormatClick(Sender: TObject);

begin

GetWaveFormat; //функция вызывающая визуальный выбор кодека

GetFormatTag.Caption := FFormatTag; //формат

GetFormatDesc.Caption := FFormatDesc; //его характеристики

SaveConf.Enabled:=true;

end;

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

//останавливает проигрывание записи и устанавливает запись на начало

procedure TSysWaves.StopClick(Sender: TObject);

begin

StopWavePlay;

end;

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

//при изменениях настроек конфигурации разблокировать кнопку сохранения

procedure TSysWaves.RadioButton1Click(Sender: TObject);

begin

SaveConf.Enabled:=true;

end;

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

// выводит сообщение Msg на DisplayMemo

procedure TSysWaves.Display(Msg : String);

var

i:Integer;

begin

100thenbegin//>100"> if DisplayMemo.Lines.Count > 100 then begin //если число линий >100 то

//удаляются 50 первых линий

for I := 1 to 50 do DisplayMemo.Lines.Delete(0);

end;

DisplayMemo.Lines.Add(Msg); //DisplayMemo выводит Msg

end;

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

//Выводит сообщение об ошибках.

procedure TSysWaves.errormsg(msg : String);

begin

Application.MessageBox(PChar(msg), Error, MB_OK);

end;

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

//сохранение настроек

procedure TSysWaves.SaveConfClick(Sender: TObject);

var

v:variant;

begin

try

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

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

ConfigFile.WriteInteger(WaveFormat,FormatTag,FWaveFormat.wFormatTag);

ConfigFile.WriteInteger(WaveFormat,Channels,FWaveFormat.nChannels);

v:=FWaveFormat.nSamplesPerSec;

ConfigFile.WriteInteger(WaveFormat,SamplesPerSec,v);

v:=FWaveFormat.nAvgBytesPerSec;

ConfigFile.WriteInteger(WaveFormat,AvgBytesPerSec,v);

ConfigFile.WriteInteger(WaveFormat,BlockAlign,FWaveFormat.nBlockAlign );

ConfigFile.WriteInteger(WaveFormat,BitsPerSample,FWaveFormat.wBitsPerSample);

ConfigFile.WriteInteger(WaveFormat,Size,FWaveFormat.cbSize);

//сохранение параметров работы с модемом

if RadioButton1.Checked then ConfigFile.WriteBool(DeviceMode,AutoAnswer,true)

else ConfigFile.WriteBool(DeviceMode,AutoAnswer,false);

if CheckBox1.Checked then ConfigFile.WriteBool(DeviceMode,Pulse,true)

else ConfigFile.WriteBool(DeviceMode,Pulse,false);

ConfigFile.WriteInteger(DeviceMode,NumRings,StrToInt(MaskEdit1.Text));

ConfigFile.WriteInteger(DeviceMode,TimeReg,StrToInt(MaskEdit2.Text));

//настройки телефонной гарнитуры

ConfigFile.WriteInteger(VolGain,HeadSetVolume,HeadSetVolume.Position);

ConfigFile.WriteInteger(VolGain,HeadSetGain,HeadSetGain.Position);

ConfigFile.WriteInteger(VolGain,HandSetVolume,HandSetVolume.Position);

ConfigFile.WriteInteger(VolGain,HandSetGain,HandSetGain.Position);

ConfigFile.Free;

SaveConf.Enabled:=false;

except

errormsg(Ошибка сохранения настройки конфигурации!);

end;

end;

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

//проигрывание и пауза выбранного файла

procedure TSysWaves.PlayClick(Sender: TObject);

begin

if (Play.Caption = Пауза) and (FRecorderMode = recModePlay) then begin

Play.Caption:=Играть;

waveOutPause(FWaveOut);

Timer1.Enabled:=false;

exit;

end;

if (Play.Caption = Играть) and (FRecorderMode = recModePlay) then begin