<nobr id="zkazv"></nobr>

      午夜精品一区二区三区成人,中文字幕av一区二区,亚洲AVAV天堂AV在线网阿V,肥臀浪妇太爽了快点再快点,国产网友愉拍精品视频手机,国产精品无码a∨麻豆,久久中文字幕一区二区,a级国产乱理伦片在线观看al
      您現(xiàn)在所在的是:

      串口通信

      回帖:15個(gè),閱讀:20548 [上一頁(yè)] [1] [2] [下一頁(yè)]
      29730
      思南 管理員
      文章數(shù):14045
      年度積分:57
      歷史總積分:29730
      注冊(cè)時(shí)間:2001/3/12
      發(fā)站內(nèi)信
      發(fā)表于:2003/8/17 22:44:00
      #0樓
      轉(zhuǎn)貼
      利用語(yǔ)音Modem實(shí)現(xiàn)電話點(diǎn)播和留言功能
      作者:陳省


      有一段時(shí)間沒(méi)有更新網(wǎng)站了,最近挺忙的,所以寫(xiě)書(shū)的進(jìn)度慢了一些,兩周只寫(xiě)了10多頁(yè)設(shè)計(jì)模式相關(guān)的內(nèi)容。希望在接下來(lái)的幾周能加快進(jìn)度,趕緊弄完。另外前兩天,我被評(píng)為了Borland Delphi產(chǎn)品專(zhuān)家,加上這兩天北京的非典形勢(shì)也緩和多了,很高興。為此公開(kāi)很久以前寫(xiě)的一篇文章,與大家分享一下我的快樂(lè)。

      偶然的起因
      記得還是在去年情人節(jié)的時(shí)候,當(dāng)時(shí)一直在為給女朋友送什么禮物而發(fā)愁,覺(jué)得送花實(shí)在沒(méi)有什么創(chuàng)意,可又不知道什么樣的禮物即能給她一個(gè)驚喜同事又不昂貴。這時(shí),我的一個(gè)好朋友出了一個(gè)主意,說(shuō)不如電話點(diǎn)歌吧,還比較特別。可是如果是通過(guò)電臺(tái)點(diǎn)歌后,再告訴她收聽(tīng)的話就起不到意外的效果了。
      就在沒(méi)有什么好辦法的時(shí)候,我在Delphi論壇上瞎逛的時(shí)候,一個(gè)人提出的問(wèn)題突然啟發(fā)了我,問(wèn)題是關(guān)于如果編程實(shí)現(xiàn)語(yǔ)音留言和電話按鍵的記錄功能的。我突然想為什么我不能寫(xiě)一個(gè)程序來(lái)控制電話,然后再給女友打一個(gè)傳呼,讓她回電話,當(dāng)電話接通后,我的程序先播放一段事先錄制好的話,提示她通過(guò)電話按鍵來(lái)選歌,并能提供留言的功能呢。主意一定,我就趕忙查閱這方面的資料了,一開(kāi)始朋友們告訴可以通過(guò)語(yǔ)音卡來(lái)實(shí)現(xiàn)這些功能,可是語(yǔ)音卡比較貴,而且我買(mǎi)了后,除了用一次以外以后也不會(huì)經(jīng)常用到,實(shí)在是有點(diǎn)浪費(fèi),后來(lái)網(wǎng)友cced提到他聽(tīng)人說(shuō)TurboPower公司出的Async Professional控件提供了一組基于Telephone Api的控件可以通過(guò)語(yǔ)音Modem來(lái)實(shí)現(xiàn)類(lèi)似的功能。這個(gè)看來(lái)成本就低多了,我的Modem正好是語(yǔ)音Modem,于是我就下載了Async Professional(官方網(wǎng)址為www.turbopower.com)試驗(yàn)了一下,果然不同反響,便宜且簡(jiǎn)單。

      開(kāi)始設(shè)計(jì)
      下面我們就來(lái)看看如何利用這組控件實(shí)現(xiàn)語(yǔ)音功能,對(duì)于我們程序的應(yīng)用來(lái)說(shuō),只需要使用兩個(gè)TAPI控件TApdComPort和TApdTapiDevice即可,其中TApdComPort控件是一個(gè)串口通訊控件,因?yàn)镸odem是同串口相連接的,因此需要串口通訊控件來(lái)進(jìn)行控制。而TapdTapiDevice則是提供語(yǔ)音功能的核心控件。
      首先,新建一個(gè)程序項(xiàng)目,在窗體上放置一個(gè)TApdComport控件,設(shè)置其屬性為AutoOpen:=False;TapiMode=tmOn;這里TapiMode 設(shè)定為tmOn 表明TApdComPort 將由同其關(guān)聯(lián)的TApdTapiDevice.控件來(lái)控制,而將AutoOpen設(shè)定為False 是因?yàn)榇诘拇蜷_(kāi)和關(guān)閉現(xiàn)在可以完全由TAPI來(lái)控制了。
      然后,在窗體上放置一個(gè)TApdTapiDevice控件,設(shè)定其Comport屬性為前面的TApdComPort控件。設(shè)定AnswerOnRing屬性為1,表明第一次振鈴后就開(kāi)始由程序控制電話的應(yīng)答。設(shè)定ShowTapiDevices為T(mén)rue表明當(dāng)調(diào)用控件的SelectDevice方法時(shí),會(huì)顯示一個(gè)選擇TAPI設(shè)備的對(duì)話框。ShowPorts屬性為false,表明調(diào)用SelectDevice方法不會(huì)顯示串行口列表。
      接下來(lái),本程序主要是采用有限狀態(tài)機(jī)來(lái)控制流程的,下面我們來(lái)定義枚舉狀態(tài)

      Type
      TCurrentState = (csIdle, csWaiting, csConnected, csPlaying, csRecording, sDisconnected);

      其中csIdle狀態(tài)表示電話處于空閑狀態(tài),正等待接入。csWaiting則表示電話處于程序控制下,等待接入,如果有電話打入,程序會(huì)自動(dòng)應(yīng)答。csConnected則表示有電話打入,處于連接狀態(tài),csRecording則用來(lái)表示當(dāng)前處于記錄電話留言狀態(tài)。csDisconnected則表示當(dāng)前連接掛斷了。

      程序初始化
      下面就是程序的OnCreate的事件處理函數(shù),非常簡(jiǎn)單,就是先設(shè)置當(dāng)前狀態(tài)為csIdle,并設(shè)置ApdTapiDevice控件的TrimSeconds屬性為5,表示當(dāng)錄音時(shí)如果有5秒的沉默時(shí)間就掛斷。
      procedure TFrmMain.FormCreate(Sender: TObject);
      var
      TeleIni: TIniFile;
      begin
      CurrentState := csIdle;
      ApdTapiDevice.TrimSeconds := 5; //錄音時(shí)有5秒靜音就掛斷

      CommandList := TStringList.Create;

      TeleIni := TIniFile.Create(ExtractFilePath(ParamStr(0)) + 'Tele.ini');
      TeleIni.ReadSectionValues('Commands', CommandList);
      TeleIni.Free;
      WindowState := wsMaximized;
      end;
      然后是將定義在Tele.Ini文件中的將要播放的聲音列表文件目錄加載到CommandList中。Tele.Ini的示例如下:
      [Commands]
      1#=1.wav
      2#=2.wav
      3#=3.wav
      123#=E:\Program Files\APRO\Examples\Beep.wav
      其中1#,表示當(dāng)用戶按下1和#號(hào)按鍵后,程序會(huì)播放其對(duì)應(yīng)的1.wav文件。接下來(lái)就是我們要提供兩個(gè)命令,一個(gè)是監(jiān)控電話,一個(gè)是掛斷電話,先在窗體上添加一個(gè)TlistBox,起名為L(zhǎng)BSysInfo,然后添加兩個(gè)菜單項(xiàng),并同兩個(gè)Action連接,編寫(xiě)Action的OnExecute事件處理函數(shù):

      //監(jiān)控電話
      procedure TFrmMain.ActionAnswerExecute(Sender: TObject);
      begin
      try
      ApdTapiDevice.EnableVoice := True;
      except
      Application.MessageBox('當(dāng)前設(shè)備不支持語(yǔ)音擴(kuò)展', '錯(cuò)誤', MB_OK);
      end;

      if ApdTapiDevice.EnableVoice then
      begin
      ApdTapiDevice.AutoAnswer;
      LBSysInfo.Items.Add('answer:接聽(tīng)對(duì)方電話');
      CurrentState := csWaiting;
      end
      end;

      因?yàn)椴皇撬械腗odem都支持語(yǔ)音功能,因此在監(jiān)控電話接入前應(yīng)該先判斷設(shè)置ApdTapiDevice.EnableVoice := True;,如果出現(xiàn)異常,表明Modem不支持語(yǔ)音功能。如果支持的話,就調(diào)用AutoAnswer方法等待接入同時(shí)設(shè)置狀態(tài)為csWaiting,并在列表框中寫(xiě)入日志。

      //掛斷電話
      procedure TFrmMain.ActionCancelExecute(Sender: TObject);
      begin
      ApdTapiDevice.CancelCall;
      LBSysInfo.Items.Add('cancel:掛斷對(duì)方電話');
      CurrentState := csIdle;
      end;

      掛斷電話就簡(jiǎn)單多了,只要簡(jiǎn)單的調(diào)用TApdTapiDevice控件的CancelCall方法就可以了,還需要設(shè)置當(dāng)前狀態(tài)為csIdle。

      如果系統(tǒng)中存在多個(gè)TAPI設(shè)備的時(shí)候,我們還可以選擇使用哪一個(gè)來(lái)接聽(tīng)電話,下面是選擇設(shè)備的方法:

      //選擇設(shè)備
      procedure TFrmMain.ActionSelDevExecute(Sender: TObject);
      begin
      ApdTapiDevice.SelectDevice;
      ApdTapiDevice.EnableVoice := True;
      end;

      事件驅(qū)動(dòng)
      Telephone API是基于事件驅(qū)動(dòng)的,因此核心功能需要在事件處理函數(shù)中實(shí)現(xiàn),先來(lái)看程序的TApdTapiDevice的OnConnect事件處理函數(shù)代碼:

      procedure TFrmMain.ApdTapiDeviceTapiConnect(Sender: TObject);
      begin
      CurrentState := csConnected;
      LBSysInfo.Items.Add('Connect:連接成功');
      ApdTapiDevice.PlayWaveFile('Greeting.wav');//播放功能提示語(yǔ)音
      LBSysInfo.Items.Add('connect:播放greeting.wav');
      end;

      當(dāng)用戶打入被監(jiān)控的電話后,會(huì)激發(fā)這個(gè)事件,程序應(yīng)該在用戶接入后播放提示語(yǔ)音,提示用戶按不同功能鍵來(lái)點(diǎn)歌或留言。程序設(shè)置當(dāng)前狀態(tài)為csConnected,然后調(diào)用ApdTapiDevice的PlayWaveFile方法播放提示語(yǔ)音波文件。
      要注意的是:不同Modem支持播放的波文件的格式是不同的,但它們都支持PCM 8位單聲道的波文件,但這種類(lèi)型波文件的音質(zhì)非常差,用來(lái)播放歌曲效果實(shí)在糟糕,不過(guò)大多數(shù)語(yǔ)音Modem都支持音質(zhì)更好的波文件格式,但通常都是 PCM格式的,比如我的Lucent Voice Modem就支持PCM 16位 單聲道的波文件的播放。歌曲轉(zhuǎn)化為波文件非常簡(jiǎn)單,我用Winamp將mp3文件通過(guò)Winamp本身的Disk Writer Plug-in插件直接將mp3轉(zhuǎn)化成44位的波文件(通常為40-70M大小),然后在用一個(gè)叫g(shù)oldwave的軟件(我忘了從什么地方下載的了)將其轉(zhuǎn)化為16位的單聲道波文件(通常4-7M大小)。至于提示語(yǔ)音,我則是使用windows自帶的錄音機(jī)程序通過(guò)麥克風(fēng)錄制的。
      當(dāng)用戶聽(tīng)完提示語(yǔ)音后,他們會(huì)按鍵來(lái)點(diǎn)歌或留言,而用戶的按鍵會(huì)激發(fā)TApdTapiDevice的OnDTMF事件,我們就可以在這個(gè)事件中對(duì)按鍵進(jìn)行處理,下面就是處理過(guò)程代碼:

      procedure TFrmMain.ApdTapiDeviceTapiDTMF(CP: TObject; Digit: Char;
      ErrorCode: Integer);
      begin
      if (Digit = '') or (Digit = ' ') then
      Exit;
      LBSysInfo.Items.Add('dtmf:按鍵=' + Digit);

      CurrentCommand := CurrentCommand + Digit;
      {簡(jiǎn)單狀態(tài)機(jī)}
      if Digit = '#' then
      begin
      if CurrentCommand = '*#' then
      begin
      CurrentCommand := '';
      ApdTapiDevice.MaxMessageLength := 30; //最長(zhǎng)記錄時(shí)間30秒
      ApdTapiDevice.InterruptWave := False; //按鍵不能中斷提示語(yǔ)音的播放
      ApdTapiDevice.PlayWaveFile('recordhint.wav');//播放錄音提示語(yǔ)音
      CurrentState := csRecording;
      Exit;
      end;

      if CommandList.Values[CurrentCommand] <> '' then
      begin
      ApdTapiDevice.PlayWaveFile(CommandList.Values[CurrentCommand]);
      LBSysInfo.Items.Add(Format('%s %s 正在播放 %s',
      [ApdTapiDevice.calleridname, apdtapidevice.callerid,
      CommandList.Values[CurrentCommand]]));
      end
      else
      begin
      //播放錯(cuò)誤提示語(yǔ)音,并要求用戶重新輸入命令
      ApdTapiDevice.PlayWaveFile('errorno.wav');
      LBSysInfo.Items.Add(Format('%s %s 輸入了錯(cuò)誤的號(hào)碼',
      [ApdTapiDevice.calleridname, apdtapidevice.callerid]));
      end;
      //重置命令為空
      CurrentCommand := '';
      end;
      end;

      程序?qū)Π存I進(jìn)行判斷(按鍵對(duì)應(yīng)于digit參數(shù)),如果輸入的為’*#’鍵,就進(jìn)入錄音功能,在錄音前先播放提示語(yǔ)音,可以告訴用戶留言長(zhǎng)度為30秒,然后設(shè)置當(dāng)前狀態(tài)為csRecording,有人可能要問(wèn),沒(méi)看到用來(lái)錄音的代碼呀,這部分其實(shí)是實(shí)現(xiàn)在另外的事件中的,我們稍后就會(huì)講到。再來(lái)看點(diǎn)歌部分,同樣的根據(jù)按鍵的組合在先前加載進(jìn)CommandList的字符串列表中查找相匹配的歌曲,如果有相應(yīng)的歌曲就播放,否則播放錯(cuò)誤提示語(yǔ)音,提示用戶重新輸入命令,然后將按鍵清空等待重新輸入。另外注意在事件的日志記錄中我記錄了ApdTapiDevice.calleridname和CallerID的屬性,它們對(duì)應(yīng)的是打入電話的號(hào)碼,不過(guò)這項(xiàng)功能只對(duì)開(kāi)通了來(lái)電顯示功能的電話號(hào)碼才有效,通過(guò)對(duì)打入電話號(hào)碼信息的處理,我們可以提供一些額外的功能,不過(guò)這是題外話了。
      前面提到了在按鍵處理事件中我們并沒(méi)有進(jìn)行留言的錄制功能,這主要是因?yàn)槲覀円WC留言提示語(yǔ)音不被按鍵中斷(設(shè)定Interruptwave:=false),因此把留言錄制功能放到了TApdTapiDevice的OnWaveNotify事件中了,這個(gè)事件可以提示波文件播放的狀態(tài),比如播放結(jié)束和錄音所需聲音數(shù)據(jù)準(zhǔn)備狀態(tài)等,在本程序中我們需要在提示語(yǔ)音播放結(jié)束后,開(kāi)始記錄留言,并在留言聲音數(shù)據(jù)準(zhǔn)備好后,將其保存到磁盤(pán)文件中。下面是處理過(guò)程的流程:

      procedure TFrmMain.ApdTapiDeviceTapiWaveNotify(CP: TObject;
      Msg: TWaveMessage);
      var
      TimeStr: string;
      FileName: string;
      begin
      //決不能在case外做耗時(shí)的操作
      case Msg of
      waPlayOpen: LBSysInfo.Items.Add('wavnotify:播放開(kāi)始');
      waPlayDone:
      begin
      LBSysInfo.Items.Add('wavnotify:播放結(jié)束');
      if CurrentState = csRecording then
      begin
      try
            //等待波設(shè)備狀態(tài)為wsIdle再開(kāi)始錄音
      while ApdTapiDevice.WaveState <> wsIdle do
      Application.ProcessMessages;
      ApdTapiDevice.InterruptWave := True;
      ApdTapiDevice.StartWaveRecord;
      LBSysInfo.Items.Add('dtmf:錄音成功');
      except
      LBSysInfo.Items.Add('dtmf:錄音失敗');
      end;
      end;
      end;
      waPlayClose: LBSysInfo.Items.Add('wavnotify:播放關(guān)閉');
      waRecordOpen: LBSysInfo.Items.Add('wavnotify:錄音開(kāi)始');
      waDataReady:
      begin
      LBSysInfo.Items.Add('wavnotify:數(shù)據(jù)準(zhǔn)備');
      TimeSeparator := '-';
      FileName := DateTimeToStr(Now) + '.wav';
      try
      ApdTapiDevice.SaveWaveFile(ExtractFilePath(ParamStr(0)) + 'record\' +
      FileName, True);
      LBSysInfo.Items.Add('wavNotify:保存聲音文件 ' + FileName);
      except
      LBSysInfo.Items.Add('wavnotify:保存聲音文件失敗');
      end;
      end;
      waRecordClose:
      begin
      LBSysInfo.Items.Add('wavnotify:記錄聲音結(jié)束');
      CurrentState := csWaiting;
      ActionCancelExecute(nil);
      Timer1.Enabled := True;
      end;
      end;
      end;

      整個(gè)流程就是通過(guò)一個(gè)Case語(yǔ)句來(lái)判斷當(dāng)前聲音狀態(tài),如果為waPlayDone(播放完畢),同事CurrentStatus為csRecording的話,就調(diào)用StartWaveRecord方法來(lái)記錄聲音。而當(dāng)Msg為waDataReady狀態(tài)時(shí),表明錄音數(shù)據(jù)已經(jīng)可以存盤(pán)了,這時(shí)根據(jù)當(dāng)前時(shí)間生成一個(gè)文件名,并將數(shù)據(jù)保存為波文件。而當(dāng)錄音結(jié)束后,我們就需要調(diào)用ActionCancelExecute(nil)來(lái)掛斷電話,并將狀態(tài)設(shè)置為csWaiting來(lái)等待下次接入,注意的在代碼最后,我們將一個(gè)TTimer控件激活了。這個(gè)TTimer控件的時(shí)間間隔Interval設(shè)置為8秒,同時(shí)其OnTimer事件代碼如下:

      procedure TFrmMain.Timer1Timer(Sender: TObject);
      begin
      try
        //應(yīng)答電話
      ActionAnswerExecute(nil);
      CurrentState := csWaiting;
      Timer1.Enabled := False;
      except
      end;
      end;

      這樣設(shè)置的原因在于,當(dāng)調(diào)用CancelCall方法來(lái)掛斷電話后,TAPI設(shè)備需要8秒來(lái)恢復(fù)正常狀態(tài),如果立刻執(zhí)行AutoAnswer的話,這個(gè)方法就會(huì)失效,無(wú)法正確監(jiān)控電話接入,因此要用TTimer來(lái)控制恢復(fù)電話應(yīng)答的時(shí)間。

      異常處理
      要想程序非常健壯的反復(fù)應(yīng)答電話接入,我們必須對(duì)用戶突然掛斷電話進(jìn)行處理,用戶斷開(kāi)的事件會(huì)激發(fā)控件的OnTapiStatus事件,當(dāng)用戶掛斷電話時(shí),我們要做的是如果當(dāng)前還在錄音,就停止錄音,如果是在播放歌曲,就掛斷電話,然后設(shè)置TTimer生效,重新進(jìn)入電話應(yīng)答狀態(tài)。下面就是整個(gè)處理過(guò)程的代碼:

      procedure TFrmMain.ApdTapiDeviceTapiStatus(CP: TObject; First,
      Last: Boolean; Device, Message, Param1, Param2, Param3: Cardinal);
      begin
      if (Message = Line_CallState) then
      begin
      case Param1 of
      LineCallState_Disconnected:
      begin
      LBSysInfo.Items.Add('status:disconnected from remote modem');
      if CurrentState = csRecording then
      begin
      ApdTapiDevice.StopWaveRecord;
      Exit;
      end;
      CurrentState := csDisconnected;
      ActionCancelExecute(nil);
      Timer1.Enabled := True;
      end;
      end;
      end;
      end;

      進(jìn)一步完善
      當(dāng)錄音完畢后,我們想聽(tīng)一下電話留言的話,可以在窗體上放置一個(gè)打開(kāi)文件對(duì)話框,用下面代碼實(shí)現(xiàn):

      procedure TFrmMain.ActionPlayRecExecute(Sender: TObject);
      var
      FrmPlay: TFrmPlayRec;
      begin
      DlgOpenRec.InitialDir := ExtractFilePath(ParamStr(0)) + 'Record\';
      if DlgOpenRec.Execute then
      //播放聲音記錄文件
      ShellExecute(Application.Handle, PChar('open'), PChar(DlgOpenRec.FileName),
      nil, nil, SW_SHOW);
      end;

      另外,如果大家自信自己的歌喉不比那些歌星差的話,完全可以錄制自己的歌聲,然后播放給你的女朋友或朋友聽(tīng),也許效果更棒:)。
      最后,我要說(shuō)的就是Telephone API所能提供的功能遠(yuǎn)遠(yuǎn)不止本文中所提到的,感興趣的朋友可以進(jìn)一步查閱相關(guān)資料來(lái)研究。

      最后,要說(shuō)的是Turbo Power已經(jīng)不再開(kāi)發(fā)Async Pro了,它把所有的源碼都放到了Sourceforge上共享,大家可以到SourceForge上下載。

      圖
      如您對(duì)論壇有好的建議或創(chuàng)想,請(qǐng)加大版主微信號(hào):gkong2015
      大版主推薦【工控百家談】微信公眾號(hào),業(yè)界大拿原創(chuàng)內(nèi)容分享
      29730
      思南 管理員
      文章數(shù):14045
      年度積分:57
      歷史總積分:29730
      注冊(cè)時(shí)間:2001/3/12
      發(fā)站內(nèi)信
      發(fā)表于:2003/8/17 23:10:00
      #1樓
      此樓內(nèi)容不符合板塊規(guī)定,不予顯示! 查看原帖內(nèi)容>>
      29730
      思南 管理員
      文章數(shù):14045
      年度積分:57
      歷史總積分:29730
      注冊(cè)時(shí)間:2001/3/12
      發(fā)站內(nèi)信
      發(fā)表于:2003/8/17 23:12:00
      #2樓
      此樓內(nèi)容不符合板塊規(guī)定,不予顯示! 查看原帖內(nèi)容>>
      29730
      思南 管理員
      文章數(shù):14045
      年度積分:57
      歷史總積分:29730
      注冊(cè)時(shí)間:2001/3/12
      發(fā)站內(nèi)信
      發(fā)表于:2003/8/17 23:13:00
      #3樓
      為了大家方便下載,現(xiàn)在上傳到本地下載,希望喜歡串口通信TAPI電腦MODEM錄音的朋友測(cè)試一下,如果有心得不妨分享一下!

      官方網(wǎng)站:
      http://sourceforge.net/project/showfiles.php?group_id=71007
      本地下載:
      程序以及代碼:
      http://www.kblhh.cn/download/download_view.asp?id=156
      說(shuō)明以及幫助:
      http://www.kblhh.cn/download/download_view.asp?id=155
      圖
      如您對(duì)論壇有好的建議或創(chuàng)想,請(qǐng)加大版主微信號(hào):gkong2015
      大版主推薦【工控百家談】微信公眾號(hào),業(yè)界大拿原創(chuàng)內(nèi)容分享
      892
      leefine
      文章數(shù):14
      年度積分:50
      歷史總積分:892
      注冊(cè)時(shí)間:2002/10/30
      發(fā)站內(nèi)信
      發(fā)表于:2003/9/20 23:12:00
      #4樓
      Thanks! You are welcome!
      957
      bobbie
      文章數(shù):1
      年度積分:50
      歷史總積分:957
      注冊(cè)時(shí)間:2003/9/9
      發(fā)站內(nèi)信
      發(fā)表于:2003/11/5 10:55:00
      #5樓
      思南,我沒(méi)有TApdComPort和TApdTapiDevice這兩個(gè)TAPI控件文件,可否麻煩你傳給我一份

      bobbie.y@163.com,謝謝
      952
      sc_xy
      文章數(shù):1
      年度積分:50
      歷史總積分:952
      注冊(cè)時(shí)間:2003/12/13
      發(fā)站內(nèi)信
      發(fā)表于:2003/12/13 13:28:00
      #6樓
      謝謝
      1009
      karswell
      文章數(shù):14
      年度積分:50
      歷史總積分:1009
      注冊(cè)時(shí)間:2004/7/13
      發(fā)站內(nèi)信
      發(fā)表于:2004/7/13 21:04:00
      #7樓
      非常詳細(xì),真的要感謝你。但是我有一個(gè)問(wèn)題。你的程序可以向外撥號(hào)嗎?如果要向外撥號(hào),那么在建立了連接之后,也就是在接收到modem的結(jié)果碼connect之后,如何判斷對(duì)方是摘機(jī)了,還是沒(méi)摘機(jī),仍然處于回鈴音狀態(tài)。如能指教非常感謝!!!因?yàn)槲乙苍诰幾g個(gè)modem撥號(hào)的程序。
      1009
      karswell
      文章數(shù):14
      年度積分:50
      歷史總積分:1009
      注冊(cè)時(shí)間:2004/7/13
      發(fā)站內(nèi)信
      發(fā)表于:2004/7/18 20:50:00
      #8樓
      思南,你所做的語(yǔ)音撥號(hào)的程序我也在做,但是遇到一個(gè)問(wèn)題,想與你交流。是否每一次用modem進(jìn)行AT指令處理時(shí),應(yīng)該都返回一個(gè)結(jié)果碼吧?為什么我編的程序檢測(cè)不到他的返回碼呢?我是用delphi編的,程序很簡(jiǎn)單,但就是不能得到返回的結(jié)果!
      952
      qwe456
      文章數(shù):1
      年度積分:50
      歷史總積分:952
      注冊(cè)時(shí)間:2004/11/24
      發(fā)站內(nèi)信
      發(fā)表于:2004/11/24 15:36:00
      #9樓
      不能下啊,FTP也不行哦

      關(guān)于我們 | 聯(lián)系我們 | 廣告服務(wù) | 本站動(dòng)態(tài) | 友情鏈接 | 法律聲明 | 非法和不良信息舉報(bào)

      工控網(wǎng)客服熱線:0755-86369299
      版權(quán)所有 工控網(wǎng) Copyright©2025 Gkong.com, All Rights Reserved

      93.6006
      主站蜘蛛池模板: 国产一区二区波多野结衣| 国产对白老熟女正在播放| 在线 欧美 中文 亚洲 精品| 国产目拍亚洲精品二区| 国产免费人成网站在线播放| 亚洲狠狠婷婷综合久久久| 国产午夜精品亚洲精品国产| 被拉到野外强要好爽| 狠狠色狠狠综合久久| 国产av日韩精品一区二区| 亚洲中文字幕一区二区| 成人网站免费观看永久视频下载| 成人精品老熟妇一区二区| 国产超碰无码最新上传| 亚洲av影院一区二区三区| av激情亚洲男人的天堂| 亚洲av男人电影天堂热app| 一本大道久久东京热AV| 中文字幕久久波多野结衣av| 亚洲日本欧洲二区精品| 久久婷婷国产精品香蕉| 激情综合网一区二区三区| 男女xx00上下抽搐动态图| 五月天丁香婷婷亚洲欧洲国产| 亚洲成人av在线资源网| 成人国产精品一区二区网站公司 | 国产精品一二三区视在线| 啊轻点灬大JI巴太粗太长了在线| 国精品午夜福利视频不卡| 亚洲国产成人va在线观看天堂| 亚洲性日韩精品一区二区| 国产乱子伦视频在线播放| 69精品丰满人妻无码视频a片| 香蕉乱码成人久久天堂爱| 人妻一区二区三区三区| 亚洲高请码在线精品av| 国产精品中文第一字幕| 亚洲av产在线精品亚洲第一站| 里番全彩爆乳女教师| 狠狠色综合久久狠狠色综合| 日本视频精品一区二区|