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

📄 frmmain.~pas

📁 采用ACM与Skype4Com并且采用分布式UDP来进行语音的拨号、分传。
💻 ~PAS
📖 第 1 页 / 共 2 页
字号:
   begin
         sInfo:=sInfo+mData[iCount];
   end;

   //从转接服务器找到可用的服务器。
   if gcf_GetStrPosStr(sInfo,1)='返回' then
   begin
     idpclntWord.Active:=False;
     gsRedirectHost:=gcf_GetStrPosStr(sInfo,3);
     gsRedirectPort:=gcf_GetStrPosStr(sInfo,2);
     idpclntWord.Port:=StrToIntDef(gcf_GetStrPosStr(sInfo,2),0);
     idpclntWord.Host:=gcf_GetStrPosStr(sInfo,3);
     idpclntWord.Active:=True;

      //发送电话号码
    idpclntWord.Send(DEF_BSEPCHAR + edtPhone.Text +
   DEF_ESEPCHAR + DEF_LINKCHAR + DEF_BSEPCHAR +
   gcf_GetGUIDString  +
   DEF_ESEPCHAR + DEF_LINKCHAR + DEF_BSEPCHAR +
   gComputerName +  DEF_ESEPCHAR + DEF_LINKCHAR + DEF_BSEPCHAR +
   'HOLDON' +  DEF_ESEPCHAR);
   end;


   //采样率
   gsRateType:=gcf_GetStrPosStr(sInfo,1);
   //流方式
   gsStreamType:=gcf_GetStrPosStr(sInfo,2);
   //传输方式
   gsTransType:=gcf_GetStrPosStr(sInfo,3);
   //当前使用帐号
   gsCurrAccount:=gcf_GetStrPosStr(sInfo,4);
   //流模式
   gsStreammodel:=gcf_GetStrPosStr(sInfo,5);

   if trim(gsCurrAccount)='服务1-READY' then
   begin
      WaveInStream1.close;
      WaveOutStream1.close;
      WaveIn1.close();
      WaveOut1.close();

      statMain.Panels[3].Text:=gsCurrAccount;
     //传输方式
     if (UpperCase(Trim(gsTransType)) ='UDP') then begin
       //
       WaveOutStream1.proto := unapt_UDP;
       WaveInStream1.proto := unapt_UDP;
     end
     else begin
       //
       WaveOutStream1.proto := unapt_TCP;
       WaveInStream1.proto := unapt_TCP;
     end;

     if (UpperCase(Trim(gsStreamModel))='0') then begin
       gsStreamModel:='unasm_VC';
       WaveOutStream1.streamingMode:=unasm_VC;
       WaveInStream1.streamingMode:=unasm_VC;
     end else begin
       gsStreamModel:='unasm_RAW';
       WaveOutStream1.streamingMode:=unasm_RAW;
       WaveInStream1.streamingMode:=unasm_RAW;
     end;

     //接受来自远端的流并传输给skype的录音设备
    WaveInStream1.port := gs_LocalPhonePort;

    
    //接收来自Skype播放接口作为录音口 发送流到端口
    WaveOutStream1.port:= gs_RemotePhonePort;
    //远程IP地址
    WaveOutStream1.host:=gs_RemoteIP;

    //回放B---------------------------------------------------------------------
    //设备号
    WaveOut1.deviceId := index2deviceId(cbbPB1);
    //采样率
    WaveOut1.pcm_samplesPerSec :=StrToIntDef(gsRateType,11025);
    WaveCodeP1.formatTag := StrToIntDef(gsStreamType,853);
    WaveCodeP1.pcm_samplesPerSec:=StrToIntDef(gsRateType,11025);
    WaveCodeP1.pcm_numChannels:=1;
    WaveInStream1.open;
    //回放E----------------------------------------------------------------------

    sleep(500);

    //录入B--------------------------------------------------------------------
    WaveIn1.close();
    //设备号
    WaveIn1.deviceId :=index2deviceId(cbbRC1);
    //采样率
    WaveIn1.pcm_samplesPerSec :=StrToIntDef(gsRateType,11025);
    WaveIn1.pcm_numChannels:=1;
    //流模式
    WaveCodeR1.formatTag :=StrToIntDef(gsStreamType,853);

    WaveIn1.Open;
    //保存流模式

     //录入E---------------------------------------------------------------------

    tmrCount.Enabled:=False;
    tmrCount.Interval:=1000;
    tmrCount.Enabled:=True;

    iSec:=0;
    iMin:=0;
    iHor:=0;

    {
    lstServer.Items.Clear;
    lstServer.Items.Add('采样率:' + gsRateType);
    lstServer.Items.Add('声音模式:' + gsStreamType);
    lstServer.Items.Add('传输模式:' + gsTransType);
    lstServer.Items.Add('流模式:' + gsStreamModel);
    lstServer.Items.Add('流入字节: [0] Bytes');
    lstServer.Items.Add('流出字节: [0] Bytes');

    lstLocal.Items.Clear;
    lstLocal.Items.Add('流入:');
    lstLocal.Items.Add('流出:');    }
   end else  if trim(gsCurrAccount)='服务1-BUSY' then
   begin
     statMain.Panels[3].Text:='服务1-占线';
   end;
end;

procedure TfrmSmartPhone.btnDisConClick(Sender: TObject);
begin




  idpclntWord.Send(DEF_BSEPCHAR + edtPhone.Text +  DEF_ESEPCHAR + DEF_LINKCHAR + DEF_BSEPCHAR + 'FINISH' + DEF_ESEPCHAR);
  idpclntWord.Active:=False;
 
  WaveIn1.close();
  WaveInStream1.Close();
  WaveOut1.close();
  WaveOutStream1.Close();

  tmrCount.Enabled:=False;
  
  statMain.Panels.Items[3].Text:='电话已挂断';
  btnDial.Enabled:=True;
  btnDisCon.Enabled:=False;
end;

procedure TfrmSmartPhone.btnNum1Click(Sender: TObject);
begin
 edtPhone.Text:=edtPhone.Text+'1';
end;

procedure TfrmSmartPhone.btnNum2Click(Sender: TObject);
begin
 edtPhone.Text:=edtPhone.Text+'2';
end;

procedure TfrmSmartPhone.btnNum3Click(Sender: TObject);
begin
 edtPhone.Text:=edtPhone.Text+'3';
end;

procedure TfrmSmartPhone.btnNum4Click(Sender: TObject);
begin
 edtPhone.Text:=edtPhone.Text+'4';
end;

procedure TfrmSmartPhone.btnNum5Click(Sender: TObject);
begin
 edtPhone.Text:=edtPhone.Text+'5';
end;

procedure TfrmSmartPhone.btnNum6Click(Sender: TObject);
begin
 edtPhone.Text:=edtPhone.Text+'6';
end;

procedure TfrmSmartPhone.btnNum7Click(Sender: TObject);
begin
 edtPhone.Text:=edtPhone.Text+'7';
end;

procedure TfrmSmartPhone.btnNum8Click(Sender: TObject);
begin
 edtPhone.Text:=edtPhone.Text+'8';
end;

procedure TfrmSmartPhone.btnNum9Click(Sender: TObject);
begin
 edtPhone.Text:=edtPhone.Text+'9';
end;

procedure TfrmSmartPhone.btnNum0Click(Sender: TObject);
begin
 edtPhone.Text:=edtPhone.Text+'0';
end;

procedure TfrmSmartPhone.btnNumXClick(Sender: TObject);
begin
 edtPhone.Text:=edtPhone.Text+'*';
end;

procedure TfrmSmartPhone.btnNumJClick(Sender: TObject);
begin
 edtPhone.Text:=edtPhone.Text+'#';
end;

procedure TfrmSmartPhone.btnRedailClick(Sender: TObject);
begin
 edtPhone.Text:=Copy(edtPhone.Text,1,Length(edtPhone.Text)-1);
end;

procedure TfrmSmartPhone.FormShow(Sender: TObject);
begin
 gcp_GetComputerInfo;
 statMain.Panels[1].Text:=gComputerAddr;
end;

procedure TfrmSmartPhone.tiMainDblClick(Sender: TObject);
begin
 Show;
end;

procedure TfrmSmartPhone.N1Click(Sender: TObject);
begin
 Show;
end;

procedure TfrmSmartPhone.N2Click(Sender: TObject);
begin
 Hide;
end;

procedure TfrmSmartPhone.N4Click(Sender: TObject);
begin
  Hide;
  //本地文字监听端口
  gcf_SetINIValue('NETWORK','LOCALWORDPORT',edtLocalPort.Text);
  //远端文字监听端口
  gcf_SetINIValue('NETWORK','REMOTEWORDPORT',edtRemotePort.Text);
  //远端主机IP
  gcf_SetINIValue('NETWORK','REMOTEHOST',edtServerIP.Text);

  //默认音量    最大
  gcf_SetINIValue('SYSTEM','DEFAULTSPEAKVOL',IntToStr(trckbrSpeak.Position));
  //默认麦克风音量 最大
  gcf_SetINIValue('SYSTEM','DEFAULTMICVOL',IntToStr(trckbrMic.Position));
  //默认麦克风音量 最大
  gcf_SetINIValue('SYSTEM','LASTPHONENUM',edtPhone.Text);

  //回放1
  gcf_SetINIValue('SERVERSOUNDCARD','PB',IntToStr(cbbPB1.ItemIndex));
  //录音1
  gcf_SetINIValue('SERVERSOUNDCARD','RC',IntToStr(cbbRC1.ItemIndex));
 tiMain.Active:=False;
 Application.Terminate;
end;

procedure TfrmSmartPhone.FormClose(Sender: TObject;
  var Action: TCloseAction);
begin
 tiMain.BalloonHint('Smart Phone','程序仍然在运行...',btInfo,30);
 tiMain.Active:=True;
 Action:=caNone;
 Hide;
end;

procedure TfrmSmartPhone.idpsrvrPhoneUDPRead(Sender: TObject;
  AData: TStream; ABinding: TIdSocketHandle);
var
  mData:array[1..CST_MAXBUFF] of char;
  pData:Pchar;
  I,J:Integer;
  sInfo:String;
begin
 if waveOutGetNumDevs>0 then
 begin
   //将流读到mData中。
   AData.ReadBuffer(mData,Adata.Size);
   pData:=pChar(dword(@mData));
  // acmwvtMain.PlayBack(pData,adata.size);
   end;

end;


procedure TfrmSmartPhone.tmrCountTimer(Sender: TObject);
begin
 Inc(iSec);
 if iSec>60 then
 begin
   Inc(iMin);
   if iMin>60 then
   begin
     Inc(iHor);
     if iHor>24 then
     begin
        iHor:=0;
     end;
     iMin:=0;
   end;

   iSec:=0;
 end;

  lblTime.Caption:=FormatFloat('00',iHor) + ':' + FormatFloat('00',iMin) + ':' + FormatFloat('00',iSec);

 if gsCurrAccount='服务1-FINISH' then
 begin
    tmrCount.Enabled:=False;
 end;
end;

end.

⌨️ 快捷键说明

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