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

📄 edit.pas

📁 语音与识别技术包含很多C语言处理模块系统
💻 PAS
📖 第 1 页 / 共 4 页
字号:
     if Poistion >= (Self.PaintBox1.Width - 12) then
        Self.BookMarkImg[i].Left := Self.PaintBox1.Width - 28
     else
        Self.BookMarkImg[i].Left := Poistion - 12;
  Result := i;
end;

procedure TEditMainForm.FDBBookNewClick(Sender: TObject);
var
  i: Integer;
begin
  if Self.PlayWave.NowPlay <> CPPLAYING then
  begin
     Self.SetMax;
     i := Self.AddBookMark(Self.SelData1);
     Self.DFBBookClear.Enabled := TRUE;
     Self.FDBBookNew.Enabled := False;
     Self.ImgBookMarkClick(Self.BookMarkImg[i]);
  end
  else begin
     i := Integer(Self.PlayWave.WaveLength) DIV 2 DIV Self.PaintBox1.Width + 1;
     if i <= 0 then
        i := 1;
     i := LongInt(Self.PlayWave.Position) DIV i DIV 2;
     Self.AddBookMark(i);
  end;
  Self.SetCanBookMarkGoto(Self.isStopPlay);
end;

procedure TEditMainForm.DFBBookClearClick(Sender: TObject);
begin
  Self.ClearBookMark;
  Self.DFBBookClear.Enabled := FALSE;
  Self.FDBBookDEL.Enabled := FALSE;
  Self.FDBBookDELClick(Self.FDBBookDEL);
  Self.SetCanBookMarkGoto(False);
end;

procedure TEditMainForm.DelBookMark(Index: Integer);
var
  i: Integer;
begin
  if Self.BookMarkPoi[Index] >= 0 then
     Self.BookMarkImg[Index].Free;
  for i := Index to Self.BookLenght - 2 do
  begin
     Self.BookMarkImg[i] := Self.BookMarkImg[i + 1];
     Self.BookMarkPoi[i] := Self.BookMarkPoi[i + 1];
  end;
  Self.BookMarkImg[Self.BookLenght - 1] := NIL;
  Self.BookMarkPoi[Self.BookLenght - 1] := -1;
  Self.BookMarkPoi[Index] := -1;
  if Self.BookLenght > 0 then
     Self.BookLenght := Self.BookLenght - 1;
end;

procedure TEditMainForm.ImgBookMarkClick(Sender: TObject);
var
  t:  TCM_Wave_Time;
begin
  if (Self.PlayWave.NowPlay <> CPSTOPING) OR (NOT Self.isStopPlay) then
     Exit;
  Self.FDBBookDEL.Tag := TImage(Sender).Tag;
  Self.FDBBookDEL.Enabled := True;
  Self.SelData1 := Self.BookMarkPoi[TImage(Sender).Tag];
  Self.SelData2 := Self.SelData1;
  Self.DrawSelData(Self.SelData1, Self.SelData2, Self.PaintBox1, Self.CopyDrawBMP, Self.DrawBMP);
  Self.FLEThisBookMark.Text := '当前书签:' + IntToStr(TImage(Sender).Tag + 1);
  Self.PlayWave.IntToWaveTime(Self.PlayWave.IntToWaveLength(
                Self.BookMarkPoi[TImage(Sender).Tag]), t);
  Self.FLEBookTime.Text := '书签位置:' + Self.TimeToString(t);
  Self.SetCanEdit;
end;

procedure TEditMainForm.FDBBookDELClick(Sender: TObject);
begin
  Self.DelBookMark(Self.FDBBookDEL.Tag);
  Self.FDBBookDEL.Tag := -1;
  Self.FDBBookDEL.Enabled := False;
  Self.FLEBookTime.Text := '书签位置:00:00:00.00';
  Self.FLEThisBookMark.Text := '当前书签:0';
  Self.SetCanBookMarkGoto(True);
end;

function TEditMainForm.IsBookIn(const Poistion: Integer): Boolean;
var
  w: Integer;
begin
  Result := False;
  if Poistion < 0 then
     Exit;
  for w := 0 to Self.BookLenght - 1 do
  begin
      if Self.BookMarkPoi[w] = Poistion then
      begin
         Result := True;
         Exit;
      end;
  end;
end;

procedure TEditMainForm.SetCanBookMarkGoto(Enb: Boolean);
var
  i: Integer;
begin
  for i := 0 to 4 do
      Self.GotoBookMarkButton[i].Enabled := (Self.BookMarkPoi[i] >= 0)
                                 AND Enb;
  Self.DFBBookClear.Enabled := Enb AND (Self.BookLenght > 0);
end;

procedure TEditMainForm.DFBBookMark1Click(Sender: TObject);
begin
  Self.SelData1 := Self.BookMarkPoi[TControl(Sender).Tag - 1060];
  Self.SelData2 := Self.SelData1;
  Self.DFBWavePlayClick(Self.DFBThisPlay);
  Self.FLEPlayPoi.Text := '播放序号:' + IntToStr(TControl(Sender).Tag - 1060);
end;

procedure TEditMainForm.SetIndex(Start, EndStart: Integer);
var
  i, j, k: integer;
begin
  Self.doUser := 0;
  for i := 0 to Self.BookLenght - 1 do
  begin
      if Self.BookMarkPoi[i] >= 0 then
      begin
         if (Self.BookMarkPoi[i] > Start) and (Self.BookMarkPoi[i] < EndStart) then
         begin
            Self.LoopUser[Self.doUser] := i;
            Self.doUser := Self.doUser + 1;
         end;
      end;
  end;

  for i := 0 to Self.doUser - 2 do
  begin
      k := Self.BookMarkPoi[Self.LoopUser[i]];
      for j := i + 1 to Self.doUser - 1 do
      begin
          if Self.BookMarkPoi[Self.LoopUser[j]] < Self.BookMarkPoi[Self.LoopUser[i]] then
          begin
             Self.BookMarkPoi[Self.LoopUser[i]] := Self.BookMarkPoi[Self.LoopUser[j]];
             Self.BookMarkPoi[Self.LoopUser[j]] := k;
             k := Self.BookMarkPoi[Self.LoopUser[i]];
          end;
      end;
  end;
  Self.doUser := Self.doUser + 2;
  for i := Self.doUser - 2 Downto 0 do
      Self.LoopUser[i + 1] := Self.LoopUser[i];
  Self.LoopUser[0] := Start;
  Self.LoopUser[Self.doUser - 1] := EndStart;
end;

procedure TEditMainForm.SetSpEnd(Enb: Boolean);
var
  i: Integer;
begin
  for i := 0 to Self.Panel3.ControlCount - 1 do
  begin
      if Self.Panel3.Controls[i] is TLMDRadioButton then
         TLMDRadioButton(Self.Panel3.Controls[i]).Enabled := Enb;
  end;
end;

procedure TEditMainForm.PlayWaveStart(Sender: TObject);
  procedure PlaySpWave(Start, Length: LongInt);
  var
    i: Integer;
    t: TCM_Wave_Time;
  begin
    Self.Timer3.Enabled := False;
    Self.Timer3.Tag := 0;
    Self.PlayWave.IntToWaveTime(Length, t);
    Self.Timer3.Interval := (t.Hour * 3600 + t.Minute * 60 + t.Second) * 1000 + t.Heroism;
    Self.isStopPlay := False;
    for i := 0 to Self.SPLength - 1 do
    begin
        if Self.isStopPlay then
           Exit;
        if Boolean((Self.SPType SHR i) AND 1) then
        begin
           Self.Timer2.Tag := 0;
           Self.PlayWave.Play(Start, Length);
        end
        else begin
           Self.Timer3.Tag := 0;
           Self.Timer2.Tag := 1;
           Self.Timer3.Enabled := TRUE;
           While Self.Timer3.Tag = 0 do
           begin
                 if Self.isStopPlay then
                    Exit;
                 Application.ProcessMessages;
           end;
        end;
    end;
  end;
var
  Start, Length: LongInt;
  Sel1, Sel2: Integer;
  i: Integer;
  Falg: Integer;
begin
  Self.SetMax;
  Falg := Integer(Self.PlayWave.WaveLength) DIV 2 DIV Self.PaintBox1.Width + 1;
  if Falg <= 0 then
     Falg := 1;
  Falg := LongInt(Self.PlayWave.WaveLength) DIV Falg DIV 2;
  case TLMDSpeedButton(Sender).Tag of
    1040: Self.SetIndex(0, Falg);
    1041: Self.SetIndex(Self.SelData1, Falg);
    1042: Self.SetIndex(Self.SelData1, Self.SelData2);
  end;
  case Self.Panel3.Tag of
    1050:
    begin
      Start := 0;
      Length := 0;
      if (TLMDSpeedButton(Sender).Tag = 1041) OR (TLMDSpeedButton(Sender).Tag = 1042) then
      begin
         Start := Self.PlayWave.IntToWaveLength(Self.SelData1);
         if TLMDSpeedButton(Sender).Tag = 1042 then
            Length := Self.PlayWave.IntToWaveLength(ABS(Self.SelData2 - Self.SelData1));
      end;
      Self.Timer2.Tag := 0;
      Self.PlayWave.Play(Start, Length);
    end;
    1051,//SP
    1052,//SSP
    1053,//SPS
    1054://SPSP
    begin
      While True do
      begin
        for i := 0 to Self.doUser - 2 do
        begin
            if Self.isStopPlay then
               Exit;
            Self.FLEPlayPoi.Text := '播放序号:' + IntToStr(i + 1);
            case Self.Panel3.Tag of
            1051:
            begin
               Self.SPLength := 2;
               Self.SPType := Type_SP;
            end;
            1052:
            begin
               Self.SPLength := 3;
               Self.SPType := Type_SSP;
            end;
            1053, 1054:
            begin
               Self.SPLength := Self.Panel3.Tag - 1050;
               Self.SPType := Type_SPS;
            end;
          end;
          if i = 0 then
             Sel1 := Self.LoopUser[0]
          else
             Sel1 := Self.BookMarkPoi[Self.LoopUser[i]];
          if i = (Self.doUser - 2) then
             Sel2 := Self.LoopUser[i + 1]
          else begin
             Sel2 := Self.BookMarkPoi[Self.LoopUser[i + 1]];
          end;
          PlaySpWave(Self.PlayWave.IntToWaveLength(Sel1), Self.PlayWave.IntToWaveLength(Sel2 - Sel1));
        end;
        if (Self.isStopPlay) or (NOT Self.DFBPLayLOOP.Down) then
        begin
           Self.DFBWaveStopClick(Self.DFBWavePlay);
           Exit;
        end;//end if
      end;//end for
    end;//end While
  end;//end case
  Self.DFBWaveStopClick(Self.DFBWavePlay);
end;

procedure TEditMainForm.Timer3Timer(Sender: TObject);
begin
  Self.Timer3.Enabled := False;
  Self.Timer3.Tag := 1;
end;

procedure TEditMainForm.PausePlayWave(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);
      Self.Timer2.Enabled := False;
      Self.LMDLEDLabel1.Caption := '';
    end;
    1:;
    2:;
    3:;
  end;
end;

procedure TEditMainForm.RESTPlayWave(var Msg: TMessage);
begin
  case Self.PagSele.TabIndex of
    0:
    begin
      Self.Timer2.Enabled := TRUE;
      if Self.Timer2.Tag = 0 then
         Self.LMDLEDLabel1.Caption := 'S'
      else
         Self.LMDLEDLabel1.Caption := ' P';
    end;
    1:;
    2:;
    3:;
  end;
end;

procedure TEditMainForm.SetHint;
var
  i: Integer;
begin
  for i := 0 to Self.TabSheet1.ControlCount - 1 do
  begin
      Self.TabSheet1.Controls[i].Hint := ReadString('Hint', Self.TabSheet1.Controls[i].Name);
      if Self.TabSheet1.Controls[i].Hint <> '' then
         Self.TabSheet1.Controls[i].ShowHint := TRUE;
  end;
  for i := 0 to Self.Panel3.ControlCount - 1 do
  begin
      Self.Panel3.Controls[i].Hint := ReadString('Hint', Self.Panel3.Controls[i].Name);
      if Self.Panel3.Controls[i].Hint <> '' then
         Self.Panel3.Controls[i].ShowHint := TRUE;
  end;
end;

procedure TEditMainForm.DFBSetContClick(Sender: TObject);
var
  SetVolSystem: TSetVolSystem;
begin
  SetVolSystem := TSetVolSystem.Create(Self);
  SetVolSystem.ShowModal;
  Self.GetVolumeCtrl;
  Self.GetVolume;
  SetVolSystem.Free;
end;

procedure TEditMainForm.GetVolumeCtrl;
begin
end;

procedure TEditMainForm.ApplicationEvents1Exception(Sender: TObject;
  E: Exception);        //截取所有没有处理的异常
begin
  Self.PlayWave.Stop;              
  Self.PlayWave.CloseWave;
  Self.RecordWave.Stop;
  Application.MessageBox(PChar(E.Message), '系统错误', MB_OK + MB_ICONSTOP);
  Halt;         //结束程序
end;

procedure TEditMainForm.RestoreRequest(var Msg: TMessage);
begin
  if IsIconic(Application.Handle) = TRUE then
    Application.Restore
  else
    Application.BringToFront;
end;

procedure TEditMainForm.CreateParams(var Params: TCreateParams);
begin
  inherited CreateParams(Params);
  Params.WinClassName := WaveSoundClass;
end;

procedure TEditMainForm.TrackBar2Change(Sender: TObject);
begin
  Self.PlayWave.WavePlayKM := Self.TrackBar2.Position;
end;

procedure TEditMainForm.SpdMaxClick(Sender: TObject);
begin
 if self.WindowState = wsMaximized then
   self.WindowState := wsNormal
 else
  self.WindowState := wsMaximized;
end;

procedure TEditMainForm.FormResize(Sender: TObject);
begin
  Self.SpdClose.Left := Self.PalTitle.Width - 2 - Self.SpdClose.Width;
  Self.SpdMax.Left := Self.SpdClose.Left - 4 - Self.SpdMax.Width;
  Self.SpdMin.Left := Self.SpdMax.Left - Self.SpdMin.Width;
end;

end.

⌨️ 快捷键说明

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