




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
46/46即時(shí)消息系統(tǒng)的設(shè)計(jì)與實(shí)現(xiàn)語(yǔ)音通訊模塊的實(shí)現(xiàn)摘要:3Abstract:3第一章引言41.1論文背景41.2國(guó)外研究現(xiàn)狀與發(fā)展趨勢(shì)51.2.1研究現(xiàn)狀51.2.2發(fā)展趨勢(shì)5第二章關(guān)鍵技術(shù)72.1XMPP協(xié)議72.1.1XMPP協(xié)議簡(jiǎn)介72.1.2XMPP協(xié)議基本網(wǎng)絡(luò)結(jié)構(gòu)72.1.2選擇XMPP協(xié)議的理由72.2網(wǎng)絡(luò)通信協(xié)議82.3Socket網(wǎng)絡(luò)編程92.4音頻捕獲技術(shù)92.5音頻回放技術(shù)92.6音頻采樣技術(shù)102.7音頻壓縮/解壓技術(shù)102.8P2P技術(shù)10第三章語(yǔ)音通訊系統(tǒng)的分析113.1語(yǔ)音通訊系統(tǒng)可行性分析113.2語(yǔ)音通訊系統(tǒng)需求分析113.2.1項(xiàng)目總述123.2.2市場(chǎng)需求分析123.2.3用戶需求分析123.2.4軟件性能要求133.2.5軟件功能需求133.3語(yǔ)音通訊系統(tǒng)流程分析143.4語(yǔ)音通訊系統(tǒng)數(shù)據(jù)流圖15第四章語(yǔ)音通訊系統(tǒng)的設(shè)計(jì)174.1系統(tǒng)結(jié)構(gòu)174.2開發(fā)工具174.3流程設(shè)計(jì)184.4語(yǔ)音通訊系統(tǒng)總體設(shè)計(jì)194.5語(yǔ)音通訊系統(tǒng)詳細(xì)設(shè)計(jì)194.5.1登錄模塊194.5.2建立連接模塊204.5.3音頻捕獲模塊214.5.4音頻回放模塊23第五章語(yǔ)音通訊系統(tǒng)的實(shí)現(xiàn)265.1構(gòu)建語(yǔ)音通訊系統(tǒng)的用戶登錄系統(tǒng)265.2連接建立模塊的實(shí)現(xiàn)265.2.1麥克風(fēng)相關(guān)操作265.2.2建立通信連接285.3音頻捕獲模塊325.3.1確定音頻格式325.3.2建立音頻捕獲對(duì)象并為其分配緩沖區(qū)325.3.3打開錄音設(shè)備335.3.4開始錄音335.3.5音頻壓縮并發(fā)送給遠(yuǎn)程主機(jī)335.3.6結(jié)束錄音345.4音頻回放模塊的實(shí)現(xiàn)355.4.1確定音頻格式355.4.2建立音頻回放對(duì)象355.4.3循環(huán)接收音頻數(shù)據(jù)355.4.4打開回放設(shè)備365.4.5音頻解壓并回放375.4.6結(jié)束回放375.5常用結(jié)構(gòu)體定義與介紹385.5.1WAVEHDR385.5.2WAVEFORMATEX385.6常用winmm.dll方法參數(shù)介紹385.6.1waveOutOpen395.6.2waveInOpen395.6.3waveOutWrite395.6.4waveOutPrepareHeader405.6.5waveInAddBuffer405.7本系統(tǒng)的開發(fā)難點(diǎn)與解決技巧405.7.1通信連接的建立405.7.2語(yǔ)音捕獲、壓縮、解壓、回放415.7.3音量大小的調(diào)節(jié)415.7.4委托、回調(diào)和異步41結(jié)語(yǔ)42參考文獻(xiàn):43致44即時(shí)消息系統(tǒng)的設(shè)計(jì)與實(shí)現(xiàn)語(yǔ)音通訊模塊的實(shí)現(xiàn)永忠西南大學(xué)計(jì)算機(jī)與信息科學(xué)學(xué)院,400715摘要:本論文主要討論了語(yǔ)音通訊系統(tǒng)的研究與實(shí)現(xiàn),筆者在探討即時(shí)通訊系統(tǒng)在國(guó)外研究現(xiàn)狀與發(fā)展趨勢(shì)的基礎(chǔ)上,結(jié)合當(dāng)前計(jì)算機(jī)技術(shù)的發(fā)展情況,選擇使用了Vistudio2005開發(fā)環(huán)境和當(dāng)前比較流行的C#編程語(yǔ)言,結(jié)合語(yǔ)音捕獲和回放相關(guān)知識(shí)和Socket相關(guān)知識(shí)開發(fā)了此語(yǔ)音通訊系統(tǒng)。本系統(tǒng)主要包括連接建立、音頻捕獲、音頻回放三大模塊,實(shí)現(xiàn)了用戶登錄、通信連接建立、音頻數(shù)據(jù)捕獲、數(shù)據(jù)壓縮與發(fā)送、數(shù)據(jù)接收與解壓、音頻數(shù)據(jù)回放等功能,重點(diǎn)介紹了通信連接建立、音頻數(shù)據(jù)捕獲和回放的實(shí)現(xiàn)。在實(shí)現(xiàn)方法上,主要采用面向?qū)ο缶幊袒舅枷?,利用C#編程語(yǔ)言將系統(tǒng)分為接口類、音頻捕獲類、音頻回放類、音頻壓縮與解壓類和異常處理類,再加一個(gè)公用的結(jié)構(gòu)體類進(jìn)行實(shí)現(xiàn),并采用了現(xiàn)代比較流行的XMPP協(xié)議進(jìn)行消息發(fā)送和建立其語(yǔ)音連接,通過Socket技術(shù)實(shí)現(xiàn)最終音頻數(shù)據(jù)的發(fā)送和接收。最后,本論文對(duì)基于C#技術(shù)的語(yǔ)音通訊系統(tǒng)的開發(fā)設(shè)計(jì)進(jìn)行了總結(jié)和展望。關(guān)鍵字:音頻捕獲;音頻回放;音頻數(shù)據(jù)壓縮;XMPP協(xié)議;InstantMessagingSystemDesignandImplementationtheimplementationofAudiocommunicationsmoduleLIUYongzhongComputerandinformationsciencecollegeofSouthwestUniversity,Chongqing400715,ChinaAbstract:Thisthesismainlydiscusstheresearchandimplementationofaudiocommunicationsystem.Basedontheresearchanddevelopmenttrendofinstantmessagingathomeandabroad,combinewiththecurrentcomputertechnology,theauthoruseVisualstudio2005developmentenvironment,C#programminglanguage,audiocaptureandplaybacktechnology,aswellastherelevantknowledgeofSocketdeveloptheaudiocommunicationsystem.Thissystemmainlyintroducethreemodules,includingtheconnectionestablishment,audiocapture,andaudioplayback,aswellasthedetailedimplementationoftheuserlogon,theestablishmentofcommunicationlinks,audiodatacapture,datacompressionandtransmission,datareceptionanddecompression,audiodataplaybackandsoon,focusingontheimplementationoftheestablishmentofcommunicationlinks,audiodatacaptureandplayback.Ontherealization,mainlyusingbasicideaofobject-orientedprogramming,andC#programminglanguagetodividethesystemintosomeclassesasInterface,Audiocaputure,Audioplayback,Audiocompressionanddecompression,Exceptionhandler,andacommontypeofstructure,thenuseXMPPmessagingprotocoltoestablishtheaudioconnections,sendandreceivedataviaSockettechnique.Finally,thethesissummarizeandoutlookthedevelopmentanddesignofC#-basedaudiocommunicationsystems.Keyword:Audiocapture;Audioplayback;Voicedatacompression;Xmppprotocol第一章引言1.1論文背景隨著移動(dòng)互聯(lián)網(wǎng)的發(fā)展,即時(shí)通信技術(shù)也得到飛速的發(fā)展。自1998年面世以來,特別是近幾年的迅速發(fā)展,即時(shí)通信的功能日益豐富,逐漸集成了電子、博客、音樂、電視、游戲和搜索等多種功能。即時(shí)通信不再是一個(gè)單純的聊天工具,它已經(jīng)發(fā)展成集交流、資訊、娛樂、搜索、電子商務(wù)、辦公協(xié)作和企業(yè)客戶服務(wù)等為一體的綜合化信息平臺(tái)。近年來,即時(shí)通信市場(chǎng)用戶規(guī)模增長(zhǎng)迅速,市場(chǎng)規(guī)模前景廣闊。隨著互聯(lián)網(wǎng)用戶的快速增長(zhǎng),即時(shí)通信用戶也日益增長(zhǎng),2004年中國(guó)即時(shí)通信用戶數(shù)達(dá)7000萬(wàn)人,2005年達(dá)到9300萬(wàn)人。中國(guó)即時(shí)通信市場(chǎng)規(guī)模在2005年約為6200萬(wàn)美元,2006年達(dá)到7700萬(wàn)美元,到2010年將達(dá)到1.14億美元。目前在互聯(lián)網(wǎng)上受歡迎的即時(shí)通訊軟件包括、MSNMessenger、AOLInstantMessenger、YahooMessenger、NETMessengerService、ICQ等。在這具大的市場(chǎng)份額的誘惑下,眾多公司都希望在這一領(lǐng)域有所突破,各大門戶紛紛擠入即時(shí)通信市場(chǎng)跑馬圈地;國(guó)的電信運(yùn)營(yíng)商也是虎視眈眈?;诩磿r(shí)通信在現(xiàn)實(shí)生活中廣泛的運(yùn)用場(chǎng)景和發(fā)展趨勢(shì),考慮到其在生活中的實(shí)用性以與現(xiàn)在市場(chǎng)上流行的即時(shí)通信系統(tǒng)的局限性,我們考慮到很多公司其部的交流需求,所以我們開發(fā)了一個(gè)可以在局域網(wǎng)實(shí)現(xiàn)在線交流、文件傳輸、實(shí)時(shí)語(yǔ)音通訊和視屏通訊等功能的一個(gè)即時(shí)通信系統(tǒng)。語(yǔ)音聊天是此即時(shí)通信系統(tǒng)的一個(gè)核心子模塊,它采用現(xiàn)代比較流行的網(wǎng)絡(luò)編程技術(shù),面向各類企事業(yè)部門等局域網(wǎng)用戶,利用即時(shí)通信協(xié)議以與相關(guān)技術(shù)實(shí)現(xiàn)在局域網(wǎng)的實(shí)時(shí)語(yǔ)音聊天,方便部人員進(jìn)行實(shí)時(shí)交流,共同解決工作生活中遇到的困難,為企事業(yè)以與其它的局域網(wǎng)用戶帶來方便。而傳統(tǒng)的一些諸如飛鴿傳書之類的局域網(wǎng)聊天工具雖然實(shí)現(xiàn)了在局域網(wǎng)文字聊天、文件傳送等一系列功能,但其在語(yǔ)音方面卻尚未涉足,給用戶的實(shí)時(shí)交流帶來一定的影響。所以,本系統(tǒng)以現(xiàn)在即時(shí)通信在現(xiàn)實(shí)生活量應(yīng)用為契機(jī),實(shí)現(xiàn)了局域網(wǎng)實(shí)時(shí)語(yǔ)音聊天,為人們的生活、工作,學(xué)習(xí)帶來了極大的便利。1.2國(guó)外研究現(xiàn)狀與發(fā)展趨勢(shì)1.2.1研究現(xiàn)狀即時(shí)通信(IM)是指能夠即時(shí)發(fā)送和接收互聯(lián)網(wǎng)消息等的業(yè)務(wù)。自1998年面世以來,特別是近幾年的迅速發(fā)展,即時(shí)通信的功能日益豐富,逐漸集成了電子、博客、音樂、電視、游戲和搜索等多種功能。即時(shí)通信不再是一個(gè)單純的聊天工具,它已經(jīng)發(fā)展成集交流、資訊、娛樂、搜索、電子商務(wù)、辦公協(xié)作和企業(yè)客戶服務(wù)等為一體的綜合化信息平臺(tái)。隨著移動(dòng)互聯(lián)網(wǎng)的發(fā)展,互聯(lián)網(wǎng)即時(shí)通信也在向移動(dòng)化擴(kuò)。目前,微軟、AOL、Yahoo等重要即時(shí)通信提供商都提供通過手機(jī)接入互聯(lián)網(wǎng)即時(shí)通信的業(yè)務(wù),用戶可以通過手機(jī)與其他已經(jīng)安裝了相應(yīng)客戶端軟件的手機(jī)或電腦收發(fā)消息。2006年6月,中國(guó)移動(dòng)已經(jīng)推出了自己的即時(shí)通信工具——Fetion,中國(guó)聯(lián)通也將推出即時(shí)通訊工具“超信”,但由于進(jìn)入市場(chǎng)較晚,其用戶規(guī)模和品牌知名度還比不上原有的即時(shí)通信服務(wù)提供商。1.2.2發(fā)展趨勢(shì)目前即時(shí)通信行業(yè)仍處于高速發(fā)展期,通過調(diào)查發(fā)現(xiàn),即時(shí)通信在未來的發(fā)展中呈現(xiàn)出整合多種業(yè)務(wù)、擴(kuò)移動(dòng)平臺(tái)、滲透企業(yè)用戶、融入收費(fèi)容的發(fā)展趨勢(shì)。1.整合多種業(yè)務(wù)隨著寬帶的普與,即時(shí)通信的涵也開始變化。與過去的純文本交流不同,新型的即時(shí)通信業(yè)務(wù)融合了視頻、音頻交流等寬帶應(yīng)用元素。目前各種即時(shí)通信除提供了基本的即時(shí)互動(dòng)交流外,還能提供視頻、語(yǔ)音通信服務(wù),在短信收發(fā)、文件共享、數(shù)據(jù)傳輸、游戲、娛樂、個(gè)性化設(shè)置等方面也都有大的開拓和創(chuàng)新。總之,多媒體化是即時(shí)通信未來的發(fā)展方向,未來即時(shí)通信將捆綁更多的互聯(lián)網(wǎng)和電信增值業(yè)務(wù)功能。以騰訊為例,它目前正在大力發(fā)展游戲、音樂、用戶定制等業(yè)務(wù),今后還可能推廣新的通信錄、博客服務(wù)、視頻音頻等服務(wù)。同時(shí),已經(jīng)是個(gè)成熟的容,現(xiàn)在訪問量已經(jīng)排名第四,它會(huì)和客戶端形成一縱一橫互相支持的業(yè)務(wù)模式。2.?dāng)U移動(dòng)平臺(tái)移動(dòng)通信業(yè)務(wù)的迅速發(fā)展使得傳統(tǒng)的互聯(lián)網(wǎng)即時(shí)通信服務(wù)商將移動(dòng)用戶作為下一步市場(chǎng)發(fā)展的重點(diǎn),這在移動(dòng)增值服務(wù)成為即時(shí)通信服務(wù)商收入的主要來源之后體現(xiàn)尤為突出。即時(shí)通信業(yè)務(wù)承載的設(shè)備也趨于多樣化,用戶通過PC、手機(jī)、PDA以與其他設(shè)備等都可以使用即時(shí)通信。MSN和國(guó)的手機(jī)廠商如:多普達(dá)、聯(lián)想等合作,推出自帶即時(shí)通信業(yè)務(wù)的手機(jī);騰訊也推出移動(dòng)的即時(shí)通信服務(wù)。3.滲透企業(yè)用戶即時(shí)通信從個(gè)人通信向企業(yè)綜合通信發(fā)展是其發(fā)展史上的重要一步。隨著企業(yè)信息化建設(shè)步伐的加快,企業(yè)即時(shí)通信工具(EIM)也將作為聯(lián)系和溝通的方式被有針對(duì)性地應(yīng)用在企業(yè)的日常生產(chǎn)中,作為企業(yè)外溝通方式之一。企業(yè)即時(shí)通信應(yīng)用包括綜合信息服務(wù)、部即時(shí)通信、在線客戶支持服務(wù)、在線呼叫、在線廣告等。2003年全球企業(yè)即時(shí)通信市場(chǎng)收入1.19億美元,隨著企業(yè)對(duì)EIM的了解日益加深,這個(gè)數(shù)字會(huì)繼續(xù)增長(zhǎng)。據(jù)預(yù)測(cè),全球的即時(shí)通信服務(wù)用戶到2007年將增長(zhǎng)至14.39億戶,其中企業(yè)用戶數(shù)量將成倍增長(zhǎng),到2007年將增至3.49億戶。另?yè)?jù)Gartner的調(diào)查數(shù)字顯示,2004年在所有使用即時(shí)通信的用戶中,有約50%是商業(yè)用戶。4.融入收費(fèi)容在互聯(lián)網(wǎng)這個(gè)以免費(fèi)、自由、互通為生存法則的世界里,即時(shí)通信從一個(gè)免費(fèi)聊天工具不斷生長(zhǎng)壯大,吸引聚集了一些忠誠(chéng)用戶。在此基礎(chǔ)上,開始搭建網(wǎng)絡(luò)廣告、無線增值等一系列各種潛在的交易平臺(tái),增加了收費(fèi)的容。未來即時(shí)通信行業(yè)的盈利點(diǎn)在互聯(lián)網(wǎng)與增值業(yè)務(wù)、移動(dòng)與固網(wǎng)增值業(yè)務(wù)、廣告業(yè)務(wù)三個(gè)方面。其中,互聯(lián)網(wǎng)與增值業(yè)務(wù)包括兩部分,核心業(yè)務(wù)主要是即時(shí)通信服務(wù),包括傳輸文本信息、圖像、視頻、音頻以與會(huì)員服務(wù)、服務(wù)、電子等;另外還有娛樂資訊門戶的建設(shè),包括向用戶提供新聞、體育、娛樂等多類資訊,還包括游戲中心、交友中心、校友錄、電子賀卡等多種娛樂服務(wù)。而移動(dòng)與固網(wǎng)增值業(yè)務(wù)則主要是短信互通和部分2.5G產(chǎn)品,如彩信、彩鈴下載和自寫短信、短信訂閱、新聞等多種服務(wù)。也就是說,當(dāng)用戶通過手機(jī)短信與即時(shí)通信軟件上的好友聊天,下載或訂閱短信、彩信等產(chǎn)品時(shí),通過電信運(yùn)營(yíng)商的平臺(tái)付費(fèi),電信運(yùn)營(yíng)商收到費(fèi)用之后再與SP結(jié)算分成。第二章關(guān)鍵技術(shù)語(yǔ)音實(shí)時(shí)通訊涉與到很多方面的技術(shù),在開發(fā)的過程中受到諸多方面的制約,在本系統(tǒng)的實(shí)現(xiàn)過程中主要運(yùn)用的關(guān)鍵技術(shù)有:2.1XMPP協(xié)議2.1.1XMPP協(xié)議簡(jiǎn)介XMPP(ExtensibleMessageingandPresenceProtocol:可擴(kuò)展消息與存在協(xié)議)的前身是Jabber,一個(gè)開源形式組織產(chǎn)生的網(wǎng)絡(luò)即時(shí)通信協(xié)議。XMPP目前被IETF國(guó)際標(biāo)準(zhǔn)組織完成了標(biāo)準(zhǔn)化工作。標(biāo)準(zhǔn)化的核心結(jié)果分為兩部分:核心的XML流傳輸協(xié)議和基于XML流傳輸?shù)募磿r(shí)通訊擴(kuò)展應(yīng)用。(1)XMPP的核心XML流傳輸協(xié)議的定義使得XMPP能夠在一個(gè)比以往網(wǎng)絡(luò)通信協(xié)議更規(guī)的平臺(tái)上。借助于XML易于解析和閱讀的特性,使得XMPP的協(xié)議能夠非常漂亮地完成相關(guān)工作。(2)XMPP的即時(shí)通訊擴(kuò)展應(yīng)用部分是根據(jù)IETF在這之前對(duì)即時(shí)通訊的一個(gè)抽象定義的,與其他業(yè)已得到廣泛使用的即時(shí)通訊協(xié)議,諸如AIM,等有功能完整、完善等先進(jìn)性。2.1.2XMPP協(xié)議基本網(wǎng)絡(luò)結(jié)構(gòu)XMPP中定義了三個(gè)角色,客戶端,服務(wù)器,網(wǎng)關(guān)。通信能夠在這三者的任意兩個(gè)之間雙向發(fā)生。服務(wù)器同時(shí)承擔(dān)了客戶端信息記錄,連接管理和信息的路由功能。網(wǎng)關(guān)承擔(dān)著與異構(gòu)即時(shí)通信系統(tǒng)的互聯(lián)互通,異構(gòu)系統(tǒng)可以包括SMS(短信),MSN,ICQ等?;镜木W(wǎng)絡(luò)形式是單客戶端通過TCP/IP連接到單服務(wù)器,然后在之上傳輸XML。2.1.2選擇XMPP協(xié)議的理由XMPP是目前主流的四種IM(IM:instantmessaging,即時(shí)消息)協(xié)議之一,其他三種分別為:即時(shí)信息和空間協(xié)議(IMPP)、空間和即時(shí)信息協(xié)議(PRIM)、針對(duì)即時(shí)通訊和空間平衡擴(kuò)充的進(jìn)程開始協(xié)議SIP(SIMPLE)。在這四種協(xié)議中,XMPP是最靈活的。XMPP用傳送與即時(shí)通訊相關(guān)的指令是用TCP傳XML流,在以前這些命令要么用2進(jìn)制的形式發(fā)送(比如),要么用純文本指令加空格加參數(shù)加換行苻的方式發(fā)送(比如MSN)。而XMPP傳輸?shù)募磿r(shí)通訊指令的邏輯與以往相仿,只是協(xié)議的形式變成了XML格式的純文本。這不但使得解析容易了,人也容易閱讀了,方便了開發(fā)和查錯(cuò)。XMPP是一種基于XML的協(xié)議,它繼承了在XML環(huán)境中靈活的發(fā)展性。因此,基于XMPP的應(yīng)用具有超強(qiáng)的可擴(kuò)展性。經(jīng)過擴(kuò)展以后的XMPP可以通過發(fā)送擴(kuò)展的信息來處理用戶的需求,以與在XMPP的頂端建立如容發(fā)布系統(tǒng)和基于地址的服務(wù)等應(yīng)用程序。而且,XMPP包含了針對(duì)服務(wù)器端的軟件協(xié)議,使之能與另一個(gè)進(jìn)行通話,這使得開發(fā)者更容易建立客戶應(yīng)用程序或給一個(gè)配好系統(tǒng)添加功能。這一切也是筆者選擇此協(xié)議的原因。2.2網(wǎng)絡(luò)通信協(xié)議網(wǎng)絡(luò)中不同的工作站,服務(wù)器之間能傳輸數(shù)據(jù),源于協(xié)議的存在。隨著網(wǎng)絡(luò)的發(fā)展,不同的開發(fā)商開發(fā)了不同的通信方式。為了使通信成功可靠,網(wǎng)絡(luò)中的所有主機(jī)都必須使用同一語(yǔ)言,不能帶有方言,因而必須開發(fā)嚴(yán)格的標(biāo)準(zhǔn)定義主機(jī)之間的每個(gè)包中每個(gè)字中的每一位。這些標(biāo)準(zhǔn)來自于多個(gè)組織的努力,約定好通用的通信方式,即協(xié)議。TCP/IP協(xié)議是目前在網(wǎng)絡(luò)中應(yīng)用得最廣泛的協(xié)議,TCP/IP實(shí)際上是一個(gè)關(guān)于Internet的標(biāo)準(zhǔn),并隨著的Internet廣泛應(yīng)用而風(fēng)靡全球,它也成為局域網(wǎng)的首選協(xié)議。TCP/IP協(xié)議中的核心協(xié)議有TCP(傳輸控制協(xié)議)、UDP(用戶數(shù)據(jù)報(bào)協(xié)議)和IP(因特網(wǎng)協(xié)議)。TCP協(xié)議可以在網(wǎng)絡(luò)用戶啟動(dòng)的軟件應(yīng)用進(jìn)程之間建立通信會(huì)話,并實(shí)現(xiàn)數(shù)據(jù)流量控制和錯(cuò)誤檢測(cè),這樣就可以在不可靠的網(wǎng)絡(luò)上提供可靠的端到端數(shù)據(jù)傳輸。UDP協(xié)議是一種無連接的協(xié)議,它在傳輸數(shù)據(jù)之前不建立連接,也不提供良好的可靠性和差錯(cuò)檢查,只僅僅依賴于校驗(yàn)來保證可靠性。UDP不進(jìn)行流量控制,沒有序列或者確認(rèn),因此它處理和傳輸數(shù)據(jù)的速度快,還被用來傳輸關(guān)鍵的網(wǎng)絡(luò)狀態(tài)消息。IP協(xié)議的基本功能是提供數(shù)據(jù)傳輸、數(shù)據(jù)包編址、數(shù)據(jù)包路由,分段等。通過IP編址約定,可以成功地將數(shù)據(jù)通過路由傳輸?shù)秸_的網(wǎng)絡(luò)或者子網(wǎng)。每個(gè)網(wǎng)絡(luò)站點(diǎn)具有一個(gè)32位的IP地址,它和48位MAC地址一起協(xié)作,完成網(wǎng)絡(luò)通信,IP協(xié)議也是一種無連接的協(xié)議。因?yàn)榭紤]到語(yǔ)音數(shù)據(jù)音比較大(與你的采樣頻率密切相關(guān)),而且丟失一小部分?jǐn)?shù)據(jù)并不會(huì)影響雙方進(jìn)行正常通訊,所以本系統(tǒng)中的語(yǔ)音通訊模塊采用了無連接、不可靠、沒有流量控制但處理和傳輸數(shù)據(jù)的速度快的UDP進(jìn)行實(shí)現(xiàn)。2.3Socket網(wǎng)絡(luò)編程利用Socket編程實(shí)現(xiàn)典型的網(wǎng)絡(luò)通信程序,特別是在實(shí)時(shí)性要求比較高的項(xiàng)目中,Winsock編程方法是非常實(shí)用的。在此必須了解怎樣建立一個(gè)Socket,并怎樣用用Socket建立兩臺(tái)計(jì)算機(jī)之間的連接,最終實(shí)現(xiàn)兩臺(tái)計(jì)算機(jī)之間的數(shù)據(jù)傳送等一系列問題。2.4音頻捕獲技術(shù)語(yǔ)音通訊最先要解決的就是怎樣捕獲說話者從麥克風(fēng)中傳進(jìn)來的語(yǔ)音,本系統(tǒng)中主要是采用Windows多媒體相關(guān)應(yīng)用程序接口winmm.dll中所提供的一系列系統(tǒng)函數(shù)進(jìn)行音頻捕獲。其中主要運(yùn)用的函數(shù)有:waveInOpen為錄音而打開一個(gè)波形輸入設(shè)備(即得到一個(gè)麥克風(fēng)句柄)。waveInPrepareHeader為波形輸入設(shè)備準(zhǔn)備一個(gè)輸入緩沖區(qū)。waveInAddBuffer向波形輸入設(shè)備添加一個(gè)輸入緩沖區(qū)。waveInStart啟動(dòng)在指定的波形輸入設(shè)備的輸入,開始錄音。waveInUnprepareHeader清除緩存。waveInClose關(guān)閉設(shè)備,停止錄音。2.5音頻回放技術(shù)當(dāng)本面接收到遠(yuǎn)程主機(jī)捕獲發(fā)送過來的音頻數(shù)據(jù)后,還必須經(jīng)過回放,才能將音頻數(shù)據(jù)從音響中播放出來,從而達(dá)到語(yǔ)音通訊的目的。本系統(tǒng)中主要是采用Windows多媒體相關(guān)應(yīng)用程序接口winmm.dll中所提供的一系列函數(shù)進(jìn)行音頻回放。其中主要運(yùn)用的函數(shù)有:waveOutOpen打開回放設(shè)備,并得到其句柄。waveOutPrepareHeader為回放設(shè)備準(zhǔn)備一個(gè)波形緩沖區(qū)(存塊)。waveOutWrite向指定的波形輸出設(shè)備發(fā)送一個(gè)數(shù)據(jù)塊。waveOutRest停止放音。waveOutClose關(guān)閉回放設(shè)備。2.6音頻采樣技術(shù)由于計(jì)算機(jī)只能處理離散的二進(jìn)制信息,而人的語(yǔ)音又是連續(xù)的模擬信號(hào),所以我們必須通過采樣把模擬信號(hào)轉(zhuǎn)換成離散信號(hào)。實(shí)現(xiàn)這個(gè)步驟使用的設(shè)備是模/數(shù)轉(zhuǎn)換器(A/D),它以每秒上萬(wàn)次的速率對(duì)聲波進(jìn)行采樣,每一次采樣都記錄下了原始模擬聲波在某一時(shí)刻的狀態(tài),稱之為樣本。將一串的樣本連接起來,就可以描述一段聲波了。把每一秒鐘所采樣的數(shù)目稱為采樣頻率或采率,單位為HZ(赫茲)。采樣頻率越高所能描述的聲波頻率就越高。采樣位數(shù)可以理解為采集卡處理聲音的解析度。這個(gè)數(shù)值越大,解析度就越高,錄制和回放的聲音就越真實(shí)。本系統(tǒng)中采用PCM(脈沖編碼調(diào)制)進(jìn)行模/數(shù)轉(zhuǎn)換,樣頻率采用8000HZ,采樣位數(shù)采用16位。2.7音頻壓縮/解壓技術(shù)為了保證語(yǔ)音不失真,必須保證達(dá)到一定的采樣頻率(當(dāng)然也不能過高)和一定的采樣位數(shù)。這樣,音頻數(shù)據(jù)量將非常大,若不加以壓縮而直接傳輸,很可能會(huì)導(dǎo)致網(wǎng)絡(luò)阻塞、數(shù)據(jù)大量丟失等情況,所以必須采用適當(dāng)?shù)募夹g(shù)對(duì)采樣到的數(shù)據(jù)進(jìn)行壓縮再進(jìn)行傳送,在接收端得到數(shù)據(jù)后再經(jīng)過解壓還原得到原來的音頻數(shù)據(jù)。本系統(tǒng)主要采用了G729.dll中包含的壓縮與解壓算法對(duì)音頻數(shù)據(jù)進(jìn)行壓縮、解壓。2.8P2P技術(shù)P2P就是點(diǎn)對(duì)點(diǎn)。當(dāng)在兩臺(tái)主機(jī)之間語(yǔ)音通訊連接已經(jīng)建立后,就不需要再用到服務(wù)器了。因?yàn)檎Z(yǔ)音數(shù)據(jù)不會(huì)再經(jīng)過服務(wù)器傳送到另一臺(tái)主機(jī)上去,這樣既消耗服務(wù)器的資源,又增加了數(shù)據(jù)的傳送時(shí)間。所以,在連接建立之后,兩臺(tái)主機(jī)之間就進(jìn)行數(shù)據(jù)的點(diǎn)對(duì)點(diǎn)傳輸,既節(jié)省資源,又加快了數(shù)據(jù)的傳輸速度。第三章語(yǔ)音通訊系統(tǒng)的分析3.1語(yǔ)音通訊系統(tǒng)可行性分析1.技術(shù)可行性分析對(duì)于當(dāng)前的語(yǔ)音通訊系統(tǒng),在技術(shù)上有很大的選擇,但其根本都會(huì)用到網(wǎng)絡(luò)編程的基本知識(shí)。根據(jù)對(duì)目前比較流行的編程語(yǔ)言以與通信協(xié)議的比較,筆者在技術(shù)上選擇Visualstudio2005作為IDE,以VisualC#作為編程語(yǔ)言,結(jié)合網(wǎng)絡(luò)編程技術(shù)以與XMPP即時(shí)通信協(xié)議進(jìn)行此次開發(fā)。Visualstudio2005的集成性與功能強(qiáng)大性、VisualC#的便捷性與靈活性、XMPP協(xié)議的可擴(kuò)展性和對(duì)網(wǎng)絡(luò)編程的支持性保證了本次系統(tǒng)開發(fā)在技術(shù)上的可行性。2.經(jīng)濟(jì)可行性分析從論文背景中可知,隨著互聯(lián)網(wǎng)用戶的快速增長(zhǎng),即時(shí)通信用戶也日益增長(zhǎng),2004年中國(guó)即時(shí)通信用戶數(shù)達(dá)7000萬(wàn)人,2005年達(dá)到9300萬(wàn)人。中國(guó)即時(shí)通信市場(chǎng)規(guī)模在2005年約為6200萬(wàn)美元,2006年達(dá)到7700萬(wàn)美元,到2010年將達(dá)到1.14億美元。即時(shí)通信的市場(chǎng)需非常大的,而系統(tǒng)采用小團(tuán)隊(duì)方式開發(fā)在局域網(wǎng)的即時(shí)通信系統(tǒng),在局域網(wǎng)實(shí)現(xiàn)在線交流、文件傳輸、實(shí)時(shí)語(yǔ)音通訊和視屏通訊等功能。面向各類企事業(yè)部門等局域網(wǎng)用戶,利用網(wǎng)絡(luò)實(shí)現(xiàn)在局域網(wǎng)的實(shí)時(shí)語(yǔ)音聊天,方便部人員進(jìn)行實(shí)時(shí)交流,共同解決工作生活中遇到的困難,為企事業(yè)以與其它的局域網(wǎng)用戶帶來方便。研發(fā)成功后即可在企事業(yè)以與其它局域網(wǎng)用戶中得到普遍運(yùn)用,而相對(duì)來說研發(fā)成本就比較低。而且此系統(tǒng)的運(yùn)行環(huán)境即局域網(wǎng)的組建也比較簡(jiǎn)單,費(fèi)用也較低,所以運(yùn)行環(huán)境的配置費(fèi)用比較低,可以獲得廣泛的運(yùn)用。所以其帶來的經(jīng)濟(jì)效益遠(yuǎn)遠(yuǎn)超過開發(fā)成本,在經(jīng)濟(jì)上也具有可行性。3.操作可行性分析通過對(duì)周邊人群的調(diào)查顯示,決大部分人現(xiàn)在都在使用即時(shí)通信工具,本語(yǔ)音通訊系統(tǒng)采用與現(xiàn)代比較流行的即時(shí)通信工具相似的操作方式,在用戶發(fā)出請(qǐng)求并經(jīng)對(duì)方同意后,方可進(jìn)行語(yǔ)音聊天,并且在聊天過程中可以隨意調(diào)整音量大小,也可以隨時(shí)結(jié)束語(yǔ)音通訊,這種操作方式合乎人們生活習(xí)慣,也具有可行性。3.2語(yǔ)音通訊系統(tǒng)需求分析3.2.1項(xiàng)目總述隨著互聯(lián)網(wǎng)技術(shù)的發(fā)展,網(wǎng)上辦公、網(wǎng)上購(gòu)物、網(wǎng)上交友等正在以飛快的速度走進(jìn)大眾的生活中,人們可以在網(wǎng)上做在現(xiàn)實(shí)生活中做的很多事情,而現(xiàn)實(shí)生活中最重要的一件事情就是交流,人與人的交流莫過于口頭直接進(jìn)行交流最為直觀最為快捷。在這個(gè)“互聯(lián)網(wǎng)世界”的今天,為了方便部人員進(jìn)行實(shí)時(shí)交流,共同解決工作生活中遇到的困難,為企事業(yè)以與其它的局域網(wǎng)用戶帶來方便;為了解決以前人們通過計(jì)算機(jī)只能用文字進(jìn)行交流的局限性,實(shí)時(shí)語(yǔ)音通訊已經(jīng)成為現(xiàn)實(shí)生活中不可缺少的一部分。實(shí)現(xiàn)在局域網(wǎng)語(yǔ)音實(shí)時(shí)聊天,是人們?cè)诨ヂ?lián)網(wǎng)上便利生活、工作,學(xué)習(xí)的基礎(chǔ)。語(yǔ)音聊天是此即時(shí)通信系統(tǒng)的一個(gè)核心子模塊,它采用現(xiàn)代比較流行的網(wǎng)絡(luò)編程技術(shù),面向各類企事業(yè)部門等局域網(wǎng)用戶,實(shí)現(xiàn)實(shí)時(shí)語(yǔ)音捕獲,音頻數(shù)據(jù)壓縮與發(fā)送,音頻數(shù)據(jù)接收與回放等功能,從而達(dá)到了實(shí)時(shí)語(yǔ)音通訊的目的,方便部人員進(jìn)行實(shí)時(shí)交流,共同解決工作生活中遇到的困難,為企事業(yè)以與其它的局域網(wǎng)用戶帶來方便。3.2.2市場(chǎng)需求分析近年來,即時(shí)通信市場(chǎng)用戶規(guī)模增長(zhǎng)迅速,市場(chǎng)規(guī)模前景廣闊。隨著互聯(lián)網(wǎng)用戶的快速增長(zhǎng),即時(shí)通信用戶也日益增長(zhǎng),2004年中國(guó)即時(shí)通信用戶數(shù)達(dá)7000萬(wàn)人,2005年達(dá)到9300萬(wàn)人。2006年中國(guó)即時(shí)通信用戶增長(zhǎng)29%,達(dá)到1.2億人。另外,iResearch根據(jù)MorganStanley發(fā)表的研究數(shù)字整理發(fā)現(xiàn),中國(guó)即時(shí)通信市場(chǎng)規(guī)模在2005年約為6200萬(wàn)美元,在2006年達(dá)到7700萬(wàn)美元,到2010年將達(dá)到1.14億美元。移動(dòng)即時(shí)通信市場(chǎng)有著更加巨大的成長(zhǎng)空間和誘惑力。據(jù)iResearch2006年5月發(fā)布的調(diào)查報(bào)告顯示,2005年我國(guó)移動(dòng)即時(shí)通信的用戶已達(dá)到500萬(wàn);而在2006年,我國(guó)移動(dòng)即時(shí)通信注冊(cè)用戶量達(dá)到700萬(wàn);未來幾年移動(dòng)即時(shí)通信用戶規(guī)模將呈現(xiàn)快速增長(zhǎng),預(yù)計(jì)到2010年中國(guó)移動(dòng)即時(shí)通信用戶將達(dá)到2000萬(wàn)人。上面這些數(shù)字表明,即時(shí)通信系統(tǒng)的市場(chǎng)需求量是非常大的,而語(yǔ)音作為即時(shí)通信的一個(gè)核心模塊,也將廣泛的應(yīng)用。而且隨著企事業(yè)單位以與其它局域網(wǎng)用戶對(duì)語(yǔ)音通信的使用,其市場(chǎng)將越來越大,對(duì)其的需求也將隨之增大。3.2.3用戶需求分析在本系統(tǒng)中主要采用問卷調(diào)查以與與當(dāng)前比較流行的即時(shí)通信系統(tǒng)(如)作比較而得到用戶對(duì)語(yǔ)音通信的一些基本要求:一是速度要快(也就是要實(shí)時(shí)),二是質(zhì)量要好(不能出現(xiàn)太大的雜音而影響正常通信),三是應(yīng)該能在通信過程中動(dòng)態(tài)調(diào)節(jié)音量的大小,并能進(jìn)行靜音操作等。3.2.4軟件性能要求實(shí)時(shí)語(yǔ)音通訊系統(tǒng)的兩大性能要求就是速度和質(zhì)量。在速度上不能出現(xiàn)太大的延遲,因?yàn)檠舆t太大可能會(huì)丟失很大一部分用戶,另外就是質(zhì)量上的要求,語(yǔ)音通訊質(zhì)量是一個(gè)與速度一樣重要的問題,在通信過程中不能出現(xiàn)太大的雜音,也不能出現(xiàn)語(yǔ)音失真的現(xiàn)象。3.2.5軟件功能需求圖3-1語(yǔ)音通訊系統(tǒng)用例圖F圖3-1語(yǔ)音通訊系統(tǒng)用例圖Fig.3-1:TheUseCasediagramofAudiocommunicationsystem(1)請(qǐng)求方:可以把其看成是一個(gè)人,也可以看作是一臺(tái)主機(jī)。請(qǐng)求方最先發(fā)出語(yǔ)音通訊請(qǐng)求,然后等待接收方的處理反饋信息,只有在接收方同意之后才能進(jìn)行相關(guān)的語(yǔ)音通訊準(zhǔn)備工作,進(jìn)而進(jìn)行語(yǔ)音聊天,最后可以點(diǎn)擊“結(jié)束”按鈕結(jié)束語(yǔ)音通訊。(2)服務(wù)器:一臺(tái)主機(jī)。其中轉(zhuǎn)請(qǐng)求方發(fā)送過來的請(qǐng)求消息給接收方,在接收方進(jìn)行處理之后,再將其反饋信息中轉(zhuǎn)給請(qǐng)求方。在連接建立完成之后,通信雙方進(jìn)行點(diǎn)表3-1:各個(gè)角色相關(guān)的功能Table.3-1Variousrole-relatedfunctions編號(hào)名稱描述主要路徑前置條件1請(qǐng)求方發(fā)出請(qǐng)求雙方要想進(jìn)行語(yǔ)音通請(qǐng)求方必須先發(fā)出請(qǐng)求點(diǎn)擊發(fā)送請(qǐng)求按鈕->據(jù)對(duì)方IP發(fā)發(fā)送請(qǐng)求聊天窗口已經(jīng)打開2請(qǐng)求方處理反饋信息當(dāng)請(qǐng)求方發(fā)出的請(qǐng)求經(jīng)對(duì)方處理之后,根據(jù)其反饋信息進(jìn)行相應(yīng)操作接收反饋信息->根據(jù)對(duì)方反饋信息類型進(jìn)行處理收到對(duì)方反饋信息3請(qǐng)求方語(yǔ)音通訊準(zhǔn)備接受請(qǐng)求方的請(qǐng)求后,自己應(yīng)完成語(yǔ)音通訊相應(yīng)的準(zhǔn)備工作建立音頻捕獲/回放對(duì)象->開始音頻捕獲與回放對(duì)方接受請(qǐng)求4結(jié)束語(yǔ)音通訊當(dāng)請(qǐng)求方/被請(qǐng)求方點(diǎn)擊“結(jié)束”按鈕即可結(jié)束本次語(yǔ)音通信點(diǎn)擊結(jié)束按鈕->發(fā)送結(jié)束的消息給對(duì)方->關(guān)閉設(shè)備,結(jié)束通信正常的語(yǔ)音通信中5服務(wù)器中轉(zhuǎn)信息當(dāng)服務(wù)器接收到通信雙方傳給另外一方的消息時(shí),進(jìn)行消息轉(zhuǎn)發(fā)給對(duì)方接收客戶端發(fā)送來的消息->根據(jù)其中包含的ID進(jìn)行消息轉(zhuǎn)發(fā)客戶端發(fā)送了消息6服務(wù)器查找用戶服務(wù)器在進(jìn)行消息轉(zhuǎn)發(fā)時(shí),會(huì)根據(jù)其ID查找到此條消息應(yīng)該發(fā)送給誰(shuí)在所有的在線用戶中進(jìn)行查找ID與接收此消息ID一樣的人即可有消息通過服務(wù)器7被請(qǐng)求方處理請(qǐng)求接收到請(qǐng)求方的請(qǐng)求后要進(jìn)行相應(yīng)的處理,并將處理結(jié)果反饋對(duì)請(qǐng)求方接收對(duì)方的請(qǐng)求->進(jìn)行相應(yīng)的處理->信息反饋被請(qǐng)求方收到請(qǐng)求8被請(qǐng)求方語(yǔ)音通訊準(zhǔn)備接受請(qǐng)求方的請(qǐng)求后,自己應(yīng)完成語(yǔ)音通訊相應(yīng)的準(zhǔn)備工作建立音頻捕獲/回放對(duì)象->開始音頻捕獲與回放接受對(duì)方請(qǐng)求對(duì)點(diǎn)通信,將不再使用服務(wù)器。(3)接收請(qǐng)求方:當(dāng)對(duì)方發(fā)出請(qǐng)求后,接收請(qǐng)求方可以進(jìn)行“接受”或者“拒絕”處理,并將其處理反饋信息回發(fā)給請(qǐng)求方。若此處點(diǎn)擊“接受”則還要進(jìn)行相應(yīng)的語(yǔ)音通訊工作然后開始正常語(yǔ)音通訊,最后可以點(diǎn)擊“結(jié)束”按鈕結(jié)束語(yǔ)音通訊。3.3語(yǔ)音通訊系統(tǒng)流程分析語(yǔ)音通訊是即時(shí)通信系統(tǒng)中的一個(gè)核心模塊,是實(shí)現(xiàn)人們即時(shí)交流的重要工具,而傳統(tǒng)的一些諸如飛鴿傳書之類的局域網(wǎng)聊天工具雖然實(shí)現(xiàn)了在局域網(wǎng)文字聊天、文件傳送等一系列功能,但其在語(yǔ)音方面卻尚未涉足,給用戶的實(shí)時(shí)交流帶來一定的影響。所以,本系統(tǒng)以即時(shí)通信在現(xiàn)實(shí)生活量應(yīng)用為契機(jī),實(shí)現(xiàn)了局域網(wǎng)兩臺(tái)臺(tái)主機(jī)實(shí)時(shí)語(yǔ)音聊天。只要其中任意一個(gè)用戶發(fā)出語(yǔ)音聊天的請(qǐng)求,對(duì)方就會(huì)接收到一個(gè)請(qǐng)求,若同意之后雙方就可以進(jìn)行隨意的語(yǔ)音聊天了,并且在聊天過程中可以設(shè)置音量的大小,最后點(diǎn)擊結(jié)束鍵結(jié)束語(yǔ)音聊天。首先對(duì)語(yǔ)音通訊流程進(jìn)行分析,流程分析是整個(gè)系統(tǒng)的基礎(chǔ),它給出了語(yǔ)音是怎樣從一臺(tái)主機(jī)捕獲并發(fā)送到另一臺(tái)機(jī)的整個(gè)過程。一般語(yǔ)音通訊系統(tǒng)應(yīng)該包括:建立連接,音頻捕獲,音頻發(fā)送(包括音頻壓縮),音頻接收,音頻回放(包括音頻解壓)五個(gè)部分。其基本流程為:建立連接→打開麥克風(fēng)→捕獲音頻→音頻壓縮→音頻傳送→音頻接收→音頻解壓→音頻回放。3.4語(yǔ)音通訊系統(tǒng)數(shù)據(jù)流圖本語(yǔ)音通訊系統(tǒng)主要是是實(shí)現(xiàn)在局域網(wǎng)的實(shí)時(shí)語(yǔ)音聊天,需要一臺(tái)主機(jī)充當(dāng)服務(wù)器,另外的計(jì)算機(jī)連接到這臺(tái)服務(wù)器上。當(dāng)通信雙方中的一方給對(duì)方發(fā)出語(yǔ)音聊天請(qǐng)求后,服務(wù)器進(jìn)行轉(zhuǎn)發(fā)最后雙方建立通信連接。在雙方通信連接建立后就可以在兩臺(tái)計(jì)算機(jī)之間進(jìn)行點(diǎn)對(duì)點(diǎn)音頻數(shù)據(jù)傳輸。本地主機(jī)捕獲音頻設(shè)備中的音頻數(shù)據(jù),并經(jīng)過壓縮然后發(fā)送給對(duì)方,在對(duì)方接收到此音頻數(shù)據(jù)之后經(jīng)解壓回放。具體數(shù)據(jù)流走向是:一方(A方)發(fā)出請(qǐng)求經(jīng)過服務(wù)器轉(zhuǎn)發(fā)到另一方(B方),經(jīng)過B方對(duì)A方提出的請(qǐng)求進(jìn)行處理,然后將其反饋消息返回給A方(此處假設(shè)B方選擇了接受),則A方將得到對(duì)方的IP地址并打開自己語(yǔ)音設(shè)備開始進(jìn)行音頻捕獲、壓縮并發(fā)送,而B方在進(jìn)行音頻捕獲的同時(shí)進(jìn)行音頻接收、解壓與回放。所以可以得到頂層數(shù)據(jù)流圖見圖3-2:圖3-2:頂層數(shù)據(jù)流圖Fig.3-2TheTop-levelDFD在上面頂層數(shù)據(jù)流圖中,有處理語(yǔ)音請(qǐng)求、捕獲音頻與發(fā)送、音頻接收與回放三大處理,這三個(gè)處理分別表示:1.處理語(yǔ)音請(qǐng)求:請(qǐng)求方提出的語(yǔ)音聊天請(qǐng)求,經(jīng)服務(wù)器進(jìn)行轉(zhuǎn)發(fā)給對(duì)方,然后經(jīng)過對(duì)方的處理再通過服務(wù)器將其反饋消息轉(zhuǎn)發(fā)到請(qǐng)求方,請(qǐng)求方根據(jù)對(duì)方的應(yīng)答消息完成相應(yīng)的動(dòng)作,若對(duì)方是接受了此語(yǔ)音請(qǐng)求,則將此應(yīng)答消息發(fā)送給音頻捕獲與發(fā)送處理開始此次語(yǔ)音通信。2.捕獲音頻與發(fā)送:當(dāng)請(qǐng)求方接收到對(duì)方“接受”語(yǔ)音請(qǐng)求的應(yīng)答消息后,就會(huì)打開自己的音頻設(shè)備啟動(dòng)音頻捕獲處理,并將捕獲到的音頻數(shù)據(jù)進(jìn)行壓縮處理之后發(fā)送給對(duì)方。在發(fā)送給對(duì)方的過程中會(huì)用到處理語(yǔ)音請(qǐng)求過程中所得到的對(duì)方的IP地址。3.音頻接收與回放:當(dāng)對(duì)方(B)收到A方傳過來的音頻數(shù)據(jù)后,首先其會(huì)通過解壓處理而得到最初的音頻數(shù)據(jù)然后在接收方的音頻設(shè)備中進(jìn)行回放。根據(jù)以上分析與頂層數(shù)據(jù)流圖可得細(xì)化數(shù)據(jù)流圖見圖3-3:圖3-3:細(xì)化數(shù)據(jù)流圖Fig.3-3ThedetailedDFD第四章語(yǔ)音通訊系統(tǒng)的設(shè)計(jì)4.1系統(tǒng)結(jié)構(gòu)即時(shí)通信系統(tǒng)采用C/S結(jié)構(gòu)模式,即:服務(wù)器/客戶端模式。但語(yǔ)音通訊模塊只是依靠服務(wù)器進(jìn)行兩個(gè)客戶端連接的建立,當(dāng)兩個(gè)客戶端的連接建立以后,將不使用服務(wù)器,而是采用P2P模式進(jìn)行通信。因?yàn)檎Z(yǔ)音數(shù)據(jù)不會(huì)再經(jīng)過服務(wù)器傳送到另一臺(tái)主機(jī)上去,這樣既消耗服務(wù)器的資源,又增加了數(shù)據(jù)的傳送時(shí)間。所以,采用這種結(jié)構(gòu),兩臺(tái)主機(jī)之間就進(jìn)行數(shù)據(jù)的點(diǎn)對(duì)點(diǎn)傳輸,既節(jié)省資源,又加快了數(shù)據(jù)的傳輸速度。系統(tǒng)結(jié)構(gòu)圖見圖4-1:圖4-1:系統(tǒng)結(jié)構(gòu)模式Fig.4-1Systemarchitecturemodel4.2開發(fā)工具由于開發(fā)基于網(wǎng)絡(luò)的語(yǔ)音通訊系統(tǒng),所以現(xiàn)在比較流行的幾中語(yǔ)言就是C++、JAVA和C#,基于幾種平臺(tái)和語(yǔ)言的比較,最終選擇了VisualStudio2005作為IDE,選擇VisualC#語(yǔ)言來實(shí)現(xiàn)此語(yǔ)音通訊系統(tǒng),選擇VS2005和VisualC#的理由如下:VisualStudio是一套完整的開發(fā)工具集,用于生成ASP.NETWeb應(yīng)用程序、XMLWebServices、桌面應(yīng)用程序和移動(dòng)應(yīng)用程序。VisualBasic、VisualC++、VisualC#和VisualJ#全都使用一樣的集成開發(fā)環(huán)境(IDE),利用此IDE可以共享工具且有助于創(chuàng)建混合語(yǔ)言解決方案。另外,這些語(yǔ)言利用了.NETFramework的功能,通過此框架可使用簡(jiǎn)化ASPWeb應(yīng)用程序和XMLWebServices開發(fā)的關(guān)鍵技術(shù)。而VisualC#是微軟推出的一種比較新的一種面向?qū)ο缶幊陶Z(yǔ)言,它使得程序員可以快速地編寫各種基于Microsoft.NET平臺(tái)的應(yīng)用程序,Microsoft.NET提供了一系列的工具和服務(wù)來最大程度地開發(fā)利用計(jì)算與通訊領(lǐng)域。因此選擇VS2005作為IDE來進(jìn)行此次開發(fā)。相對(duì)以前的編程語(yǔ)言來說,C#語(yǔ)言在效率與安全性上得了很大的改善,并且支持現(xiàn)有的網(wǎng)絡(luò)編程新標(biāo)準(zhǔn),它使程序員快速便捷地創(chuàng)建基于Microsoft.NET平臺(tái)的解決方案。這種框架使C#組件可以方便地轉(zhuǎn)化為XML網(wǎng)絡(luò)服務(wù),從而使任何平臺(tái)的應(yīng)用程序都可以通過Internet調(diào)用它。還有,C#增強(qiáng)了開發(fā)者的效率,同時(shí)也致力于消除編程中可能導(dǎo)致嚴(yán)重結(jié)果的錯(cuò)誤,使得C/C++程序員可以快速進(jìn)行網(wǎng)絡(luò)開發(fā),同時(shí)也保持了開發(fā)者所需要的功能強(qiáng)大性和靈活性。于是筆者選擇VisualC#語(yǔ)言來進(jìn)行此次開發(fā)。4.3流程設(shè)計(jì)一般語(yǔ)音通訊系統(tǒng)的流程應(yīng)該包括:建立連接,音頻捕獲,音頻發(fā)送(包括音頻壓縮),音頻接收,音頻回放(包括音頻解壓)五個(gè)部分。其基本流程為:建立連接→初始化麥克風(fēng)(打開音頻設(shè)備)→捕獲音頻→音頻壓縮→音頻傳送→音頻接收→音頻解壓→音頻回放。其流程具體設(shè)計(jì)如下:(1)建立連接:兩臺(tái)計(jì)算機(jī)之間進(jìn)行語(yǔ)音通訊,首先就是要在雙方進(jìn)行連接的建立,然后雙方才能夠進(jìn)行通訊,確定數(shù)據(jù)發(fā)送到什么地方。本系統(tǒng)中一方先發(fā)出語(yǔ)音聊天請(qǐng)求,并通過XMPP協(xié)議根據(jù)對(duì)方的ID把請(qǐng)求發(fā)送給對(duì)方,在接收方接收到請(qǐng)求并點(diǎn)擊“接受”后,接收方完成自己語(yǔ)音通訊相關(guān)的工作,并且再根據(jù)發(fā)送方的ID發(fā)送一個(gè)消息回去,表示自己已經(jīng)接受,在最初發(fā)出請(qǐng)求的主機(jī)接收到對(duì)方已接收請(qǐng)受后,此主機(jī)也完成自己語(yǔ)音通訊相關(guān)的工作,至此雙方的連接建立完畢,可以正常進(jìn)行通信了。(2)音頻捕獲:先初始化麥克風(fēng),再打開本機(jī)的“混音器”并得其句柄,根據(jù)此句柄調(diào)用winmm.dll中所提供的一系列函數(shù)進(jìn)行捕獲音頻,并把其存放在一個(gè)數(shù)組中(因?yàn)椴捎肞CM,所以捕獲到的音頻是一此離散的數(shù)字)。(3)音頻發(fā)送:建立Socket連接(UDP協(xié)議),利用socket的BeginSendTo()函數(shù)將數(shù)據(jù)發(fā)送給遠(yuǎn)程主機(jī)。這個(gè)過程中會(huì)用到G729提供的壓縮算法對(duì)存放于數(shù)組中的數(shù)據(jù)進(jìn)行16:1的壓縮,減少網(wǎng)絡(luò)傳輸?shù)臄?shù)據(jù)量。(4)音頻接收:建立Socket連接(UDP協(xié)議),利用socket的BeginReceiveFrom()函數(shù)從指定的遠(yuǎn)程主機(jī)接收數(shù)據(jù)并存放于一個(gè)數(shù)組中。(5)音頻回放:本機(jī)通過音頻接收已經(jīng)將遠(yuǎn)程主機(jī)發(fā)送來的音頻數(shù)據(jù)保存在了一個(gè)數(shù)組中,這里只需根據(jù)本機(jī)的“混音器”句柄調(diào)用winmm.dll中所提供的一系列函數(shù)進(jìn)行即可實(shí)現(xiàn)語(yǔ)音回放功能。當(dāng)然,這里在回放之前會(huì)先調(diào)用G729提供解壓算法對(duì)保存于數(shù)組中的音頻數(shù)據(jù)進(jìn)行解壓。4.4語(yǔ)音通訊系統(tǒng)總體設(shè)計(jì)本語(yǔ)音通訊系統(tǒng)采用面向?qū)ο蟮幕局R(shí),再結(jié)合系統(tǒng)的需求分析和基本流程,將系統(tǒng)主要分為如下四個(gè)模塊:登錄模塊,連接建立模塊,音頻捕獲模塊,音頻回放模塊。其中音頻捕獲模塊和音頻回放模塊又可以分為若干小的模塊,最后其每一個(gè)小的模塊都采用一個(gè)類來進(jìn)行實(shí)現(xiàn)??傮w設(shè)計(jì)見圖4-2:圖4-2:功能模塊的總體設(shè)計(jì)圖Fig.4-2Totaldesignoffunctionmodule4.5語(yǔ)音通訊系統(tǒng)詳細(xì)設(shè)計(jì)4.5.1登錄模塊這個(gè)模塊是整個(gè)即時(shí)通信系統(tǒng)所共用的一個(gè)模塊,是進(jìn)入本即時(shí)通信系統(tǒng)的界面,圖4-3:登錄模塊流程圖Fig.4-3Flowchartofloginmodule在這個(gè)模塊中主要是根據(jù)用戶ID和PASSWORD(把其存放XmppClientConnection的一個(gè)對(duì)象中)圖4-3:登錄模塊流程圖Fig.4-3Flowchartofloginmodule4.5.2建立連接模塊圖4-4:建立通信連接流Fig.4-4Flowchartoferectcommunicationlink兩個(gè)用戶要進(jìn)行語(yǔ)音通訊必須在一方發(fā)送請(qǐng)求而另一方接收請(qǐng)求,然后建立其連接的情況下才能發(fā)生。此模塊主要完成兩個(gè)功能:一個(gè)是初始化麥克風(fēng),另一個(gè)就是建立通信連接,從而能進(jìn)行正常語(yǔ)音通信。1.初始化音頻設(shè)備語(yǔ)音的大小可以通過音頻設(shè)備進(jìn)行控制,所以我們必須得到音頻設(shè)備的句柄最終實(shí)現(xiàn)對(duì)聲音大小的控制。所以我們必須初始化音頻設(shè)備(其實(shí)是建立類的一個(gè)對(duì)象),并在聊天過程中可以改變音量的大小。此初始化過程是用戶點(diǎn)擊另一個(gè)用戶想進(jìn)行聊天的時(shí)候進(jìn)行實(shí)現(xiàn),主要是通過在我們自己定義的一個(gè)自定義控件中進(jìn)行調(diào)用AV.dll中的Mixer類進(jìn)行實(shí)現(xiàn)。其中Mixer類主要完成:根據(jù)給定的窗口句柄打開混音器,獲取混音器設(shè)備指定的線路信息,獲取關(guān)聯(lián)音頻線路的一個(gè)或多個(gè)控制器并從控制器中得到其音量等信息,獲取指定控制器的詳細(xì)信息,設(shè)置指定控制器的詳細(xì)信息。這樣我們其對(duì)象來調(diào)節(jié)麥克風(fēng)以與揚(yáng)聲器音量的大小。2.建立通信連接圖4-5:音頻捕獲模塊流程圖Fig.4-5Flowchartofaudiocapturemoudle系統(tǒng)中一方先發(fā)出語(yǔ)音聊天請(qǐng)求(將自己的IP放于一個(gè)Oob對(duì)象(Oob類是XMPP協(xié)議提供的一個(gè)表示語(yǔ)音聊天的專用類)中,并將此Oob對(duì)象存于IQ的對(duì)象中,并設(shè)置IQ的相關(guān)屬性(to,Type),通過XmppClientConnection對(duì)象發(fā)送給指定的用戶,在服務(wù)器接收到此IQ信息后,判斷這是發(fā)給哪一個(gè)用戶的IQ進(jìn)而轉(zhuǎn)發(fā)給該用戶,在接收方接收到此請(qǐng)求后,并根據(jù)發(fā)送方的ID進(jìn)行判斷是否要與此人進(jìn)行語(yǔ)音聊天,若選擇圖4-5:音頻捕獲模塊流程圖Fig.4-5Flowchartofaudiocapturemoudle其中上面雙方建立通信連接時(shí),當(dāng)接收方接受請(qǐng)求后,雙方會(huì)完成自己一些語(yǔ)音通信相關(guān)準(zhǔn)備工作,這些準(zhǔn)備工作是:通過建立語(yǔ)音通信類(AV)對(duì)象,并調(diào)用AV類所提供的接口IniChanel()和IniAudio()建立Socket連接并建立相關(guān)對(duì)象和完成一系列初始化工作,進(jìn)而開始雙方的正常通信。4.5.3音頻捕獲模塊音頻捕獲在整個(gè)語(yǔ)音通訊系統(tǒng)中占據(jù)核心地位,這個(gè)模塊核心功能就是完成音頻捕獲并發(fā)送給遠(yuǎn)程主機(jī)。其主要步驟有:確定音頻格式,建立音頻捕獲對(duì)象,打開錄音設(shè)備,為設(shè)備分配足夠的存做緩沖區(qū),將緩沖區(qū)與設(shè)備相關(guān)聯(lián),開始錄音捕獲音頻,將捕獲到的音頻壓縮并發(fā)送給遠(yuǎn)程主機(jī)。其流程圖見圖4-5,此模塊的功能主要由以下類進(jìn)行完成:圖4-11:WaveIn類圖Fig.4-12ClassDiagrameofWaveIn圖4-12:WaveOut類圖Fig.4-13ClassDiagrameofWaveOutAV類:此類是此系統(tǒng)面向?qū)ο笾R(shí)體現(xiàn)之所在,它把所有與語(yǔ)音通訊相關(guān)的東西都進(jìn)行了封裝,只提供了幾個(gè)接口給用戶進(jìn)行調(diào)用即可實(shí)現(xiàn)語(yǔ)音通訊,體現(xiàn)了面向?qū)ο缶幊痰乃枷耄瑢?duì)用戶來說簡(jiǎn)單,對(duì)系統(tǒng)來說也比較安全(避免用戶直接操作其中的數(shù)據(jù))。這個(gè)類在用戶調(diào)用其構(gòu)造函數(shù)創(chuàng)建其一個(gè)對(duì)象后,主要提供了兩個(gè)接口給用戶,即IniChanel()和IniAudio()。在IniChanel()中,首先建立一個(gè)AVChannel類的一個(gè)對(duì)象,此對(duì)象用于完成Socket的建立以與接收來自遠(yuǎn)程主機(jī)發(fā)送來的音頻數(shù)據(jù)。在圖4-11:WaveIn類圖Fig.4-12ClassDiagrameofWaveIn圖4-12:WaveOut類圖Fig.4-13ClassDiagrameofWaveOut圖4-9:AVException類圖Fig.4-9:ClassDiagrameofAVException圖4-7:AV類圖Fig.4-7ClassDiagrameofAVofAV圖4-8:AVChanel類圖Fig.4-8ClassDiagrameofAVChanel圖4-10:g729類圖Fig.4-10ClassDiagrameofg729AVChannel類:此類主要用于完成一系列準(zhǔn)備工作。首先建立Socket對(duì)象并綁定(使用UDP協(xié)議建立),初始化音頻編碼器和音頻解碼器,然后將WaveIn類捕獲到的音頻數(shù)據(jù)經(jīng)過壓縮后通過Socket的BeginSendTo()方法發(fā)送給特定的遠(yuǎn)程主機(jī)。圖見4-8:G729類:此類在音頻捕獲模塊里主要是完成音頻數(shù)據(jù)的壓縮功能。由于通過采樣得到的語(yǔ)音數(shù)據(jù)量比較大,所以必須經(jīng)過壓縮傳送才能減少網(wǎng)絡(luò)負(fù)擔(dān)。此類通過調(diào)用g729.dll里面提供的函數(shù)實(shí)現(xiàn)音頻數(shù)據(jù)16:1的壓縮。其類圖見圖4-10:Struct類:這個(gè)類主要是指明整個(gè)系統(tǒng)中所共用的一系列結(jié)構(gòu)體。其中與音頻捕獲相關(guān)的結(jié)構(gòu)體有兩個(gè):一個(gè)是WAVEHDR,其主要是用于指明音頻捕獲過程中所用到的緩沖區(qū)的格式與一系列參數(shù)。另一個(gè)是WAVEFORMATEX,這個(gè)結(jié)構(gòu)體主要是指明波形的格式,包括采樣頻率,采樣位數(shù)等一系列重要的參數(shù)。圖4-6:音頻回放模塊流程Fig.4-6FlowchartofaudioplaybackWaveIn類:這個(gè)類是音頻捕獲的核心類,主要的音頻捕獲工作都是在這個(gè)類中進(jìn)行完成的。這個(gè)類主要會(huì)利用winmm.dll中提供的一系列函數(shù)完成工作,其中主要的工作有:圖4-6:音頻回放模塊流程Fig.4-6FlowchartofaudioplaybackAVException類:主要是對(duì)上面一系列工作中所出現(xiàn)的異常進(jìn)行簡(jiǎn)單的處理。其類圖見圖4-9:4.5.4音頻回放模塊要實(shí)現(xiàn)語(yǔ)音聊天,只把進(jìn)行語(yǔ)音捕獲是遠(yuǎn)遠(yuǎn)不夠的,還必須在接收端把其接收到的音頻數(shù)據(jù)進(jìn)行回放,才能達(dá)到真正意義上的實(shí)時(shí)語(yǔ)音通訊的目的。這個(gè)模塊主要就是完成接收從遠(yuǎn)程主機(jī)發(fā)送來的數(shù)據(jù)并進(jìn)行回放。其主要步驟有:確定音頻格式,建立音頻回放對(duì)象,打開與此主機(jī)相關(guān)的回放設(shè)備(混音器設(shè)備)并得到其句柄,為回放設(shè)備準(zhǔn)備一個(gè)波形緩沖區(qū)(存塊),向指定的波形輸出設(shè)備發(fā)送一個(gè)數(shù)據(jù)塊,停止放音,關(guān)閉回放設(shè)備。其流程圖見圖4-6,此模塊功能主要由以下類進(jìn)行完成:AV類:此類是此系統(tǒng)面向?qū)ο笾R(shí)體現(xiàn)之所在,它把所有與語(yǔ)音通訊相關(guān)的東西都進(jìn)行了封裝,只提供了一個(gè)接口給用戶進(jìn)行調(diào)用即可實(shí)現(xiàn)語(yǔ)音通訊,體現(xiàn)了面向?qū)ο缶幊痰乃枷耄瑢?duì)用戶來說簡(jiǎn)單,對(duì)系統(tǒng)來說也比較安全(避免用戶直接操作其中的數(shù)據(jù))。這個(gè)類在用戶調(diào)用其構(gòu)造函數(shù)創(chuàng)建其一個(gè)對(duì)象后,主要提供了兩個(gè)接口給用戶,即IniChanel()和IniAudio()。在IniChanel()中,首先建立一個(gè)AVChannel類的一個(gè)對(duì)象,此對(duì)象用于完成Socket的建立以與接收來自遠(yuǎn)程主機(jī)發(fā)送來的音頻數(shù)據(jù)進(jìn)行回放,并進(jìn)行一些委托的初始設(shè)置。在IniAudio()方法中,首先會(huì)確定此次回放波形的格式(即設(shè)置WAVEFORMATEX結(jié)構(gòu)體的一系列參數(shù)),然后根據(jù)此波形格式建立一個(gè)建立一個(gè)音頻回放類(WaveOut)的對(duì)象,并調(diào)用其Start()方法讓此對(duì)象開始音頻回放。其類圖見圖4-7:AVChannel類:此類主要用于完成一系列準(zhǔn)備工作。首先建立Socket對(duì)象并綁定(使用UDP協(xié)議建立),初始化音頻編碼器和音頻解碼器,然后使用Socket的BeginReceiveFrom()方法,接收遠(yuǎn)程主機(jī)發(fā)送過來的音頻數(shù)據(jù)并存于緩沖區(qū)數(shù)組中,當(dāng)緩沖區(qū)滿后執(zhí)行其回調(diào)函數(shù)與其相關(guān)委托,最終調(diào)用WaveOut類的Wirte()方法實(shí)現(xiàn)語(yǔ)音回放。其類圖見圖4-8:G729類:此類在音頻回放模塊里主要是完成音頻數(shù)據(jù)的解壓功能。為了減少網(wǎng)絡(luò)負(fù)擔(dān),發(fā)送方已經(jīng)將音頻數(shù)據(jù)進(jìn)行了壓縮,所以接收端進(jìn)行音頻回放時(shí)應(yīng)該進(jìn)行數(shù)據(jù)解壓。其類圖見圖4-10:Struct類:這個(gè)類主要是指明整個(gè)系統(tǒng)中所共用的一系列結(jié)構(gòu)體。其中與音頻回放相關(guān)的結(jié)構(gòu)體有兩個(gè):一個(gè)是WAVEHDR,其主要是用于指明音頻捕獲過程中所用到的緩沖區(qū)的格式與一系列參數(shù)。另一個(gè)是WAVEFORMATEX,這個(gè)結(jié)構(gòu)體主要是指明波形的格式,包括采樣頻率,采樣位數(shù)等一系列重要的參數(shù)。WaveOut類:這個(gè)類是音頻回放的核心類,主要的音頻回放工作都是在這個(gè)類中進(jìn)行完成的。這個(gè)類主要會(huì)利用winmm.dll中提供的一系列函數(shù)完成工作,其中主要的工作有:打開回放設(shè)備,并得到其句柄,為回放設(shè)備準(zhǔn)備一個(gè)波形緩沖區(qū)(存塊),向指定的波形輸出設(shè)備發(fā)送一個(gè)數(shù)據(jù)塊(此音頻數(shù)據(jù)已經(jīng)在AVChannel中接收),停止放音,關(guān)閉回放設(shè)備。其類圖見圖4-12:AVException類:主要是對(duì)上面一系列工作中所出現(xiàn)的異常進(jìn)行簡(jiǎn)單的處理。其類圖見圖4-9:根據(jù)以上分析可以得到對(duì)象模型為圖4-14:圖圖4-14:語(yǔ)音通訊系統(tǒng)的對(duì)象模型Fig.4-14Voicecommunicationsystemobjectmodel第五章語(yǔ)音通訊系統(tǒng)的實(shí)現(xiàn)5.1構(gòu)建語(yǔ)音通訊系統(tǒng)的用戶登錄系統(tǒng)圖5-1:圖5-1:登錄界面Fig.5-1Thelogininterface在這里主要是用到XMPP協(xié)議提供的IQ和其提供的XmppClientConnection來進(jìn)行實(shí)現(xiàn)。首先將用戶輸入的ID和PASSWORD保存在XmppClientConnection對(duì)象connect的Usernamt和Password屬性中,并設(shè)置此次連接服務(wù)器的IP和端口號(hào),然后使用其open()方法把數(shù)據(jù)發(fā)送到服務(wù)器之后查詢數(shù)據(jù)庫(kù),若存在則登錄成功,若數(shù)據(jù)庫(kù)中沒有相關(guān)數(shù)據(jù)則返回登錄頁(yè)面表示登錄失敗。其關(guān)鍵代碼如下:connection.Username=tbx_user.Text;//設(shè)置IDconnection.Server=server;//設(shè)置服務(wù)器IPconnection.Password=tbx_pwd.Text;//設(shè)置PASSWORDconnection.Port=5222;//設(shè)置端口號(hào)connection.Open();//使用打開方法把數(shù)據(jù)發(fā)送到服務(wù)器進(jìn)行驗(yàn)證5.2連接建立模塊的實(shí)現(xiàn)在系統(tǒng)功能模塊設(shè)計(jì)中已經(jīng)分析此模塊由兩部分功能組成:初始化麥克風(fēng)和建立通信連接。其具體實(shí)現(xiàn)如下:5.2.1音量調(diào)整相關(guān)操作1.初始化麥克風(fēng)與本機(jī)音量調(diào)節(jié)器初始化過程是用戶點(diǎn)擊另一個(gè)用戶想進(jìn)行聊天的時(shí)候進(jìn)行實(shí)現(xiàn),也就是加載這個(gè)聊天主窗體(frmchat)時(shí)就會(huì)初始化麥克風(fēng),回為在這個(gè)窗體中用到了我們的一個(gè)自定義控件,而在此自定義控件中進(jìn)行調(diào)用Mixer類建立了其對(duì)象并執(zhí)行了打開操作,所以就將麥克風(fēng)和本機(jī)音量調(diào)節(jié)器進(jìn)行了初始化,其具體實(shí)現(xiàn)如下:在加載frmchat窗體調(diào)用自定義控件audiochat時(shí),定義了一個(gè)audiochat對(duì)象,并調(diào)用其setcon(XmppClientConnectioncon,stringname)設(shè)置此麥克風(fēng)與音量調(diào)節(jié)對(duì)象中所需要的XmppClientConnection對(duì)象和對(duì)方ID(name)。在audiochat類的構(gòu)造函數(shù)中調(diào)用InitializeMixing()進(jìn)行麥克風(fēng)的初始化,并建立一個(gè)用于控制輸出(本機(jī)音量)音量大小的MixerControlDetail對(duì)象outdtl和一個(gè)用于控制輸入(麥克風(fēng)音量)音量大小的MixerControlDetail對(duì)象indtl,以后改變音量的一系列操作都與這兩個(gè)對(duì)象有關(guān)。此InitializeMixing()函數(shù)代碼如下:privatevoidInitializeMixing()//初始化聲卡麥克風(fēng){mixer=newMixer(this);//this用作窗口句柄this.outdtl=newMixer.MixerControlDetail//用于控制本機(jī)音量大小(mixer,Mixer.MIXERLINE_COMPONENTTYPE_DST_SPEAKERS);this.trackBarOut.Minimum=this.outdtl.Min;//得到本機(jī)音量最小值this.trackBarOut.Maximum=this.outdtl.Max;//得到本機(jī)音量最大值this.trackBarOut.Value=this.outdtl.Volume;//得到本機(jī)當(dāng)前音量if(!this.outdtl.Mute)//根據(jù)本機(jī)是否是靜音決定顯示哪一圖片{this.pbMuteVolume.Visible=true;//若不靜音,則顯示靜音圖片this.pbNormalVolume.Visible=false;}else//否則就顯示音量圖片{this.pbNormalVolume.Visible=true;this.pbMuteVolume.Visible=false;}this.indtl=newMixer.MixerControlDetail//用于控制麥克風(fēng)音量大小(mixer,Mixer.MIXERLINE_COMPONENTTYPE_SRC_MICROPHONE);this.trackBarIn.Minimum=indtl.Min;//得到麥克風(fēng)音量最小值this.trackBarIn.Maximum=indtl.Max;//得到麥克風(fēng)音量最大值圖5-2調(diào)整音量界面F圖5-2調(diào)整音量界面Fig.5-2Theinterfaceofadjustvolume//得到麥克風(fēng)音量當(dāng)前值2.調(diào)整音量大小1.當(dāng)用戶改變作為參數(shù)傳給Mixer類的窗口audiochat中表示音量大小的控件(其中一個(gè)trackBarIn表示本機(jī)麥克風(fēng)音量的大小,一個(gè)trackBarOut表示本機(jī)音響音量的大小)時(shí),就會(huì)改變音量的大小,當(dāng)點(diǎn)擊音量揚(yáng)聲器的圖片時(shí),就會(huì)在靜音與非靜音之間進(jìn)行轉(zhuǎn)換,但這兩個(gè)調(diào)節(jié)條以與這靜音按鈕必須在雙方通信連接建立之后激活才能進(jìn)行調(diào)節(jié)與改變,其界面如圖5-2:當(dāng)用戶拖動(dòng)trackBarIn控件時(shí),就表示在調(diào)節(jié)自己麥克風(fēng)的音量大小,此音量值大小影響對(duì)方回放時(shí)音量的大小,若選擇最小則對(duì)方在回放音頻數(shù)據(jù)時(shí)將聽不到聲音。而拖動(dòng)trackBarOut就相當(dāng)于調(diào)整本機(jī)音量值的大小,會(huì)使對(duì)方傳過來的聲音在本機(jī)上的回放音量改變。在這里主要是通過AV.dll中提供的音量大小控制函數(shù)以與在初始化麥克風(fēng)時(shí)所定義的用于控制輸出音量大小的MixerControlDetail對(duì)象outdtl和一個(gè)用于控制輸入音量大小的MixerControlDetail對(duì)象indtl來共同進(jìn)行實(shí)現(xiàn),當(dāng)用戶拖上面的音量調(diào)節(jié)條時(shí),會(huì)觸發(fā)trackBarOut_Scroll()事件從而實(shí)現(xiàn)音量大小的調(diào)節(jié)。其中調(diào)節(jié)麥克風(fēng)音量值的關(guān)鍵代碼:this.indtl.Volume=this.trackBarIn.Value;此句代碼通過MixerControlDetail對(duì)象indtl設(shè)置其Voluem,則可自動(dòng)對(duì)麥克風(fēng)音量值進(jìn)行控制。其中調(diào)節(jié)本機(jī)輸出音量值的代碼:this.outdtl.Volume=this.trackBarOut.Value;此句代碼通過MixerControlDetail對(duì)象outdtl設(shè)置其Voluem,則可自動(dòng)對(duì)本機(jī)輸出音量值進(jìn)行控制。在用戶雙擊另一個(gè)用戶彈出聊天窗口時(shí)就會(huì)初始化對(duì)音量圖標(biāo),若用戶本機(jī)當(dāng)前就是靜音,則顯示靜音圖片;相反就顯示音量圖片。當(dāng)用戶點(diǎn)擊靜音按鈕或者音量按鈕圖片時(shí),就會(huì)在靜音與非靜音之間進(jìn)行轉(zhuǎn)換,并會(huì)隨之切換相應(yīng)的提示圖片。對(duì)其的實(shí)現(xiàn)主要是通過AV.dll中對(duì)this.outdtl.mute進(jìn)行設(shè)置為true或者false即可。5.2.2建立通信連接發(fā)送語(yǔ)音聊天請(qǐng)求當(dāng)A用戶點(diǎn)擊“語(yǔ)音聊天”請(qǐng)求按鈕后,會(huì)向?qū)Ψ桨l(fā)送一個(gè)請(qǐng)求消息,此處發(fā)送消息主要是通過XMPP協(xié)議提供的IQ類的對(duì)象進(jìn)行發(fā)送,可以通過IQ設(shè)置此消息是發(fā)送給誰(shuí)以與消息的類型等一系列參數(shù)。在這里先通過GetHostAddresses()得到本機(jī)的IP存放于一個(gè)標(biāo)志語(yǔ)音聊天的Oob的對(duì)象oob中,然后將此對(duì)象作為iq的一個(gè)孩子,這樣相當(dāng)于設(shè)置了iq.Query.Type為Oob,有利于服務(wù)器轉(zhuǎn)發(fā)消息以與對(duì)方處理消息時(shí)判斷這是語(yǔ)音聊天相關(guān)的消息。最終確定其消息類型與發(fā)送的目的地,采用con.send()進(jìn)行發(fā)送.設(shè)置iq的Type屬性為get表示發(fā)送請(qǐng)求,等待B用戶的處理,其關(guān)鍵代碼如下://獲取本機(jī)IPIPAddress[]hostip=Dns.GetHostAddresses(Dns.GetHostName());Ooboob=newOob();//新建一個(gè)標(biāo)志語(yǔ)音聊天的對(duì)象oob.Value=hostip[0].ToString();//oob.Value中存放好自己的IDIQiq=newIQ();//新建一個(gè)IQ消息對(duì)象iq.AddChild(oob);//設(shè)置iq.Query的Type為Oobiq.To=newJid(name,"localhost","resourse");//指定對(duì)方的ID(name)iq.Type=IqType.get;//Type設(shè)置為get表示發(fā)送請(qǐng)求con.Send(iq);//通過XMPP將此消息發(fā)信服務(wù)器服務(wù)器進(jìn)行消息轉(zhuǎn)發(fā)A用戶發(fā)送的建立連接請(qǐng)求指定了其接收此消息用戶的ID,但這兩個(gè)用戶現(xiàn)在完全獨(dú)立沒有聯(lián)系,所以這個(gè)消息必須通過服務(wù)器進(jìn)行轉(zhuǎn)發(fā)。服務(wù)器通過判斷iq.Query!=null且iq.Query.GetType()==typeof(Oob)說明這是語(yǔ)音聊天的請(qǐng)求消息,然后在服務(wù)記錄的所有的在線用戶列表(一個(gè)ArrayList)中進(jìn)行查找,若發(fā)現(xiàn)一個(gè)在線用戶的ID等于這
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 公司電商活動(dòng)策劃方案
- 公司職員會(huì)議活動(dòng)方案
- 可摘義齒固位技術(shù)-洞察及研究
- 2025年供熱通風(fēng)與空調(diào)工程師考試試題及答案
- 2025年法律與生物倫理的考試試題及答案
- 2025年中國(guó)類人膠原蛋白行業(yè)市場(chǎng)全景分析及前景機(jī)遇研判報(bào)告
- 2024年度浙江省護(hù)師類之主管護(hù)師典型題匯編及答案
- 公寓防火安全教育
- 員工入職三級(jí)安全培訓(xùn)
- DB43-T 2864-2023 土家族非遺樂器咚咚喹通.用技術(shù)要求
- 2023年黑龍江省文化和旅游系統(tǒng)事業(yè)單位人員招聘筆試模擬試題及答案解析
- 2023年江西新余市數(shù)字產(chǎn)業(yè)投資發(fā)展有限公司招聘筆試題庫(kù)含答案解析
- LY/T 3323-2022草原生態(tài)修復(fù)技術(shù)規(guī)程
- 部編版六年級(jí)語(yǔ)文下冊(cè)課件第1課《北京的春節(jié)》《臘八粥》
- 涂裝工模擬練習(xí)題含答案
- 2023-2024學(xué)年河南省永城市小學(xué)數(shù)學(xué)二年級(jí)下冊(cè)期末評(píng)估測(cè)試題
- 乳腺疾病的超聲診斷 (超聲科)
- 服務(wù)精神:馬里奧特之路
- 《建筑施工安全檢查標(biāo)準(zhǔn)》JGJ59-2011圖解
- 華為大學(xué)人才培養(yǎng)與發(fā)展實(shí)踐
- 醫(yī)療垃圾廢物處理課件
評(píng)論
0/150
提交評(píng)論