蔡立晶,李文勇
(1.黑龍江八一農(nóng)墾大學(xué),黑龍江 大慶 163319;2.大慶油田有限責(zé)任公司第一采油廠,黑龍江 大慶 163162)
語(yǔ)音通信軟件是一款利用便捷的網(wǎng)絡(luò)資源進(jìn)行語(yǔ)音通信交流軟件,是將講話人的語(yǔ)音轉(zhuǎn)換成數(shù)字信號(hào)在因特網(wǎng)上進(jìn)行傳輸?shù)募磿r(shí)通信軟件。IP 語(yǔ)音通信軟件是以TCP/IP 協(xié)議進(jìn)行傳輸?shù)?基于經(jīng)典的C/S 構(gòu)架,在Windows 平臺(tái)下利用Microsoft Visual C++開(kāi)發(fā)環(huán)境下的網(wǎng)絡(luò)編程。這種語(yǔ)音通信是一種利用網(wǎng)絡(luò)資源進(jìn)行語(yǔ)音通信的新型方式,語(yǔ)音通信使用點(diǎn)對(duì)點(diǎn)的聯(lián)結(jié)進(jìn)行語(yǔ)音通信。軟件使用Windows-Socket 技術(shù)進(jìn)行設(shè)計(jì),根據(jù)相關(guān)編碼對(duì)語(yǔ)音進(jìn)行采集、抽樣后編碼成數(shù)字信號(hào),利用網(wǎng)絡(luò)為載體進(jìn)行數(shù)字信號(hào)的傳輸。軟件的基本架構(gòu)為連接控制模塊、語(yǔ)音采集模塊、語(yǔ)音傳輸模塊、語(yǔ)音播放模塊。主要的關(guān)鍵技術(shù)有編碼技術(shù)、服務(wù)質(zhì)量(QOS)保證技術(shù)以及網(wǎng)絡(luò)傳輸技術(shù)等。此軟件主要是TCP 或UDP 作為其傳輸協(xié)議,這樣易于實(shí)現(xiàn)和調(diào)試,更重要的是靈活性和擴(kuò)展性好。
系統(tǒng)模塊主要由界面設(shè)計(jì)、語(yǔ)音通信、數(shù)據(jù)傳輸、語(yǔ)音壓縮、控制設(shè)置組成。不同的模塊各自擔(dān)當(dāng)自己的責(zé)任,各模塊之間還相互結(jié)合,最終實(shí)現(xiàn)語(yǔ)音通話過(guò)程。運(yùn)用的主要技術(shù)知識(shí)有TCP/IP 協(xié)議(主要運(yùn)用三次握手和四次釋放)、UDP 協(xié)議(高效率、低可靠性)、Windows-Socket 網(wǎng)絡(luò)接口編程以及語(yǔ)音壓縮技術(shù)。
(1)界面設(shè)計(jì)模塊:是整個(gè)界面中按鍵的大小設(shè)置、按鍵的排布、畫(huà)布的大小設(shè)置、以及一些背景顏色的安排等。
(2)數(shù)據(jù)傳輸模塊:是報(bào)文之間的交互、報(bào)文之間的解析過(guò)程的設(shè)計(jì)。這次語(yǔ)音通信軟件主要采用的協(xié)議是TCP/IP 和UDP。使用TCP/IP 建立連接后,通過(guò)UDP 報(bào)文來(lái)通信。
(3)語(yǔ)音設(shè)計(jì)模塊:是利用Windows-Socket 網(wǎng)絡(luò)編程接口來(lái)實(shí)現(xiàn)模擬信號(hào)轉(zhuǎn)換成數(shù)字信號(hào)的設(shè)計(jì)。
(4)語(yǔ)音壓縮模塊:是運(yùn)用主流技術(shù)ACM 壓縮,壓縮音頻數(shù)據(jù)使得數(shù)據(jù)最小占用內(nèi)存,得以快速傳遞和轉(zhuǎn)換,實(shí)現(xiàn)高效率、低內(nèi)存等效果。
(5)按鍵控制模塊:設(shè)計(jì)的產(chǎn)品或多或少都有一些需要用戶自己選擇的功能,而按鍵就是用戶選擇功能最直觀的反應(yīng)。每個(gè)按鍵都有自己所對(duì)應(yīng)的功能,需要用編程來(lái)實(shí)現(xiàn),而后利用按鍵來(lái)調(diào)用這個(gè)函數(shù)功能。
通信軟件,根據(jù)選擇完善的設(shè)備,適合的操作系統(tǒng)以及穩(wěn)定的運(yùn)行性能,這樣能節(jié)約資源和縮短時(shí)間。硬件環(huán)境:微軟操作系統(tǒng) PC 機(jī);1G 以上內(nèi)存;2.0GHz CPU 頻率以上;具備聲卡和麥克。軟件環(huán)境:安裝VC++6.0。
主要實(shí)現(xiàn)局域網(wǎng)內(nèi)2 個(gè)點(diǎn)對(duì)點(diǎn)用戶互相傳遞語(yǔ)音信息的功能。輸入IP 地址點(diǎn)擊確認(rèn)發(fā)起通話,實(shí)現(xiàn)端對(duì)端通信。對(duì)方可以拒絕通話或接受對(duì)方的通話請(qǐng)求。按退出鍵可以斷開(kāi)連接,結(jié)束語(yǔ)音通話。簡(jiǎn)單的系統(tǒng)流程圖如圖1 所示。
圖1 系統(tǒng)流程圖
這里主要的協(xié)議采用了TCP/IP 協(xié)議、UDP 協(xié)議,TCP/IP 協(xié)議是面向連接、帶心跳監(jiān)測(cè)機(jī)制的協(xié)議,UDP協(xié)議是面向無(wú)連接低可靠、高傳輸?shù)膮f(xié)議。Window-Socket 是微軟和其他公司一起創(chuàng)建的用于網(wǎng)絡(luò)接口的編程語(yǔ)言,并詳細(xì)介紹了其中的流程。
信息產(chǎn)業(yè)的高速發(fā)展,IP 語(yǔ)音技術(shù)帶給人們?nèi)碌男畔⒒?集合語(yǔ)音、視頻、數(shù)據(jù)傳輸為一體的主流通信技術(shù)成為主要實(shí)現(xiàn)局域網(wǎng)內(nèi)端對(duì)端用戶之間的信息交互過(guò)程,不同模塊負(fù)責(zé)不同的功能,最后不同模塊相互連接,實(shí)現(xiàn)語(yǔ)音通信。軟件的總體過(guò)程包含語(yǔ)音采集,ACM 的壓縮,網(wǎng)絡(luò)的傳輸,語(yǔ)音的解壓,語(yǔ)音的播放。語(yǔ)音通信的結(jié)構(gòu)圖如圖2 所示。
圖2 語(yǔ)音通信結(jié)構(gòu)圖
該軟件的功能是語(yǔ)音傳輸,主要過(guò)程是語(yǔ)音采集,ACM 壓縮,網(wǎng)絡(luò)傳輸,語(yǔ)音解壓,語(yǔ)音播放。通過(guò)話筒將語(yǔ)音轉(zhuǎn)化成數(shù)字信號(hào),然后進(jìn)行壓縮,壓縮完放回內(nèi)存中,通過(guò)網(wǎng)絡(luò)這個(gè)媒介傳輸給對(duì)方,對(duì)方接到后再利用CPU 進(jìn)行解壓,將數(shù)字信號(hào)轉(zhuǎn)換成模擬信號(hào),放入內(nèi)存后,利用音響等設(shè)備進(jìn)行回放。
語(yǔ)音連接指的是客戶端向服務(wù)器發(fā)出一個(gè)語(yǔ)音連接請(qǐng)求,服務(wù)器做出合理的回應(yīng),服務(wù)器做出的方式有無(wú)響應(yīng),接受通話,拒絕通話,退出語(yǔ)音通話。
(1)IP 地址輸入設(shè)計(jì)
該功能主要用于填寫(xiě)目的主機(jī)的IP 地址,實(shí)現(xiàn)訪問(wèn)對(duì)象。當(dāng)啟動(dòng)軟件時(shí),本地IP 地址可以自動(dòng)獲取并顯示在軟件界面上。IP 地址主要采用IPV4 例如:192.168.1.1。
(2)連接按鍵設(shè)計(jì)
本地IP 自動(dòng)獲取,當(dāng)將對(duì)方的IP 地址填入相應(yīng)的IP 地址欄里,只需要點(diǎn)擊連接按鍵,就可以向目的主機(jī)發(fā)起TCP 連接請(qǐng)求。當(dāng)沒(méi)有填寫(xiě)目的主機(jī)的IP 地址時(shí),點(diǎn)擊連接按鈕,本地IP 地址會(huì)以廣播的形式顯示在軟件界面上,提示要輸入對(duì)方的IP 地址。
(3)接受通話按鍵設(shè)計(jì)
建立起TCP 連接要執(zhí)行一個(gè)合理的操作,而接受通話按鍵點(diǎn)擊后,就可以實(shí)現(xiàn)與對(duì)方通話。前提是系統(tǒng)都有聲卡和麥克而且必須是完好的、可用的。
(4)拒絕通話按鍵設(shè)計(jì)
軟件也要考慮實(shí)用性方面的問(wèn)題。如果對(duì)方現(xiàn)在很忙或者有急事,不能強(qiáng)制要求對(duì)方來(lái)接受語(yǔ)音通信,這個(gè)時(shí)候?qū)Ψ骄涂梢渣c(diǎn)擊拒絕通話來(lái)解除語(yǔ)音通話的發(fā)起,同時(shí)也能回復(fù)給發(fā)送端信息,現(xiàn)在無(wú)法接受通話,避免發(fā)起端等待。
(5)退出按鍵設(shè)計(jì)
一個(gè)比較完善的軟件需要具備退出功能,當(dāng)不想使用此軟件時(shí),點(diǎn)擊退出按鍵關(guān)閉程序。
語(yǔ)音采集技術(shù)是將各種應(yīng)用系統(tǒng)所需的各種語(yǔ)音信號(hào)進(jìn)行直接采集、處理存放在EPROM 芯片中,當(dāng)系統(tǒng)運(yùn)行的時(shí)候,便可以根據(jù)需要,隨時(shí)用于識(shí)別和組合。主要有 lpData、dwBufferLength、dwBytesRecorded 等成員,其中l(wèi)pData 是最重要的組成也是最經(jīng)常用到的。
(1)錄音設(shè)計(jì)
WaveInAddBuffeer 函數(shù)是將三塊內(nèi)存添加到錄音設(shè)備上,當(dāng)數(shù)據(jù)占滿三塊內(nèi)存時(shí)發(fā)送數(shù)據(jù)已滿的信息,WaveInAddBuffeer 又重新將緩沖區(qū)添加上來(lái),這樣三塊內(nèi)存就能達(dá)到循環(huán)使用,而可以做到循環(huán)錄音這個(gè)效果。錄音的質(zhì)量與環(huán)境、設(shè)備等因素有關(guān),主要是體現(xiàn)在內(nèi)存和麥克音量大小,內(nèi)存越大,音量越大,錄音的質(zhì)量也就越好,所以一般把音量調(diào)到最大后開(kāi)始錄音。
(2)回放設(shè)計(jì)
回放時(shí)將音頻設(shè)備打開(kāi)并調(diào)節(jié)合適,使用Wave-OutAddBuffee 函數(shù)將數(shù)據(jù)放入緩存區(qū),達(dá)到播放的效果。
數(shù)字信號(hào)具有儲(chǔ)存空間小,傳輸比特率低,節(jié)約帶寬等特點(diǎn),而語(yǔ)音編碼就是對(duì)模擬的語(yǔ)音信號(hào)進(jìn)行編碼,將模擬信號(hào)轉(zhuǎn)化成數(shù)字信號(hào),從而降低傳輸碼率并進(jìn)行數(shù)字傳輸,數(shù)字化之后的語(yǔ)音信號(hào)需要語(yǔ)音壓縮編碼。語(yǔ)音編碼的基本方法可分為波形編碼、參量編碼和混合編碼。波形編碼是對(duì)語(yǔ)音時(shí)域或頻域波形進(jìn)行編碼,方法簡(jiǎn)單,失真最小,但編碼碼率較高,壓縮比不大。參數(shù)編碼的基礎(chǔ)是利用人類語(yǔ)音的生成模型,大大降低了系統(tǒng)的碼率,缺點(diǎn)在于音質(zhì)較差,復(fù)雜度高?;旌暇幋a是波形編碼和參數(shù)編碼的結(jié)合,吸收了波形編碼和參數(shù)編碼的優(yōu)點(diǎn),在較低的比特率上取得較高的語(yǔ)音質(zhì)量,是最常用和最推崇的技術(shù)。
壓縮編碼技術(shù)有很多,此次軟件開(kāi)發(fā)主要應(yīng)用到ACM 音頻壓縮接口的編程方法,使用的編程工具為Microsoft Visual C++。應(yīng)用程序可以通過(guò)ACM 提供的編程接口調(diào)用這些系統(tǒng)中現(xiàn)成的編解碼器來(lái)實(shí)現(xiàn)音頻的壓縮和解壓縮。
(1)ACM 壓縮原理
壓縮音頻數(shù)據(jù)主要原理是降低存儲(chǔ)某一聲音序列所需的數(shù)據(jù)量。少的數(shù)據(jù)量所占有的空間少,能夠以更快的速度通過(guò)MODEM 在網(wǎng)絡(luò)上傳遞。如果數(shù)據(jù)以Windows系統(tǒng)所支持的某種通用格式壓縮的話,就可不經(jīng)手工解壓縮而直接播放,系統(tǒng)將使用自己的CODECs 解壓縮數(shù)據(jù)并播放。CODEC 支持從源音頻格式到目標(biāo)格式的轉(zhuǎn)換,轉(zhuǎn)換時(shí)要采取兩步轉(zhuǎn)換法,即先將源格式轉(zhuǎn)換成一種中間格式,再將中間格式轉(zhuǎn)換成目標(biāo)格式。
(2)ACM 程序設(shè)計(jì)
ACM 的API 函數(shù)定義在頭文件msacm.h 中,除了在工程中加入對(duì)此頭文件的引用之外,對(duì)ACM 編程還必須包含頭文件mmsystem.h 和mmreg.h,這兩個(gè)頭文件定義了多媒體編程中最基本的常量和數(shù)據(jù)結(jié)構(gòu)。
壓縮和解壓縮一樣,都是將音頻信號(hào)從一種音頻格式轉(zhuǎn)換成另一種格式。計(jì)算壓縮后音頻數(shù)據(jù)大小,并以此適當(dāng)增加輸出緩沖區(qū)的大小。音頻數(shù)據(jù)真正的壓縮過(guò)程是由函數(shù)acmStreamConvert()完成的,在調(diào)用函數(shù)acm-StreamConvert()時(shí)可以指定回調(diào)函數(shù),以便在轉(zhuǎn)換過(guò)程中顯示進(jìn)度信息等。
語(yǔ)音在進(jìn)行壓縮編碼后不一定完全傳輸,有可能數(shù)據(jù)源超過(guò)內(nèi)存容量,這時(shí)需要等待音頻再生模塊之后釋放內(nèi)存,保存和再傳輸。
語(yǔ)音通信軟件,需要2 臺(tái)PC 機(jī)處于同一個(gè)局域網(wǎng)并且能夠通信,也可以使用交叉線使2 臺(tái)PC 直連,另外需要麥克和外置音頻。
測(cè)試內(nèi)容分為幾個(gè)步驟:(1)自動(dòng)獲取IP 地址,當(dāng)運(yùn)行此軟件時(shí)系統(tǒng)自動(dòng)獲取到本機(jī)的IP 地址。(2)連接功能模塊,當(dāng)填入目的主機(jī)IP 地址,點(diǎn)擊連接按鈕時(shí),本地IP 地址會(huì)變成目的IP 地址。如果成功連接,連接按鈕、通話按鈕會(huì)成灰色,只有退出鍵成正常的黑色。(3)通話功能,當(dāng)目的主機(jī)收到通話請(qǐng)求時(shí),點(diǎn)擊通話按鍵便可正常通話。(4)拒絕功能,當(dāng)目的主機(jī)收到通話請(qǐng)求可以執(zhí)行斷開(kāi)操作。(5)退出功能,當(dāng)不想進(jìn)行通話時(shí)可以點(diǎn)擊退出,退出軟件。
語(yǔ)音通信軟件主要利用WinSocket 技術(shù)進(jìn)行設(shè)計(jì),根據(jù)相關(guān)編碼對(duì)語(yǔ)音進(jìn)行采集、抽樣、編碼成數(shù)字信號(hào),能夠?qū)ι傻臄?shù)字信號(hào)進(jìn)行網(wǎng)絡(luò)傳輸。以TCP/IP 協(xié)議進(jìn)行傳輸,基于經(jīng)典的C/S 構(gòu)架,在Windows 平臺(tái)下利用Microsoft Visual C++開(kāi)發(fā)環(huán)境下的網(wǎng)絡(luò)編程。系統(tǒng)性能要求具有較高實(shí)時(shí)性和穩(wěn)定性,得到了實(shí)現(xiàn)。軟件能夠進(jìn)行語(yǔ)音回放、壓縮,建立起語(yǔ)音通話功能。開(kāi)發(fā)出來(lái)的軟件能夠在Windows 平臺(tái)下不同主機(jī)進(jìn)行語(yǔ)言通信,并且通信的延遲能限制在一定范圍內(nèi)。
軟件經(jīng)過(guò)測(cè)試,畫(huà)面干凈、明了,功能達(dá)到了預(yù)期所要的結(jié)果,語(yǔ)音通信連接的發(fā)起迅速,穩(wěn)定。軟件語(yǔ)音通話質(zhì)量有待提高,通話過(guò)程中會(huì)夾雜些雜音,說(shuō)話時(shí)的聲音并沒(méi)有想象中的清晰,而且在不穩(wěn)定的網(wǎng)絡(luò)環(huán)境下可能會(huì)導(dǎo)致語(yǔ)音通話斷線。其次是缺少一些輔助功能的實(shí)現(xiàn),可以向著視頻語(yǔ)音開(kāi)發(fā)。增加一些音量調(diào)節(jié)按鈕,錄音、拍照、通訊錄等功能。