李金林,代品宣,,李震
?。ńK科技大學(xué) 電子信息學(xué)院,江蘇 鎮(zhèn)江 212003)
摘要:為了提高室內(nèi)外環(huán)境中噪聲監(jiān)測(cè)的便捷性,,針對(duì)Android平臺(tái),,設(shè)計(jì)手機(jī)分貝儀軟件,。研究Android系統(tǒng)音頻架構(gòu)和錄音原理,實(shí)時(shí)處理麥克風(fēng)采集到的PCM編碼的音頻流,,使用聲壓級(jí)公式計(jì)算分貝值大小,。按照軟件開(kāi)發(fā)流程,對(duì)手機(jī)分貝儀進(jìn)行需求分析,、界面設(shè)計(jì),、模塊設(shè)計(jì)、數(shù)據(jù)庫(kù)設(shè)計(jì),,最終編碼實(shí)現(xiàn),。詳細(xì)介紹了Android平臺(tái)上音頻采集、儀表盤,、噪聲值曲線的實(shí)現(xiàn)方法,。測(cè)試結(jié)果表明,手機(jī)分貝儀軟件基本達(dá)到普通聲級(jí)計(jì)精度要求,,有效降低了噪聲監(jiān)測(cè)工作的成本,。
關(guān)鍵詞:Android;音頻系統(tǒng),;分貝儀,;聲壓級(jí)
0引言
隨著現(xiàn)代工業(yè)、建筑業(yè)和交通運(yùn)輸業(yè)的迅速發(fā)展,,噪聲污染日益嚴(yán)重,,它影響和破壞了人們的正常生活和工作,危害人體健康,,已成為當(dāng)今社會(huì)四大公害之一,。聲級(jí)計(jì)是聲學(xué)測(cè)量中常用的基本儀器,可廣泛用于環(huán)境噪聲,、機(jī)器噪聲,、車輛噪聲以及其他各種噪聲的測(cè)量[1]。隨著現(xiàn)代數(shù)字信號(hào)處理和芯片技術(shù)的進(jìn)步,,電子音頻技術(shù)已經(jīng)廣泛應(yīng)用到移動(dòng)終端中,,把手機(jī)作為聲級(jí)計(jì),是計(jì)算機(jī)技術(shù)與聲學(xué)領(lǐng)域的有益結(jié)合,。
Android是Google公司推出的一款專門為移動(dòng)平臺(tái)定制的,、到目前為止最熱門的嵌入式手機(jī)操作系統(tǒng) [2]。2015年上半年中國(guó)智能手機(jī)市場(chǎng)分析報(bào)告中指出,,Android機(jī)型關(guān)注量高達(dá)71.9%,。為了提高室內(nèi)外環(huán)境中噪聲監(jiān)測(cè)的便捷性,在Android上進(jìn)行音頻信號(hào)處理相關(guān)的研究與開(kāi)發(fā)成為一種必要,。本文以Android移動(dòng)終端為平臺(tái),,設(shè)計(jì)手機(jī)分貝儀軟件,。
1Android音頻系統(tǒng)
Android設(shè)備的音頻系統(tǒng)[35]由ALSA框架實(shí)現(xiàn),該框架在Linux內(nèi)核中為聲卡提供了OSS驅(qū)動(dòng)組件,,輸入/輸出組件負(fù)責(zé)播放PCM聲音輸出和從外部獲取的PCM聲音,,用Java層管理聲音設(shè)備和對(duì)應(yīng)的屬性設(shè)置。ALSA自上而下由Audio應(yīng)用程序,、Audio Java框架層,、Audio本地框架層、Audio Flinger,、Audio硬件抽象層,、ALSALIB和底層Audio驅(qū)動(dòng)組成。
1.1錄音功能實(shí)現(xiàn)
Android錄音工作亦通過(guò)分層的方法實(shí)現(xiàn),,如圖1所示,,每層向上提供對(duì)應(yīng)的調(diào)用接口,并調(diào)用下層提供的接口,,保證了Android音頻系統(tǒng)的健壯性和穩(wěn)定性,。
Android使用錄音功能時(shí),先設(shè)置輸入源,、采樣格式等參數(shù),然后建立音軌,,獲得服務(wù)代理端,。
在Android音頻相關(guān)類中,Audio Record和Audio Track分別完成音頻數(shù)據(jù)的采集和輸出,。
Audio Track提供兩種數(shù)據(jù)加載模式,,即流模式和靜態(tài)模式,及多種音頻流類型,,如Alarm等,,通過(guò)共享內(nèi)存方式完成與Audio Flinger之間的數(shù)據(jù)傳遞。
而Audio Flinger是Audio系統(tǒng)的核心,,它處理各種數(shù)據(jù)并最終寫入Audio的硬件抽象層,。Audio Flinger包含Duplicating Thread、Record Thread,、Direct Output Thread三個(gè)內(nèi)部類和一些外部類(如Mixer Thread,、Client等)。Audio Flinger駐留于Media Server,。
Audio Policy Service是控制Audio系統(tǒng)的,,包括HAL對(duì)象Audio Policy Interface,它與硬件相關(guān),,提供一切設(shè)備切換管理和音量控制接口,。
Android音頻錄入系統(tǒng)動(dòng)建立過(guò)程如圖2所示,。
1.2音頻格式
音頻流的數(shù)據(jù)經(jīng)過(guò)編碼后對(duì)應(yīng)的音頻文件分別為AMR格式和PCM格式,前者數(shù)據(jù)是被壓縮的,,后者可以直接讀取音頻數(shù)據(jù),。WAV文件(*.wav)中存放的就是PCM數(shù)據(jù)。文件格式分為3個(gè)部分:Riff塊描述,、FMT子塊,、Data子塊。MP3文件(*.mp3)由3部分組成:TAG_V2(ID3V2),,F(xiàn)rame,,TAG_VI(ID3V1)。這3部分順序存放在文件,,但并不是所有的MP3文件都同時(shí)具有這3部分,。
2分貝儀原理
噪聲測(cè)量技術(shù)中直接測(cè)量噪聲的聲強(qiáng)是比較困難的,而聲壓則是比較容易測(cè)量的物理量[1],。
人耳是對(duì)聲壓產(chǎn)生反應(yīng)的,,同時(shí)聲波的傳輸規(guī)律也主要是由聲壓的變化規(guī)律來(lái)描述。
一般的聲壓測(cè)量系統(tǒng)由傳聲器,、聲級(jí)計(jì),、示波器、數(shù)據(jù)記錄儀,、信號(hào)分析儀組成,。傳聲器將聲壓信號(hào)轉(zhuǎn)換為電壓信號(hào);聲級(jí)計(jì)將電壓信號(hào)放大,、加權(quán),、倍頻程濾波、均方根檢波和對(duì)數(shù)轉(zhuǎn)換,,最后給出噪聲的聲壓級(jí),、計(jì)權(quán)聲壓級(jí)或倍頻聲壓級(jí);示波分儀器則將聲壓測(cè)量結(jié)果可視化,,并有效存儲(chǔ)和管理[6],。
聲壓級(jí)的定義為,均方根聲壓與基準(zhǔn)聲壓之比的以10為底的對(duì)數(shù)乘以20,,以分貝(dB)表示[7],。對(duì)于空氣中的聲音傳播,基準(zhǔn)聲壓量通常定為20 μPa,,即0 dB,。
時(shí)間計(jì)權(quán)的定義是規(guī)定時(shí)間常數(shù)的時(shí)間指數(shù)函數(shù),該函數(shù)是針對(duì)瞬時(shí)聲壓的平方而進(jìn)行計(jì)算[8],。對(duì)于任何瞬時(shí)時(shí)間上的A計(jì)權(quán)和時(shí)間計(jì)權(quán)聲級(jí)用LAτ(t)表示:
式(1)表明,,聲學(xué)測(cè)量的聲壓級(jí)是交變聲壓的有效值,,有效值指的是一段時(shí)間內(nèi)信號(hào)的均方值根。
對(duì)于起伏的或者是不連續(xù)的噪聲,,很難確定A聲級(jí)的大小,,為此可用能量平均的方法來(lái)評(píng)價(jià)噪聲對(duì)人的影響。以一個(gè)A聲級(jí)表示間歇變化出現(xiàn)的A聲級(jí),,即:
在公式(2)中,,LA是變化的A聲級(jí)瞬時(shí)值,單位為dB,;T是某段時(shí)間內(nèi)的總量,。
在電子線路中可以采用積分電路對(duì)信號(hào)進(jìn)行一段時(shí)間內(nèi)的平均。但是實(shí)際測(cè)量噪聲時(shí),,是通過(guò)不連續(xù)的采樣進(jìn)行測(cè)量[8],。在計(jì)算機(jī)系統(tǒng)中,采樣時(shí)間間隔相等,,則:
在公式(3)中:N是測(cè)量的聲級(jí)總個(gè)數(shù),。本文設(shè)計(jì)的分貝儀軟件通過(guò)等效聲壓級(jí)公式計(jì)算出分貝值。將聲音緩存中的數(shù)據(jù)取出,,用平方和除以總數(shù)據(jù)長(zhǎng)度,,得到分貝值大小。
3手機(jī)分貝儀設(shè)計(jì)
3.1界面設(shè)計(jì)
分貝儀的功能包括:分貝值,、儀表盤,、環(huán)境判別、噪聲曲線,。頁(yè)面分為3部分,上部為儀表盤,,中部為文字,,下部為曲線圖。中部的左半部分為實(shí)時(shí)數(shù)值顯示,,中部的右半部分為當(dāng)前環(huán)境的判別顯示結(jié)果,。
3.2音頻采集
在Eclipse中, DB Activity.java對(duì)應(yīng)db_screen.xml視圖,。在清單文件中加入RECORD _AUDIO ,、RESTART_PACKAGE等權(quán)限,同時(shí)聲明最低SDK版本,、硬件支持和音頻轉(zhuǎn)換所需的函數(shù)庫(kù),。
DB Activity初始化后,調(diào)用getNoiseLevel()函數(shù),。函數(shù)中不斷循環(huán)地啟動(dòng)mAudioRecord線程,,使用getMinBufferSize方法創(chuàng)建音頻數(shù)據(jù)緩沖區(qū),,該對(duì)象的3個(gè)參數(shù)分別為采樣頻率、聲道設(shè)置和編碼制式,。根據(jù)公式(3),,將buffer中內(nèi)存取出,進(jìn)行平方和運(yùn)算,,把實(shí)時(shí)分貝值賦值給公共變量DB Value,。延時(shí)100 ms后,結(jié)束mAudioRecord線程,。
3.3儀表盤設(shè)計(jì)
手機(jī)分貝儀的儀表盤使用needle圖片作為指針,、panel圖片作為背景表盤,它們?cè)赿b_screen.xml視圖上中心位置重合在一起,。在DB Activity初始化后,,同時(shí)啟動(dòng)一個(gè)定時(shí)器,設(shè)置進(jìn)度表為100 ms,,在這個(gè)子線程中發(fā)送數(shù)據(jù)消息給handler,,就在handle中配合主線程更新分貝儀的UI。本文使用的儀表盤的最大角度是172°,,而儀表盤實(shí)際刻度是從0到100均勻的,,因此把公共變量DB Value乘以1.72賦值角度變量Degree,然后使用旋轉(zhuǎn)RotateAnimation方法更新needleview視圖,,最終實(shí)現(xiàn)實(shí)時(shí)分貝值在儀表盤上的精確顯示,。
3.4環(huán)境判定
根據(jù)實(shí)際測(cè)得的分貝值,對(duì)一般噪聲的危險(xiǎn)接觸級(jí)別進(jìn)行劃分,,進(jìn)而判定用戶所處噪音環(huán)境,,比如0~20 dB是非常安靜,20~40 dB是低語(yǔ)等,,在儀表盤所依賴的定時(shí)器中,,用if…else進(jìn)行判定,并使用SpannableString Builder方法高亮顯字文本字段,。實(shí)時(shí)分貝值也是在這一線程更新到分貝儀UI中的TextView上,。
3.5噪聲值曲線
在儀表盤功能實(shí)現(xiàn)所依賴的定時(shí)器中,實(shí)現(xiàn)噪聲值曲線的繪制功能,。在DB Activity中定義DBValueChart數(shù)組,,使用移位方法進(jìn)行數(shù)據(jù)更新。把該數(shù)組中的內(nèi)容賦給PathViewChart,,調(diào)整好線,、點(diǎn)、文字、連接線的類型以及間隔,、比例尺后,,在Canvas上繪制橫軸、縱軸和曲線實(shí)現(xiàn)曲線圖,。噪聲值曲線的定時(shí)器每隔100 ms自動(dòng)更新一次,,從而實(shí)現(xiàn)曲線的快速動(dòng)態(tài)變化。
3.6數(shù)據(jù)庫(kù)設(shè)計(jì)
為便于離線分析,,在手機(jī)分貝儀中建立采集結(jié)果SQLite數(shù)據(jù)庫(kù),。以當(dāng)前天數(shù)為表名, 將實(shí)時(shí)采集分貝數(shù)值存入表中,。因?yàn)閿?shù)據(jù)采集量大,,全部存入會(huì)導(dǎo)致內(nèi)存溢出,所以設(shè)計(jì)按鍵,,長(zhǎng)按時(shí),,音頻才會(huì)保存。
4APK生成與測(cè)試
將工程文件導(dǎo)出,,生成APK安裝包,,安裝到HTC M7手機(jī)上,將手機(jī)分貝儀和TES52A噪音計(jì)進(jìn)行對(duì)比測(cè)試,。以較大的聲音說(shuō)話,,檢測(cè)到聲壓大小為61 dB,指針指到儀表盤61刻度的位置上,,環(huán)境判別部分60~70 dB這一行文本高亮顯示,,同時(shí),下方也留下分貝值軌跡曲線,。經(jīng)過(guò)吹氣,、咳嗽、鼓掌,、敲玻璃,、說(shuō)話等操作,得到的噪音測(cè)量對(duì)比測(cè)試結(jié)果如表1所示,。
5校園環(huán)境噪聲監(jiān)測(cè)系統(tǒng)
近年來(lái),交通行駛,、校園活動(dòng)等所引起的環(huán)境噪聲污染嚴(yán)重影響了高校教職工及學(xué)生們的學(xué)習(xí),、工作和生活。
噪聲污染具有即時(shí)性和隨機(jī)性,,傳統(tǒng)的人工監(jiān)測(cè)方式易受到非技術(shù)因素的干擾,,實(shí)時(shí)性和準(zhǔn)確性較差。而傳統(tǒng)的有線方式則存在布網(wǎng)困難,、成本高,、易被破壞等問(wèn)題[9],。針對(duì)上述問(wèn)題,將該手機(jī)分貝儀用于校園環(huán)境噪聲監(jiān)控系統(tǒng),,如圖3所示,。
校園環(huán)境噪聲檢測(cè)系統(tǒng)能夠?qū)崿F(xiàn)對(duì)各個(gè)位置站點(diǎn)進(jìn)行7×24小時(shí)的實(shí)時(shí)監(jiān)測(cè),手機(jī)監(jiān)測(cè)終端通過(guò)3G/4G網(wǎng)絡(luò)接入到服務(wù)器機(jī)房,,客戶端采用Web方式實(shí)時(shí)查詢,、統(tǒng)計(jì)分析,以及對(duì)監(jiān)測(cè)終端進(jìn)行管理[10],。當(dāng)出現(xiàn)長(zhǎng)時(shí)間的噪聲超標(biāo)或者設(shè)備故障時(shí),,系統(tǒng)能夠自動(dòng)進(jìn)行告警操作,如發(fā)送短信至噪聲排放單位責(zé)任人的另一部手機(jī)上,,從而達(dá)到監(jiān)測(cè)區(qū)域噪聲防護(hù)的目的,。
依據(jù)需求,對(duì)Android分貝儀作如下拓展:
?。?)結(jié)合Baidu Maps,,使用Location Manager函數(shù)獲取當(dāng)前測(cè)量區(qū)域的經(jīng)緯度位置[11],然后添加MAC地址和實(shí)時(shí)分貝值數(shù)據(jù),,將所有的數(shù)據(jù)類型轉(zhuǎn)換為XSD格式,,以待上報(bào)至服務(wù)器。
?。?)通過(guò)Web Service實(shí)現(xiàn)監(jiān)測(cè)數(shù)據(jù)的上傳功能,。通過(guò)SOAP協(xié)議將監(jiān)測(cè)數(shù)據(jù)封裝后,發(fā)送到網(wǎng)絡(luò)服務(wù)器,、應(yīng)用服務(wù)器,,服務(wù)器根據(jù)上層的用戶設(shè)置返回消息到Android手機(jī)監(jiān)測(cè)終端。終端根據(jù)下發(fā)的指令提示責(zé)任人采取降噪措施,。
使用JavaEE + JBoss + MySQL構(gòu)建校園環(huán)境噪聲監(jiān)測(cè)系統(tǒng)的服務(wù)器端,,經(jīng)過(guò)部署,得到某時(shí)刻?hào)|校區(qū)的部分地點(diǎn)的環(huán)境噪聲分布如圖4所示,。此時(shí),,正門口的夢(mèng)溪路的噪聲分貝值為79 dB,電信學(xué)院大廳為61 dB,,自習(xí)教室為47 db,,籃球場(chǎng)上噪音分貝值為50 dB。
中華人民共和國(guó)城市區(qū)域環(huán)境噪聲標(biāo)準(zhǔn)規(guī)定[12],,居住,、文教機(jī)關(guān)為主的區(qū)域,白天噪音不得超過(guò)55 dB,夜間不超過(guò)45 dB,。根據(jù)上述測(cè)量結(jié)果,,應(yīng)在夢(mèng)溪路上采取禁止鳴笛、安裝隔音板等措施,,以降低教學(xué)環(huán)境中的交通噪音污染,。
6結(jié)論
本文基于Android平臺(tái)設(shè)計(jì)與實(shí)現(xiàn)手機(jī)分貝儀。首先介紹Android音頻系統(tǒng)的分層結(jié)構(gòu)和錄音原理,,接著分析APP實(shí)現(xiàn)的理論基礎(chǔ)及聲壓級(jí)計(jì)算公式,,然后進(jìn)行需求分析、模塊設(shè)計(jì),、界面設(shè)計(jì),、數(shù)據(jù)存儲(chǔ)設(shè)計(jì),最后詳細(xì)敘述了分貝值儀表盤和分貝值曲線的實(shí)現(xiàn)方法并生成APK安裝包,。
本文將Android分貝儀與TES52A噪音計(jì)對(duì)比使用,,達(dá)到了普通聲級(jí)計(jì)的精度要求。Android分貝儀的便捷性,、廣泛性,、普適性遠(yuǎn)遠(yuǎn)高于普通聲級(jí)計(jì)。
本文對(duì)Android分貝儀的位置獲取,、網(wǎng)絡(luò)傳輸,、閾值告警的功能進(jìn)行擴(kuò)展,應(yīng)用到校園環(huán)境噪聲監(jiān)控系統(tǒng),。試驗(yàn)結(jié)果表明,,本方案能有效減低環(huán)境噪聲監(jiān)測(cè)工作的成本。
參考文獻(xiàn)
?。?] 張紹棟. 聲級(jí)計(jì)的原理和應(yīng)用[M]. 北京:計(jì)量出版社,,1986.
[2] EVERY S V. Android多媒體開(kāi)發(fā)高級(jí)編程[M]. 巢文涵,,譯.北京:清華大學(xué)出版社,,2012.
[3] Song Maoqiang, Xiong Wenkuo, Fu Xiangling. Research on architecture of multimedia and its design based on android[C].Internet Technology and Applications, IEEE, 2010: 14.
?。?] 林東海.基于ALSA的Android音頻系統(tǒng)設(shè)計(jì)與實(shí)現(xiàn)[D].廈門:廈門大學(xué),2013.
?。?] 李寧. Android深度探索[M].北京:人民郵電出版社,2015.
[6] 楊昌棋, 秦樹(shù)人. 虛擬式噪聲分析儀的數(shù)字計(jì)權(quán)與開(kāi)發(fā)[J]. 重慶大學(xué)學(xué)報(bào)(自然科學(xué)版), 2001, 24(5): 5961.
?。?] DUMOULIN R, VOIX J. On the use of smartphones for occupational noise monitoring: instrumentation[J]. Canadian Acoustics, 2012, 40(3): 5253.
?。?] MENNITT D J, FRISTRUP K M. Obtaining calibrated sound pressure levels from consumer digital audio recorders[J]. Applied Acoustics, 2012, 73(11): 11381145.
[9] 王一.室內(nèi)真實(shí)噪聲環(huán)境下聲音事件在線檢測(cè)與識(shí)別[D].北京:北京大學(xué),2013.
?。?0] 趙大磊, 張正平, 賀松,等. 基于Android的移動(dòng)互聯(lián)網(wǎng)健康監(jiān)測(cè)系統(tǒng)的研究[J]. 微型機(jī)與應(yīng)用, 2014, 33(8):1012.
?。?1] 代品宣,李震,盧超,等. 基于Android的校園導(dǎo)游和定位系統(tǒng)設(shè)計(jì)與實(shí)現(xiàn)[J]. 江蘇科技大學(xué)學(xué)報(bào)(自然科學(xué)版),2015,29(4):378381.
[12] 中華人民共和國(guó)城市區(qū)域環(huán)境噪聲標(biāo)準(zhǔn)[J]. 環(huán)境保護(hù),1996(12):7.