語音交談程式實現(INDY, ACM, DELPHI)

來源:互聯網
上載者:User

 <?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" />

 

聊天程式的設計、實現和介紹

 

 

 

 

 

 

                       

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

                                                            周寶峰

                                                西安交通大學軟體學院 MSE 2002

2005.01

 

 


 

索                   

1.     程式設計... 3

2.     程式使用... 4

2.1 伺服器的使用... 5

2.2 用戶端的使用... 5

3.     參考文獻... 6


 

 

1.   程式設計

程式設計環境:

採用Borland 公司 Delphi 7 企業版在Windows 2000 專業版上開發。

其他設計細節:

 

            TCP 伺服器:

採用TIdTCPServer  <?xml:namespace prefix = v ns = "urn:schemas-microsoft-com:vml" /> 實現.用於文本的互動.

對於每一個用戶端的TCP串連,啟動一個線程處理。結構圖如下:

 

主線程

監聽線程

 

Accept Client 1

Accept Client 1

Accept Client 1

Client1.Thread

Client2.Thread

Client3.Thread

 

 

 

 

 

 

 

 

 

 

 

 

 


線程管理用TIdThreadMgrDefault管理。

 

UDP 伺服器:

採用 INDY 中的 TIdUDPServer  實現。當收到UDP包時,觸發UDPRead 事件,在此進行聲音資料的播放。

     

      UDP用戶端:

採用INDY 中的TIDUDPClient實現。當收集的聲音資料超過緩衝區
大小(2048個位元組)後,調用其SendBuffer方法將資料發出。

 

      聲音的提取:

            採用TACMIN 控制項收集聲音,ACMIN控制項主要也是調用Windows API waveInOpen 函數。函式宣告:

            function waveInOpen; external mmsyst name 'waveInOpen';

            (MMSystem.pas)

聲音編碼:

            預設採用GSM6.10 編碼,詳細編碼支援情況:

GSM 6.10        8kHz, Mono – 預設

                        11.025kHz, Mono

                        22.050kHz, Mono

                        44.100 kHz, Mono

Micorsoft G.723.1        8 kHz Mono, 6400 bit/s

                                    8 kHz Mono, 5333 bit/s

 

PCM    8/11/12/16/22/24/32/44/48 kHz, 8/16/Bit, Mono

MPET Layer –3

56/40/48/32/20/24/12/16/8 kBit/s, 24,000/22,000/16,000/8,000 Hz, Stereo   

            …..

聲音輸出:

            當UDP伺服器收到資料,使用ACMOut 播放。

               

    AData.Read(AudioArray,AData.Size);

 

    if not audioOut.Active then begin

      with m_PlayAudioFormat.Format do begin

        wFormatTag := 1;

        nChannels := 1;

        nSamplesPerSec := 22050;

        nAvgBytesPerSec:= 22050;

        nBlockAlign:=1;

        wbitspersample := 8;

        cbSize := SizeOf(TACMWaveFormat);

      End;

 

      //adioOut.Open(audioConvertor.FormatIn);

      audioOut.Open(m_PlayAudioFormat);

    end;

 

    audioOut.Play(AudioArray, AData.Size);

 

 

 

2.   程式使用

注意:伺服器程式和用戶端程式不可運行在同一機器上(避免聲音播放和收集衝突),一台機器只能同時運行一個伺服器程式或者一個用戶端程式。
伺服器端的記錄檔:CharSvr.log

     用戶端的記錄檔:ClientError.log

 

2.1 伺服器的使用

 

 

2.2 用戶端的使用

 

           

 

            選擇線上的使用者後方可發言。 3.   參考文獻

[1]        Indy in Depth Atozed Software

 

 

 

 

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.