国产日韩欧美一区二区三区三州_亚洲少妇熟女av_久久久久亚洲av国产精品_波多野结衣网站一区二区_亚洲欧美色片在线91_国产亚洲精品精品国产优播av_日本一区二区三区波多野结衣 _久久国产av不卡

?

基于雙緩沖技術(shù)的音頻數(shù)據(jù)實時采集與播放

2016-11-09 06:35:26文明
聲學(xué)與電子工程 2016年2期
關(guān)鍵詞:操作員聲吶驅(qū)動程序

文明

(第七一五研究所,杭州,310023)

基于雙緩沖技術(shù)的音頻數(shù)據(jù)實時采集與播放

文明

(第七一五研究所,杭州,310023)

為提高聲吶模擬演示系統(tǒng)的真實性,并能迅速對目標(biāo)類型進(jìn)行初步判斷,設(shè)計一種實時采集、播放收聽聲吶數(shù)據(jù)的實現(xiàn)方法,采用雙緩沖技術(shù)來避免信號的不連續(xù)和延遲,完整的恢復(fù)了目標(biāo)的聲音特性,縮短操作員判別目標(biāo)的時間。

實時采集;播放;聲音信號;雙緩沖

在聲吶模擬顯控設(shè)計中,設(shè)計者往往只關(guān)心目標(biāo)的圖形和字符信息,因此,操作員要根據(jù)目標(biāo)的多種信息(如警戒、目標(biāo)特征譜線等)來判斷目標(biāo)的類型,這就要求操作員對目標(biāo)進(jìn)行更多的操作和設(shè)置來獲得這些信息,這會在某種程度上延誤了戰(zhàn)機(jī)。經(jīng)驗豐富的操作員往往對某些特定目標(biāo)(如魚雷)的聲音異常敏感。針對以往在設(shè)計中只是關(guān)心圖形和文字信息而無聲音信號輸出的遺漏,本文提出一種實時采集目標(biāo)的聲音信號并利用雙緩沖技術(shù)進(jìn)行播放出來的方法。

1 雙緩沖技術(shù)簡介

雙緩沖是圖形圖像處理編程過程的一種基本技術(shù)。窗體在響應(yīng)WM_PAINT消息時要進(jìn)行復(fù)雜的圖形處理,重繪時會因為頻繁的刷新而引起閃爍,因此采用了雙緩沖技術(shù)來避免這種情況的發(fā)生。雙緩沖技術(shù)即在內(nèi)存中創(chuàng)建一個與屏幕繪圖區(qū)域一致的對象,先把圖形繪制到內(nèi)存中的這個對象上,再一次性將這個對象上的圖形拷貝到屏幕上[1]。在音頻數(shù)據(jù)處理時,如果直接采集數(shù)據(jù)然后播放出來會明顯感覺到聲音的卡頓,因此想到能否把雙緩沖繪圖的方法延伸到雙緩沖播放上來。在數(shù)據(jù)采集時,先把數(shù)據(jù)在內(nèi)存中分別用兩個數(shù)據(jù)驅(qū)動中保存下來,在播放時采用撥動開關(guān)的模式選擇播放相應(yīng)數(shù)據(jù)驅(qū)動上的數(shù)據(jù)。實踐證明,這種想法不但能大大加快數(shù)據(jù)的處理,并且避免播放聲音時會出現(xiàn)卡頓的現(xiàn)象。

2 設(shè)計原理

要實現(xiàn)對聲吶數(shù)據(jù)的實時采集、處理、播放,我們采用Windows MDK的低層音頻服務(wù)比較合適,因為低層音頻服務(wù)中的回調(diào)機(jī)制為我們提供了很大的方便。當(dāng)應(yīng)用程序不斷向設(shè)備驅(qū)動程序提供音頻數(shù)據(jù)時,設(shè)備驅(qū)動程序控制音頻設(shè)備在后臺完成放音的具體操作,通過回調(diào)機(jī)制,又可以檢測到什么時候用完一個數(shù)據(jù)塊,并及時傳送下一個數(shù)據(jù)塊,從而保證了聲音的連續(xù)。在網(wǎng)絡(luò)接收聲吶數(shù)據(jù)方面,選擇不需連接的UDP協(xié)議。在聲吶輸出的結(jié)果中,不僅僅只輸出聲吶收聽數(shù)據(jù),如果采用面向連接的TCP協(xié)議就可能產(chǎn)生數(shù)據(jù)堵塞而導(dǎo)致聲吶數(shù)據(jù)播放的時候出現(xiàn)卡頓或者延遲。實時采集和播放聲吶收聽數(shù)據(jù)的設(shè)計框圖如圖1。

圖1 聲吶實時數(shù)據(jù)處理設(shè)計框圖

3 實現(xiàn)

首先要介紹一下Windows低層波形音頻數(shù)據(jù)塊結(jié)構(gòu) WAVEHDR,其聲明如下:

聲音的采集和播放都是在操作這個音頻數(shù)據(jù)塊結(jié)構(gòu),實際上主要用到的就是第一個成員變量lpData,所以只要在分配緩沖區(qū)(內(nèi)存)的同時相應(yīng)分配WAVEHDR數(shù)據(jù)塊結(jié)構(gòu),然后將緩沖區(qū)的指針賦給對應(yīng)的數(shù)據(jù)塊結(jié)構(gòu)的成員變量 lpData。這樣當(dāng)一個緩沖區(qū)填滿后,即一個音頻數(shù)據(jù)塊填滿了,通過消息機(jī)制可以在消息函數(shù)中進(jìn)行處理和播放,播放完后又可通過消息函數(shù)把緩沖區(qū)再送給音頻設(shè)備輸入驅(qū)動程序,繼續(xù)進(jìn)行采集并播放。一次性分配多個緩沖區(qū)和數(shù)據(jù)塊結(jié)構(gòu)并賦給音頻設(shè)備輸入驅(qū)動程序,這個過程完全由Windows控制(選擇緩沖區(qū)填滿,然后再把哪個空緩沖區(qū)賦給設(shè)備輸入驅(qū)動程序),不需人為干預(yù)。這是一種用動態(tài)循環(huán)緩沖區(qū)實現(xiàn)話音的實時采集、播放的簡單而巧妙的辦法。具體實現(xiàn)設(shè)計框圖如圖2。

圖2 雙緩沖數(shù)據(jù)播放設(shè)計框圖

在實現(xiàn)的過程中,通過下面三個消息映射來完成數(shù)據(jù)接收和播放。

ON_MESSAGE(MM_WOM_OPEN,OnWomOpen)

ON_MESSAGE(MM_WOM_DONE,OnWomDone)

ON_MESSAGE(MM_WOM_CLOSE,OnWomClose)[3]

在waveOutOpen中要指定一個窗口來處理接收波形輸出,用消息機(jī)制向消息隊列發(fā)送了MM_WOM_OPEN消息。處理MM_WOM_OPEN消息時,把兩個WAVEHDR結(jié)構(gòu)傳送給waveOutWrite,此函數(shù)將數(shù)據(jù)傳送到波形輸出硬件,才真正開始播放聲音,當(dāng)波形硬件播放完waveOutWrite函數(shù)傳送來的數(shù)據(jù)后,就向窗口發(fā)送MM_WOM_DONE消息。SINEWAVE在處理此消息時,將計算緩沖區(qū)的新數(shù)據(jù),并調(diào)用waveOutWrite來重新提交緩沖區(qū)。

4 結(jié)論

從技術(shù)設(shè)計上來說,這種雙緩沖數(shù)據(jù)播放技術(shù)優(yōu)點有兩個。首先,我們不需要關(guān)心聲卡底層的處理,只需要實時將數(shù)據(jù)塊填滿等待調(diào)度即可。其次,播放聲音連續(xù)且不失真。

為了驗證這種方法的可行性,我們將這項技術(shù)用在和某院校合作的《基于信號級的聲吶仿真系統(tǒng)》上來。很明顯,模擬演示系統(tǒng)增加了目標(biāo)收聽這個功能后,不但提高了演示系統(tǒng)的真實性,更重要的是,在集中演練的時候,操作員只需根據(jù)目標(biāo)的聲音并結(jié)合基本的圖形輸出即可對目標(biāo)迅速做出反應(yīng)。如今的聯(lián)合作戰(zhàn)演練中,各作戰(zhàn)模塊的功能愈來愈多,在錯綜復(fù)雜的功能中迅速做出選擇尤為重要。作為一種很直接的表現(xiàn)形式,演示系統(tǒng)中的收聽功能必不可少。

[1] 雙緩沖技術(shù)繪圖[EB/OL]. (2014-04-09). m.blog.csdn.net/ article/details? id=23269643.

[2] 林文煥. 基于WaveX低級音頻函數(shù)的實時語音通信[Z/OL]. (2007-04-03) http://www.wavecn.com/content.php? id=95.

[3] 記憶碎片. VC中實現(xiàn)語音數(shù)據(jù)的采集[Z/OL]. (2011-11-04). http://yaycici.log.163.com/blog/static/173759063201110 44 4857597/.

猜你喜歡
操作員聲吶驅(qū)動程序
探索大洋的“千里眼”——聲吶
美空軍特種戰(zhàn)術(shù)操作員正在進(jìn)行軍事自由落體跳傘
軍事文摘(2022年13期)2022-08-27 01:26:36
一種便攜式側(cè)掃聲吶舷側(cè)支架的設(shè)計及實現(xiàn)
聲吶
淺談基于H3C云計算管理平臺的系統(tǒng)管理功能
面向知識自動化的磨礦系統(tǒng)操作員腦認(rèn)知特征與控制效果的相關(guān)分析
◆新疆青河:遠(yuǎn)教操作員“評星定級”激發(fā)遠(yuǎn)教工作活力
COTS技術(shù)在聲吶裝備中的應(yīng)用
驅(qū)動程序更新與推薦
驅(qū)動程序更新與推薦
乐清市| 荣成市| 平邑县| 防城港市| 曲阜市| 关岭| 大悟县| 阿克苏市| 云龙县| 萝北县| 准格尔旗| 师宗县| 桃园市| 即墨市| 广水市| 阳西县| 长葛市| 嵩明县| 大邑县| 乐昌市| 桦川县| 邯郸县| 遵义市| 济阳县| 利川市| 延川县| 赣榆县| 阿坝| 潮安县| 叶城县| 朝阳区| 凤阳县| 花垣县| 扎赉特旗| 鄢陵县| 长顺县| 晋州市| 东丰县| 灵寿县| 南华县| 合江县|