李金林,代品宣,李震
(江苏科技大学 电子信息学院,江苏 镇江 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.