⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 edit.pas

📁 语音与识别技术包含很多C语言处理模块系统
💻 PAS
📖 第 1 页 / 共 4 页
字号:
  else
  begin
     Self.PlayWave.IntToWaveTime(Self.PlayWave.IntToWaveLength(Len), t);
     Self.FLESelectLength.Text := '选中长度:' + Self.TimeToString(t);
  end;
  if Self.SelData1 > 0 then
  begin
     Self.PlayWave.IntToWaveTime(Self.PlayWave.IntToWaveLength(Self.SelData1), t);
     Self.FLEThisLeng.Text := '当前位置:' + Self.TimeToString(t);
  end
  else
     Self.FLEThisLeng.Text := '当前位置:00:00:00.00';
  Self.FLEMaxZF.Text := '最大振幅:' + IntToStr(Self.PlayWave.MaxVal);
  Self.FLEZoom.Text := IntToStr(Integer(Self.PlayWave.WaveLength)
                       DIV 2 DIV Self.PaintBox1.Width + 1) + ':1';
end;

procedure TEditMainForm.DrawRule;
var
  i, k: Integer;
  Len, SLen: LongInt;
  t: TCM_Wave_Time;
begin
  Len := Self.PlayWave.WaveLength DIV 10;
  k := Self.ImgDraw.Width DIV 10;
  With Self.ImgDraw.Canvas do
  begin
     SLen := TextWidth('00:00:00') DIV 2;
     MoveTo(1, 30);
     LineTo(Self.ImgDraw.Width - 1, 30);
     for i := 1 to 9 do
     begin
       MoveTo(i * k, 25);
       LineTo(i * k, 40);
       Self.PlayWave.IntToWaveTime(i * Len, t);
       TextOut(i * k - SLen, 5, Self.TimeToString(t, ':', False));
     end;
     MoveTo(0, 25);
     LineTo(0, 40);
     MoveTo(10 * k - 1, 25);
     LineTo(10 * k - 1, 40);
  end;
end;

procedure TEditMainForm.DFBSaveASClick(Sender: TObject);
begin
  if Self.SaveDialog1.Execute then
  begin
     case TLMDSpeedButton(Sender).Tag of
       1010:
       begin
         Self.FileName := Self.SaveDialog1.FileName;
         Self.PlayWave.Save(Self.FileName);
         Self.WaveChange := False;
         Self.PlayWave.SetWaveFile(Self.SaveDialog1.FileName);
       end;
       1011:
       begin
         Self.SetMax;
         Self.PlayWave.Save(Self.SaveDialog1.FileName,
                            Self.PlayWave.IntToWaveLength(Self.SelData1),
                            Self.PlayWave.IntToWaveLength(ABS(Self.SelData2 -
                            Self.SelData1)));
       end;
     end;
  end;
end;

procedure TEditMainForm.DFBSaveWaveClick(Sender: TObject);
begin
  if Self.FileName = '' then
     Self.DFBSaveASClick(Self.DFBSaveAS)
  else begin
     Self.PlayWave.Save(Self.FileName);
     Self.WaveChange := FALSE;
  end;
end;

procedure TEditMainForm.SetFileName(const Value: String);
begin
  FFileName := Value;
  if Value = '' then
     Self.StbShow.Panels[1].Text := 'None.wav'
  else
     Self.StbShow.Panels[1].Text := Value;
end;

procedure TEditMainForm.SetWaveChange(const Value: Boolean);
begin
  FWaveChange := Value;
  Self.DFBSaveWave.Enabled := Value;
end;

procedure TEditMainForm.OpenDialog1CanClose(Sender: TObject;
  var CanClose: Boolean);
begin
  if NOT FileExists(TOpenDialog(Sender).FileName) then
  begin
    if TControl(Sender).Tag = 1020 then
    begin
       Application.MessageBox('文件不存在!', '文件错误', MB_OK + MB_ICONSTOP);
       CanClose := False;
    end;
  end
  else begin
     if TControl(Sender).Tag = 1021 then
     begin
        CanClose := Application.MessageBox('文件已存在!是否覆盖?', '文件错误',
                    MB_OKCANCEL + MB_ICONWARNING) = idOk;
     end;
  end;
end;

procedure TEditMainForm.DFBWavePaseClick(Sender: TObject);
begin
//  TLMDSpeedButton(Sender).Down := Not TLMDSpeedButton(Sender).Down;
  case Self.Wave_Type of
    CS_SAVE_PLAY:
       if TLMDSpeedButton(Sender).Down then
          Self.PlayWave.Pause
       else
          Self.PlayWave.Restart;
    CS_SAVE_RECORD:
       if TLMDSpeedButton(Sender).Down then
          Self.RecordWave.Pause
       else
          Self.RecordWave.Restart;
  end;
end;

procedure TEditMainForm.DFBWaveStopClick(Sender: TObject);
begin
  case Self.Wave_Type of
    CS_SAVE_PLAY:
    begin
      Self.PlayWave.Stop;
      Self.DFBWavePlay.Enabled := Self.PlayWave.WaveLength > 0;
      Self.DFBWavePlay.Down := FALSE;
    end;
    CS_SAVE_RECORD:
    begin
      Self.RecordWave.Stop;
    end;
  end;
  Self.isStopPlay := True;
  Self.Timer1.Enabled := FALSE;
  Self.Timer3.Enabled := False;
  Self.Timer3.Tag := 1;
  Self.TrackBar1.Position := 0;
  Self.DFBWaveStop.Enabled := FALSE;
  Self.DFBWavePase.Down := FALSE;
  Self.DFBWavePase.Enabled := FALSE;
  Self.DFBRecordStart.Enabled := TRUE;
  Self.DFBRecordStart.Down := FALSE;
  Self.SetSpEnd(TRUE);
  if Self.Wave_Type = CS_SAVE_PLAY then
     Self.PaintBox1.Refresh;
  Self.SetCanEdit;
  Self.DFBSaveWave.Enabled := Self.WaveChange;
  Self.DFBSaveAS.Enabled := Self.PlayWave.FileName <> '';
  Self.DFBWaveOpen.Enabled := TRUE;
  Self.DFBThisPlay.Down := FALSE;
  Self.DFBPlaySreg.Down := FALSE;

  Self.DFBBookClear.Enabled := Boolean(Self.DFBBookClear.Tag);
  Self.FDBBookDEL.Enabled := Self.FDBBookDEL.Tag >= 0;
  Self.Timer2.Enabled := False;
  Self.LMDLEDLabel1.Caption := '';
  Self.SetCanBookMarkGoto(TRUE);
  Self.FLEPlayPoi.Text := '播放序号:0';
end;

procedure TEditMainForm.BeginSave(var Msg: TMessage);
begin
  Self.PRBShowPlan.Visible := TRUE;
  Self.PRBShowPlan.Max := Msg.WParam;
  if Self.Wave_Type = CS_SAVE_RECORD then
     Self.StbShow.Panels[0].Text := '正在转换数据'
  else
     Self.StbShow.Panels[0].Text := '正在保存';
end;

procedure TEditMainForm.EndSave(var Msg: TMessage);
begin
  Self.StbShow.Panels[0].Text := '';
  Self.PRBShowPlan.Visible := False;
  Self.PRBShowPlan.Position := 0;
  if Self.Wave_Type = CS_SAVE_RECORD then
     Self.PlayWave.FileName := Self.RecordWave.WaveFileName;
end;

procedure TEditMainForm.SavePoi(var Msg: TMessage);
begin
  Self.PRBShowPlan.Position := Msg.WParam;
  Application.ProcessMessages;
end;

function TEditMainForm.IsSave: Boolean;
var
  k: Integer;
  Re: Boolean;
begin
  Re := Self.WaveChange;
  k := idNo;
  if Self.WaveChange then
  begin
     k := Application.MessageBox('音频文件已经更改!是否保存?', '提示', MB_YESNOCANCEL + MB_ICONINFORMATION);
     case k of
       idYes: Self.DFBSaveWaveClick(Self.DFBSaveWave); 
       idNo: Re := FALSE;
     end;
  end;
  if k <> idNO then
     Re := Self.WaveChange;
  Result := Re;
end;

procedure TEditMainForm.DFBWavePlayClick(Sender: TObject);
begin
  TLMDSpeedButton(Sender).Down := TRUE;
  Self.Wave_Type := CS_SAVE_PLAY;
  Self.DFBRecordStart.Enabled := FALSE;
  Self.DFBRecordStart.Down := FALSE;
  Self.DFBWaveStop.Enabled := TRUE;
  Self.DFBWavePase.Enabled := TRUE;
  Self.DFBWavePase.Down := False;
  Self.SetButtonEnabled;
  Self.SetSpEnd(FALSE);
  Self.SetCanBookMarkGoto(False);
  Self.isStopPlay := False;

  Self.DFBBookClear.Tag := Integer(Self.DFBBookClear.Enabled);
  Self.DFBBookClear.Enabled := FALSE;
  Self.FDBBookDEL.Enabled := FALSE;
  Self.FDBBookNew.Enabled := (Self.Panel3.Tag = 1050);
  Try
    Self.PlayWaveStart(Sender);
  Except;
    Self.PlayWave.CloseWave;
    Self.SetCanEdit;
    Self.ShowWaveTime;
    Self.DFBWaveStopClick(Self.DFBWavePlay);
    Application.MessageBox('播放错误!', '播放错误', MB_OK + MB_ICONERROR);
    Exit;
  end;
end;

procedure TEditMainForm.SetButtonEnabled;
begin
  Self.DFBCopy.Enabled := False;
  Self.DFBCut.Enabled := False;
  Self.DFBPast.Enabled := False;
  Self.DFBDel.Enabled := False;
  Self.DFBUndo.Enabled := False;
  Self.DFBSaveWave.Enabled := False;
  Self.DFBSaveAS.Enabled := False;
  Self.DFBSaveArea.Enabled := False;
  Self.DFBWaveOpen.Enabled := False;
  Self.DFBThisPlay.Enabled := False;
  Self.DFBPlaySreg.Enabled := False;
  Self.DFBWavePlay.Enabled := False;
  {
  Self.DFBThisPlay.Down := False;
  Self.DFBPlaySreg.Down := False;
  Self.DFBWavePlay.Down := False;
  }
end;

procedure TEditMainForm.EndPlayWave(var Msg: TMessage);
begin
  case Self.PagSele.TabIndex of
    0:
    begin
      BitBlt(Self.StopDrawBmp.Canvas.Handle, 0, 0, Self.PaintBox1.Width,
             Self.PaintBox1.Height, Self.PaintBox1.Canvas.Handle, 0, 0, SRCCOPY);

      if (Self.Panel3.Tag <> 1050) and (Not Self.isStopPlay) then
      begin
         Exit;
      end;
      Self.isStopPlay := True;
      if Self.DFBPLayLOOP.Down then
      begin
         if Self.DFBWavePlay.Down then
            Self.DFBWavePlayClick(Self.DFBWavePlay);
         if Self.DFBThisPlay.Down then
            Self.DFBWavePlayClick(Self.DFBThisPlay);
         if Self.DFBPlaySreg.Down then
            Self.DFBWavePlayClick(Self.DFBPlaySreg);
      end
      else
         Self.DFBWaveStopClick(Self.DFBWaveStop);
    end;
    1:
    begin
    end;
    2:;
    3:;
  end;
end;

procedure TEditMainForm.Timer1Timer(Sender: TObject);
begin
  case Self.PagSele.TabIndex of
    0: Self.TrackBar1.Position := Self.PlayWave.Position;
    1:;
    2:;
    3:;
  end;
  Application.ProcessMessages;
end;

procedure TEditMainForm.BeginPlayWave(var Msg: TMessage);
begin
  case Self.PagSele.TabIndex of
    0:
    begin
      Self.Timer1.Enabled := TRUE;
      Self.Timer2.Enabled := True;
      Self.LMDLEDLabel1.Caption := 'S';
    end;
    1: Self.Timer1.Enabled := TRUE;
    2:;
    3:;
  end;
end;

procedure TEditMainForm.LMDRadioButton1Click(Sender: TObject);
begin
  TControl(TLMDRadioButton(Sender).Parent).Tag := TLMDRadioButton(Sender).Tag
end;

procedure TEditMainForm.Timer2Timer(Sender: TObject);
begin
   Application.ProcessMessages;
   if Self.LMDLEDLabel1.Caption = '' then
   begin
      if Self.Timer2.Tag = 0 then
         Self.LMDLEDLabel1.Caption := 'S'
      else
         Self.LMDLEDLabel1.Caption := ' P';
   end
   else
      Self.LMDLEDLabel1.Caption := '';
   Application.ProcessMessages;
end;

procedure TEditMainForm.ClearBookMark;
var
  i: Integer;
begin
  for i := 0 to Self.BookLenght - 1 do
  begin
      if Self.BookMarkPoi[i] >= 0 then
         Self.BookMarkImg[i].Free;
      Self.BookMarkPoi[i] := -1;
  end;
  Self.BookLenght := 0;
end;

function TEditMainForm.AddBookMark(Poistion: Integer): Integer;
var
  Re: TRect;
  w, h, i: Integer;
  St: String;
begin
  Result := -1;
  if Self.IsBookIn(Poistion) then
     Exit;
  i := Self.BookLenght;
  for w := 0 to Self.BookLenght - 1 do
  begin
      if Self.BookMarkPoi[w] = -1 then
      begin
         i := w;
         break;
      end;
  end;
  if (i >= BookMarkMax) or (Poistion < 0) then
     Exit;
  Re := Rect(0, 0, Self.ImgBookMark.Width, Self.ImgBookMark.Height);
  Self.BookLenght := Self.BookLenght + 1;
  St := IntToStr(i + 1);
  Self.BookMarkImg[i] := TImage.Create(Self);
  Self.BookMarkPoi[i] := Poistion;
  w := (Self.ImgBookMark.Width DIV 2) - (Self.ImgBookMark.Canvas.TextWidth(St) DIV 2) - 2;
  h := (Self.ImgBookMark.Height DIV 2) - (Self.ImgBookMark.Canvas.TextHeight(St) DIV 2) + 1;
  Self.BookMarkImg[i].Parent := Self.ImgBookMark.Parent;
  Self.BookMarkImg[i].Tag := i;
  Self.BookMarkImg[i].Width := Self.ImgBookMark.Width;
  Self.BookMarkImg[i].Height := Self.ImgBookMark.Height;
  Self.BookMarkImg[i].Canvas.CopyRect(Re, Self.ImgBookMark.Canvas, Re);
  Self.BookMarkImg[i].Canvas.Brush.Style := bsClear;
  Self.BookMarkImg[i].Canvas.TextOut(w, h, St);
  Self.BookMarkImg[i].Top := Self.ImgBookMark.Top;
  Self.BookMarkImg[i].OnClick := Self.ImgBookMark.OnClick;
  if Poistion <= 12 then
     Self.BookMarkImg[i].Left := 4
  else

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -