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