嵌入式以太網(wǎng)數字語(yǔ)音廣播系統技術(shù)設計
本文引用地址:http://dyxdggzs.com/article/151868.htm
廣播系統軟件分為廣播系統服務(wù)器端軟件和播放終端軟件兩部分。
該設計實(shí)現語(yǔ)音數據的實(shí)時(shí)播放,所以要求語(yǔ)音數據傳輸的實(shí)時(shí)性得到保障,而對于數據的完整性要求不是太嚴格,少量的丟包也不會(huì )影響整體的播放效果,所以該系統的語(yǔ)音數據傳輸采用UDP傳輸方式,同時(shí)本系統工作在局域網(wǎng)內,臨時(shí)用戶(hù)較少,故采用IP地址靜態(tài)分配,簡(jiǎn)化播放終端軟件部分的實(shí)現。
3.1 廣播系統服務(wù)器端語(yǔ)音數據的采集、存儲與發(fā)送
語(yǔ)音數據的采集利用低層WAVE音頻API函數實(shí)現,為了不造成語(yǔ)音數據的丟失,該設計利用雙緩沖來(lái)存儲語(yǔ)音數據,實(shí)現流程如圖3所示。
當一個(gè)錄音緩沖區滿(mǎn)時(shí),系統立刻將另一個(gè)錄音緩沖區發(fā)送給錄音設備繼續錄音,而應用程序此時(shí)要讀取已經(jīng)錄音滿(mǎn)的緩沖區中的數據,并進(jìn)行處理。然后調用waveInAddBuffer函數將該緩沖區重新賦給錄音設備,循環(huán)利用。
為了防止錄音過(guò)程中語(yǔ)音數據的丟失,只是簡(jiǎn)單地利用雙緩沖是不夠的,還要注意的一點(diǎn)是,當一個(gè)緩沖區錄音滿(mǎn)以后,應用程序對該緩沖區的數據進(jìn)行處理,同時(shí)第二個(gè)緩沖區用于錄音,數據處理的時(shí)間一定要小于第二個(gè)緩沖區錄音滿(mǎn)需要的時(shí)間,否則在第二個(gè)緩沖區錄音滿(mǎn)以后第一個(gè)緩沖區還沒(méi)有重新賦給錄音設備,就會(huì )造成語(yǔ)音數據的丟失。當語(yǔ)音信號采樣率大的時(shí)候適當增加緩沖區的大小,可以有效地解決這個(gè)問(wèn)題。
為了將廣播的內容進(jìn)行保存以備后需,需要將廣播內容保存在一個(gè)WAV文件中。WAV文件具有固定的頭格式,在保存語(yǔ)音數據之前,需要先將WAV文件的頭部設定好,否則保存的WAV文件無(wú)法播放。在每一次錄音緩沖區滿(mǎn)時(shí),首先找到WAV文件的結尾處,然后將采集到的數據依次寫(xiě)在文件尾部。當整個(gè)廣播過(guò)程結束時(shí),所有的語(yǔ)音數據都被保存在了WAV文件中,實(shí)現了語(yǔ)音數據的存儲。
當一個(gè)錄音緩沖區滿(mǎn)后,這時(shí)就需要將已經(jīng)采集到的語(yǔ)音數據通過(guò)網(wǎng)絡(luò )發(fā)送出去。在設計中首先利用Csocket類(lèi)創(chuàng )建一個(gè)套接字,接下來(lái)只需要將采集到的數據封裝成IP包發(fā)送出去。該設計中語(yǔ)音信號的采樣率為44.1 kHz,16位雙聲道。為了避免語(yǔ)音數據丟失,錄音緩沖區的大小設定為1024B。
3.2 區域廣播的實(shí)現
以太網(wǎng)數字語(yǔ)音廣播系統的一個(gè)重要應用就是不僅可以實(shí)現全區廣播,同時(shí)可以實(shí)現局域廣播功能,即對指定的終端進(jìn)行廣播。因此,在語(yǔ)音IP數據包的網(wǎng)絡(luò )傳輸中采用UDP組播包的形式進(jìn)行數據傳輸。采用組播包傳輸數據,在局域網(wǎng)內所有包含在該組中的終端都可以接收到數據,實(shí)現全區廣播。為了實(shí)現局域廣播功能,該設計中在語(yǔ)音數據前面添加了一個(gè)結構體,如下所示,同時(shí)還有一個(gè)配置文件用于存儲系統各終端的IP地址。
struct STRING
{String IPNO1;
String IPNO2;
…
String IPNO9;
String IPNO10};
當需要對某幾個(gè)終端進(jìn)行區域廣播時(shí),在廣播系統服務(wù)器端的面板上(如圖4所示)將這幾個(gè)終端對應的編號選上。這時(shí)就將被選中終端的IP地址從配置文件中讀出并賦給該結構體中對應的變量。當終端接收到IP組播包時(shí),首先判斷該結構體是否有和自己的IP地址相同的變量,如果有,則進(jìn)行數據的接收播放,如果沒(méi)有則對數據進(jìn)行丟棄處理,這樣就實(shí)現了區域廣播功能。相對于采用控制信號控制播放終端加入或者離開(kāi)組播組,或者通過(guò)動(dòng)態(tài)維護復雜的映射表以實(shí)現區域廣播功能的方法。該方法不需要在每次廣播之前對播放終端進(jìn)行交互控制,也不需要動(dòng)態(tài)跟蹤終端狀態(tài),只需要在終端第一次加入系統時(shí)將終端對應的IP地址寫(xiě)入配置文件即可,功能實(shí)現簡(jiǎn)單。
3.3 廣播系統播放終端軟件的實(shí)現
廣播系統播放終端分為兩個(gè)部分來(lái)實(shí)現,音頻數據接收部分用于接收語(yǔ)音數據并進(jìn)行存儲轉發(fā),音頻解碼器實(shí)現語(yǔ)音信號的D/A轉換并播放。音頻數據接收部分采用Socket編程實(shí)現從以太網(wǎng)上接收語(yǔ)音數據,在接收到語(yǔ)音數據包以后,首先要對數據包進(jìn)行判斷,是否是發(fā)給自己的數據包。終端通過(guò)將IP包中結構體struct STRING的成員變量與自己的IP地址進(jìn)行比較,如果有成員變量和自己的IP地址相等,則存儲該數據包中的數據,否則丟棄。
評論