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