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