音量检测

2024-09-30

音量检测(精选6篇)

音量检测 篇1

一、音量检测的用途

在机器人系统或电子控制装置中, 音量检测有着非常重要的作用, 例如:我校为了参加省科技创新大赛而设计的一款商业街噪音监测机器人 (如图1) 。这款机器人在巡逻到每个商家门口时, 会通过声音传感器检测音量是否超标, 若检测到没有超标则继续巡逻, 若检测到超标则通过语音播放模块播放超标警示并记录音量值。这款机器人如果能够研发成功, 将可以有效地破解全国各地商业街噪声的管理难题。通过对整个机器人系统的分析不难发现, 音量检测是其中最核心的一个子系统。又如:玩具机器人, 你拍一拍手, 它就会唱歌;常见的楼道声控灯, 有声音时能自动点亮, 这些都用到了“音量检测”。

虽然“音量检测”应用广泛, 但目前这方面的介绍资料很少, 所以, 我们特意将商业街噪音监测机器人中采用的音量检测方案整理并分享给大家。

二、音量检测面临的困难

音量检测面临的困难来自于检测的对象, 声音是目前已知的最复杂的信号, 图2是数字示波器采集到的一段人讲话的声音信号。从图中可以看出, 人讲话的声音信号是不断变化的, 而且变化的频率、幅度、相位都是无规则的。驻极体话筒可以将声音转换为电信号, 这个没有任何难度, 但将声音电信号转换成音量值, 就有相当大的难度了。

另外, 在一些应用中要求进行音量检测的同时, 还要排除一些声音干扰, 例如:偶尔的咳嗽声、关门声等, 这也会进一步增加难度。

三、传统的音量检测方案

传统的音量检测通常是基于纯硬件的。用峰值检波器可以将语音信号转变成包络信号, 然后用低通滤波器进行滤波, 滤波后的信号和音量值成正比, 可以传送给单片微型计算机。

两个具体电路的实现方案, 第一个方案是二极管检波电路加3级RC低通滤波, 这个方案的好处是电路简单可靠, 但由于二极管有导通电压的存在, 即使采用导通电压较低的肖特基二极管, 也不能检测幅度低于0.2VPP的声音信号;第二个方案是采用二极管和运算放大器组成的理想检波器加RC电路和运算放大器组成的有源低通滤波器, 这个方案的好处是各项性能较好, 但电路复杂容易不稳定。

四、创新的音量检测方案

传统的音量检测, 在电气性能、经济性、可靠性等方面很难做到最优, 因此, 我们在设计的噪音监测机器人中并未采用, 而是采用了另一种创新方案——“高速采样和数字积分方案”。

新方案获得音量值分几个步骤: (1) 声-电转换。通过话筒, 获得原始声音信号, 原始声音信号中含有所需的响度信息, 但也含有不需要的音高、音色信息。 (2) 采样和数模转换。通过单片机内部的高速采样器获得采样点 (如图3) , 采样频率为300k Hz, 每个采样点再通过单片机内部的模数转换器进行模数转换。 (3) 形成包络。保留最大值点, 形成包络信号 (如图4) , 包络信号中只包含所需的响度信息, 但仍是变化的。 (4) 积分运算。通过积分运算实现求平均值的效果, 在积分时间到的那个时刻得到的积分值 (如图5) , 就是所需的音量值。

语音信号的最高频率是5k Hz , 根据奈奎斯特准则, 采样频率至少是信号频率的2倍, 因此, 采样率必须在10k Hz以上, AD转换器工作速度也必须高于10k Hz。目前市场上的最新型号的8位单片机一般满足这一要求, 我们实际采用的宏晶科技最新推出的15F系列1T单片机, 型号为STC15F2K60S2, 内部采样器和AD转换器速度达到300k Hz, 能满足要求。

声-电转换的装置, 我们采用淘宝上出售的一款声音检测模块 (如图6) , 价格为6.6元, 非常便宜, 上面不光有驻极体话筒, 还有500倍放大电路和灵敏度调节旋钮, 将其模拟量输出脚和单片机的任何一个AD输入脚连接即可。

获取音量值函数核心程序如下, 需要说明的是, 为了简化程序, 我们并没有取最大值, 而是将AD转换值和无声音时候的AD值 (静态值) 进行比较, 比静态值大的保留并累加, 比静态值小的舍去:

在程序中, 选取积分时间为10秒, 目的是为了排除咳嗽声、敲击声等的干扰, 这些干扰声虽然响度较大, 持续时间很短, 一般在1秒左右, 选取较长的积分时间, 就可以将其排除, 但积分时间取得过长也会造成系统提供音量值的刷新时间变长, 不利于有些实时系统的要求。均衡考虑, 我们认为积分时间选择为10秒是合理的。

五、结束语

由于本方案采用单片机内部原来就有的高速采样器、高速数模转换器, 外围电路较为简单, 成本低, 易于调试, 性能稳定可靠, 已成功应用于我们研制的商业街噪音监测机器人中。

摘要:在机器人应用中常常需要检查外界声音的音量值, 但传统的基于硬件的方案成本高、可靠性差, 效果不能让人满意。为此, 笔者在研制一款噪音监测机器人时别出心裁, 发明了一种用于音量检测的创新方案, 该方案具有电路简单、成本低、易于调试、性能稳定的优点。

关键词:机器人,音量检测,创新设计

参考文献

[1]何宾.STC单片机原理及应用——从器件、汇编、C到操作系统的分析和设计[M].北京:清华大学出版社, 2015.

[2]宋跃.单片微机原理与接口技术 (第2版) [M].北京:电子工业出版社, 2015.

数字电视音量控制问题 篇2

随着数字电视整体转换在全国的快速展开, 各地的广播电视台都纷纷建立了自己的数字电视运营平台, 进行数字电视试运营播出, 积累改造经验, 解决改造中的一些难题, 为整体转换打下良好的基础。

在数字电视发展初期, 以ASI切换矩阵作为传统数字前端设备调度平台实现的中心, 我们称之为第一代的数字电视平台。而新一代数字电视前端平台以IP路由软交换和统计复用码流修正功能为特色, 传统数字电视前端所固有的一些技术局限已经得到解决, 我们称之为第二代数字电视平台。徐州广播电视台是较早采用二代技术的市级台, 早在2005年就选用了具备模块化集成化设计的美国BIGBAND公司BMR宽带多媒体路由交换平台作为徐州数字电视前端。徐州台在有线电视数字化改造过程中, 许多用户反应各台伴音不均衡, 相差到了难以容忍的程度。我们将由此为契机来探讨数字电视中的伴音控制三种方案。

2 传统编解码方案

在模拟电视时代, 视音频调制需要调整的参数主要是视频的调制度, 伴音的频偏。过渡到数字电视时代, 由于输入编码器的视频信号均采用标准的1Vp-p全电视信号, 数字信号在传输过程中不会出现画面亮度的改变, 故各转播台一般不需要调整。但伴音信号在进入编码器之前的幅度没有统一的严格规定, 技术人员只有根据个人的经验进行主观的调整, 这就为伴音电平均值的差异形成提供了前提条件。

解决的方法之一就是将进入BIGBAND平台的所有ASI数字信号都解码成视音频基带信号, 再统一送入编码器编码 (如图1) 。编码器可提供模拟和数字音频/视频输

入接口, 对输入的音频和视频信号进行压缩编码, 输出符合MPEG-2标准的TS传输流;也可以通过SPI、ASI、DS3及E3接口与其他标准设备互连。在编码器上可以调整视音频信号的幅度, 反映到用户侧的电视机屏幕上为图像的亮暗变化与伴音的大小变化;通过仔细的反复调整, 也可把各台伴音基本调平, 其难度与模拟电视调整相一致。这两方面都与模拟电视的视频调制度和伴音频偏调整机理、现象有点类似, 故称为传统的编解码调整方案。

以徐州台现有的数字节目80余套计算, 这种方案就需80台编码器, 另需加约20台卫星接收机与解码器, 以便把所有的数字卫星信号解码成视音频信号和SDH下来的信号适配成编码器要求的输入信号格式, 这样就需300万元左右的预算。随着节目套数的增加, 积木式增加设备, 投资成线性增加。从调整的角度来讲, 依然是主观的判断, 没有客观的依据, 较难保证良好的效果。由于增加了编解码的环节, 也就增加了新的故障隐患点。编解码器的实质是对信号进行D/A、A/D转换, 这两个环节对信号的损伤最大, 也就是说这是一种有损调整方案。鉴于以上原因, 我台目前只在自办的五套节目中使用该方案。

3 终端机顶盒解决方案

机顶盒 (STB) 接收HFC网来的数字电视和各种数据信息, 通过解调、解复用、解码和音视频编码 (如图2) , 在模拟电视机上观看数字电视节目和各种数据信息。目前, 机顶盒主要提供基本音视频业务和数据应用, 在一段时期后, 将充分利用CATV网络的带宽实现交互功能, 最终发展成为集解压缩、Web浏览、解密收费和交互控制为一体的数字化终端设备。可以说, 在未来10年内, 机顶盒是模拟电视转向数字电视的桥梁。

在终端用户侧机顶盒上解决各台伴音均衡问题主要有两种方法:一是修改机顶盒的应用程序, 要求厂家提供在线升级程序可分别设置并保存每套节目的左、右声道或立体声设置及音量, 并具有掉电记忆功能。这种方法实现简单, 易操作, 但升级后仍然需用户自行调整, 且有个别版本盒子不支持升级, 问题解决得不彻底。二是在机顶盒数字音频D/A转换后, 电子音量调节前, 增加一级音频AGC, 自动控制调整的范围要达到±15dB。这是一种依靠电路硬件解决的方法, 优点是在网络终端就能解决问题, 其它环节都无需改动;缺点是增加了机顶盒的硬件成本, 对已发放机顶盒的用户只能提供换机服务。

在与厂家沟通时, 机顶盒解决方案要求每台增加20元的成本费, 那么以徐州市30万用户的规模计算, 潜在的成本过于高昂。不过, 随着机顶盒的大规模招标采购, 该项费用也在不断下降。由于机顶盒早已量产, 芯片也早已定型, 修改其硬件难度较高, 同时又考虑到软件升级较硬件改造的便利性, 我们折衷选用了第一种解决方案。在发放机顶盒时, 销售人员检验, 搜台, 调音后再发放下去, 从某种程度上讲也解决了问题。

4 新型的基于IP软交换技术的数字电视平台解决方案

码流修整 (Rateshaping) 是新一代数字电视前端的一项重要技术特征, 工作在节目层中的PID层, 主要用来处理过高的视频码流峰值, 可以改进这种技术用来处理音频流。将其核心的码率变换改为控制音频流中的比例因子的缩放, 以此来控制音量的大小。

由于可以有相同的压扩结构, 因此我们以较简单的层1来说明这种控制方案。图3是MPEG层1的帧结构, 在子带编码中, 传送前每个频带的音频输入需放大到最大电平, 放大的各个比例因子随同各个频带的各块样值一起发送, 以便解码器进行反处理。由此可见比例因子系数反比于该频带的电平, 若同时将各个比例因子进行放大或缩小一定的倍数, 则可以间接控制音量大小。音频层1利用512点FFT对滤波器组输出进行分析, 以确定输入信号的频谱, 产生384个输入样值;与此相区别, 层2采用1024点FFT作用于信号输入端, 样值达到1152个, 当子带内容大致相同时, 三个比例因子可以只发送一个。徐州台的机顶盒招标中要求自动兼容MPEG音频层1与层2。

BIGBAND平台根据PID值提出要处理的音频流, 通过对MPEG-2编码的逆处理, 将音频流解码过程执行到子带编码, 还原到量化层 (如图4) , 即MPEG音频流输入经解复用, 把比例因子提出送到缩放调整器进行调整后再送到复用器, 样值经缓存器缓存与调整后的比例因子同步对齐再送到复用器, 输出调整后的新码流。

缩放调整只是对比例因子乘上一个常系数, 数据处理量很小, 用软件实现即可, 无需昂贵的专用DSP处理器。由于没有解码还原到A/D (这一步骤对伴音的失真最大) , 采用这种方法实现的音量控制对伴音的失真较小。就目前市场上的数字电视设备来说, 还是一些国外厂家掌握第Ⅱ代DTV平台的核心技术, 至今还没有推出能支持此种功能的平台。若本土企业能考虑到电视台的实际要求, 开发出自主知识产权的相关产品, 必然能够对国内电视台和网络公司的前端系统搭建起到一个良好的支持。

5 总结

综上所述, 三种方案比较结果如表一。编解码方案实现方法简单, 但会使前端系统复杂度增加, 只适用于自办节目的调整。机顶盒硬件方案效果好, 但潜在的成本太高, 目前只能采用软件的方法进行折衷。而基于IP软交换技术的数字电视平台的软件解决方案具有系统简单, 失真小, 实现成本低的优点, 应是解决此类问题的发展方向。

摘要:在徐州电视台数字电视改造过程中, 遇到了各频道间音频不均衡的难题, 本文将以此为背景讨论三种音频控制解决方案:编解码器方案、机顶盒方案、基于IP软交换技术的数字电视平台方案。通过方案对比, 指出数字电视平台方案才是今后的发展方向。

关键词:音量控制,机顶盒,MPEG,数字电视

参考文献

[1]王路.浅析第Ⅱ代DTV平台中几项关键技术[J].中国有线电视, 2007.

[2]Seth Kenvin.Grooming by demand, Iinstead of by supply[R].2006.

[3]王宇峰.基于IP路由软交换技术的新一代数字电视前端平台[J].有线电视技术, 2007 (, 7) .

[4]Tektronix.MPEG基础和协议分析指南[M].泰克有限公司:23-28.

数字电视音量控制方案比较 篇3

在数字电视发展初期, A S I切换矩阵作为传统数字前端设备调度平台实现的中心, 我们称之为第一代的数字电视平台。而新一代数字电视前端平台以I P路由软交换和统计复用码流修正功能为特色, 传统数字电视前端所固有的一些技术局限已经得到解决, 我们称之为第二代数字电视平台。徐州广播电视台是较早的采用二代技术的市级台, 早在2 0 0 5年就选用了具备模块化集成化设计的美国B I G B A N D公司B M R宽带多媒体路由交换平台作为徐州数字电视前端。徐州台在有线电视数字化改造过程中出现的许多用户反应各台伴音不均衡, 相差到了难以容忍的程度。我们将由此为锲机探讨数字电视中的伴音控制四种方案。

1 传统编解码方案

在模拟电视时代, 视音频调制需要调整的参数主要是视频的调制度, 伴音的频偏。过渡到数字电视时代, 由于输入编码器的视频信号均采用标准的1 V p-p全电视信号, 数字信号在传输过程中不会出现画面亮度的改变, 故各转播台一般不需要调整。伴音信号在进入编码器之前的幅度没有统一的严格规定, 技术人员只有根据个人的经验进行主观的调整, 这就为伴音电平均值的差异形成了前提条件。

解决的方法之一就是将进入B I G B A N D平台的所有的A S I数字信号都解码成视音频基带信号, 再统一送入编码器编码 (如图1) 。编码器可提供模拟和数字音频/视频输入接口, 对输入的音频和视频信号进行压缩编码, 输出符合M P E G-2标准的T S传输流;也可以通过SPI、ASI、DS3及E3接口与其他标准设备互连。视音频信号的幅度可以在编码器上调整, 反映到用户侧的电视机屏幕上为图像的亮暗变化与伴音的大小变化;通过仔细的反复调整, 也可把各台伴音基本调平, 其难度与模拟电视调整相一致。这两方面都与模拟电视的视频调制度和伴音频偏调整机理、现象有点类似, 故称为传统的编解码调整方案。

以徐州台现有的数字节目80余套计算, 这种方案就需80台编码器, 另需加约20台卫星接收机与解码器, 以便把所有的数字卫星信号解码成视音频信号和S D H下来的信号适配成编码器要求的输入信号格式, 这样就需3 0 0万元左右的预算。随着节目套数的增加, 积木式增加设备, 投资成线性增加。从调整的角度来讲, 依然是主观的判断, 没有客观的依据, 较难保证良好的效果。由于增加了编解码的环节, 也是增加了新的故障点。编解码器的实质是对信号进行D/A, A/D转换, 这两个环节对信号的损伤最大, 也就是说这是一种有损调整方案。鉴于以上原因, 我台目前只在自办的五套节目中使用该方案。

2 终端机顶盒解决方案

机顶盒 (STB:Set Top Box) 接收HFC网来的数字电视和各种数据信息, 通过解调、解复用、解码和音视频编码 (如图2) , 在模拟电视机上观看数字电视节目和各种数据信息。目前, 机顶盒主要提供基本音视频业务和数据应用, 在一段时期后, 将充分利用C A T V网络的宽带宽实现交互功能, 最终发展成为集解压缩、W e b浏览、解密收费和交互控制为一体的数字化终端设备。可以说, 在未来10年内, 机顶盒是模拟电视转向数字电视的桥梁。

在终端用户侧机顶盒上解决各台伴音均衡问题主要有两种方法: (1) 修改机顶盒的应用程序, 要求厂家提供的在线升级程序可分别设置并保存每套节目的左、右声道或立体声设置及音量, 并具有掉电记忆功能。这种方法实现简单, 易操作, 但升级后仍然需用户自行调整, 且有个别版本盒子不支持升级, 问题解决的不彻底。 (2) 在机顶盒数字音频D/A转换后, 电子音量调节前, 增加一级音频A G C, 自动控制调整的范围要达到±1 5 d B。这是一种依靠电路硬件解决的方法, 优点是在网络终端就能解决问题, 其它环节都无需改动。缺点是增加了机顶盒的硬件成本;对已发放机顶盒的用户只能提供换机服务。

在与厂家沟通时, 机顶盒解决方案要求每台增加2 0元的成本费, 那么以徐州市3 0万用户的规模计算, 潜在的成本过于高昂。不过, 随着机顶盒的大规模招标采购, 该项费用也在不断下降。由于机顶盒早已量产, 芯片也早已定型, 修改其硬件难度较高, 同时又考虑到软件升级较硬件改造的便利性, 我们折衷选用了第一种解决方案。在发放机顶盒时, 销售人员检验, 搜台, 调音后再发放下去, 从某种程度上讲也解决了问题。

3 EPG音量控制方案

电子节目指南 (EPG, Electronic Program Guide) , 是指在符合MPEG-2的TS传输流中插入D V B标准定义的业务信息 (S I, Service Information) , 使机顶盒的综合接收图1编解码方案图图2机顶盒框图解码器 (I R D) 可以从T S流中提取出节目提供商播出节目的列表和播出参数, 以直观的形式显示给数字电视用户, 使得用户可以方便地接收、选择数字电视节目。如图三为E P G系统组成。

EPG信息由两部分组成:基本EPG信息和扩展EPG信息。基本EPG信息是指网络信息表 (NIT) 、业务群关联表 (BAT) 、业务描述表 (SDT) 和事件信息表 (EIT) 等。扩展EPG信息是指在基本EPG信息之外, 通过数据轮播传递的EPG信息, 这些信息的入口采用EPG映射表 (EMT) 进行描述, 信息的内容被封装成具有多级目录结构的文件系统, 称为扩展EPG内容信息 (XECI) 。

可以在SDT信息里增加一个表:音量控制表 (VCT:Volume Control Table) , 对各套节目的音量定量描述。在机顶盒端, 每次重新搜索节目时, 除自动读取每套节目的有关信息外, 还要读取音量表, 自动设置音量的初始值。不搜索节目时, 则不读取该表。应用时由技术人员在EPG服务器里修改音量异常节目的音量值。该方案的优点是不需要对系统任何硬件修改, 只需要对E P G服务器端和机顶盒软件升级即可, 后继入网的各类机顶盒需要厂家集成该功能。至目前为止, 该方案是较为可行的方案之一。

4 新型的基于IP软交换技术的数字电视平台解决方案

码流修整 (Rateshaping) 是新一代数字电视前端的一项重要技术特征, 工作在节目层中的P I D层, 主要用来处理过高的视频码流峰值, 可以改进这种技术用来处理音频流。将其核心的码率改变改为控制音频流中的比例因子的缩放, 以此来控制音量的大小。

由于可以有相同的压扩结构, 因此我们以较简单的层1来说明这种控制方案。图四是MPEG层1的帧结构, 在子带编码中, 传送前每个频带的音频输入需放大到最大电平, 放大的各个比例因子随同各个频带的各块样值一起发送, 以便解码器进行反处理。由此可见比例因子系数反比于该频带的电平, 若同时将各个比例因子进行放大或缩小一定的倍数, 则可以间接控制音量大小。音频层1利用512点FFT对滤波器组输出进行分析, 以确定输入信号的频谱, 产生384个输入样值;与此相区别, 层2采用1024点FFT作用于信号输入端, 样值达到1152个, 当子带内容大致相同时, 三个比例因子可以只发送一个。徐州台的机顶盒招标中要求自动兼容MPEG音频层1与层2。

BIGBAND平台根据PID值提出要处理的音频流, 通过对MPEG2编码的逆处理, 将音频流解码过程执行到子带编码, 还原到量化层 (如图五) , 即MPEG音频流输入经解复用, 把比例因子提出送到缩放调整器进行调整后再送到复用器, 样值经缓存器缓存与调整后的比例因子同步对齐再送到复用器, 输出调整后的新码流。

缩放调整只是对比例因子乘上一个常系数, 数据处理量很小, 用软件实现即可, 无需昂贵的专用DSP处理器。由于没有解码还原到A/D (这一步骤对伴音的失真最大) , 采用这种方法实现的音量控制对伴音的失真较小。就目前市场上的数字电视设备来说, 还是一些国外厂家掌握第Ⅱ代D T V平台的核心技术, 至今还没有推出能支持此种功能的平台。若本土企业能考虑到电视台的实际要求, 开发出自主知识产权的相关产品, 必然能够对国内电视台和网络公司的前端系统搭建起到一个良好的支持。

5 结语

综上所述, 四种方案比较结果如表一。编解码方案实现方法简单, 但会使前端系统复杂度增加, 只适用于自办节目的调整。机顶盒硬件方案效果好, 但潜在的成本太高, 目前只能采用软件的方法进行折衷。EPG方案是目前最为可行推广的方案, 应用效果还有待试验中。而基于IP软交换技术的数字电视平台的软件解决方案具有系统简单, 实现代价小的优点, 应是解决此类问题的今后的发展方向。

摘要:在徐州电视台数字电视改造过程中, 遇到了各频道间音频不均衡的难题, 本文将以此为背景讨论四种音频控制解决方案:编解码器方案、机顶盒方案、EPG方案、基于IP软交换技术的数字电视平台方案。通过方案对比, 指出数字电视平台解决方案才是今后的发展方向。

关键词:音量控制,机顶盒,MPEG,数字电视,EPG

参考文献

[1]王路.浅析第Ⅱ代D T V平台中几项关键技术[J].中国有线电视, 2007.

[2]SethKenvin.GROOMINGBY DEMAND, INSTEAD OF BY SUPPLY[R].2006.

[3]Tektronix.MPEG基础和协议分析指南[M].泰克有限公司:23~28.

音量检测 篇4

项目背景

声音, 是多媒体领域里的重要一环, 更是电脑用户上网、娱乐所离不了的。所以音量失常是困扰用户的一个难题。

一个音频文件本身就具有音量大小的属性, 所以播放不同歌曲文件时输出音量也不尽相同, 影响用户听觉体验。在优酷等网站上看小视频, 在播放前和播放后总会有广告, 音量较吵, 多数还不允许用户在播放窗口调节, 所以只能在桌面右下角的扬声器属性处调节, 增添麻烦。

通过以上举例可以看到该作品所应对的播放情形很常见。

项目实现

Direct X, (Direct e Xtension, 简称DX) 是由微软公司创建的多媒体编程接口。由C++编程语言实现, 遵循COM。Direct Sound是Direct X的一个较底层的部件, 提供了丰富的接口函数, 实现.wav格式的波形声音数据的混音、录制及播放等控制。

该项目即通过Direct X编程实现, 示意见图1。

版面所限, 以下各实现部分均只给出较为关键的代码。该项目为2013年度国家级大学生创新训练项目, 该程序的全部源代码以Visual Studio 2010版本的.sln解决方案给出, 已上传至csdn.net, 资源地址为:http://download.csdn.net/detail/chuchus/6297217。

1.录音部分

本项目用到其中的Direct Sound头文件及库文件见下。

#include

#pragma comment (lib, "dsound")

需要依次枚举录音设备、创建设备对象和创建录音buffer。创建录音buffer时需指定所捕获声音数据的存储格式。

WAVEFORMATEX wfx={WAVE_FORMAT_PCM, 1, 22050, 22050, 1, 8, 0};

//依次是采样格式, 声道数, 采样率, 块对齐, 每秒比特数, 采样位深, 额外信息

if (SUCCEEDED (hr=p DSC->Create Capture Buffer (&dscbd, &p DSCB, NULL) ) )

if (FAILED (pp DSCB8->Start (DSCBSTART_LOOPING) ) ) ;//开始录音

DSCBSTART_LOOPING宏定义参数为循环队列方式录音, 即循环不停地捕获声音。至此, 已建立缓冲区并开始捕获相应格式的声音, 直至调用pp DSCB8->Stop () 停止。

2.波形分析

语音信号是一种非平稳的时变信号, 其产生过程与发声器官的运动紧密相关。发生器官的状态变化速度比声音振动速度要缓慢得多。因此语音信号可以认为是短时平稳的。在5~50ms的范围内, 语音频谱特性和一些物理特征参数基本保持不变。这样, 可以将平稳过程的处理方法和理论引入语音信号的短时处理中, 每个短时的语音段成为一个分析帧。通过不同帧的分析, 可以提取到本项目所需要的语音的短时能量和平均幅度。

通常采用一个长度有限的窗函数来截取语音信号形成分析帧, 窗函数w (n) 将需处理区域之外的样点置零来获得当前语音帧。该项目采用矩形窗截取信号。一个N点的矩形窗函数定义为

定义短时能量为:

由式2可见, 短时能量为一帧样点值的加权平方和。特别是采用矩形窗时, 该式可化简为:

在代码实现中需要创建一个定时器Set Timer (h Wnd, TIMER_ID1_SEC, 500, NULL) ;每500毫秒调用相应函数, 将捕获到的数据放入wavedata数组进行分析。

在设定录音格式时, 对WAVEFORMATEX结构体的第一个成员变量赋值为WAVE_FORMAT_PCM。WAVE文件是计算机领域最常用的数字化声音文件格式之一, 后缀为.wav, 按照具体格式不同又可细分。PCM, 即脉冲编码调制 (pulse-code modulation) , 直接存储采样的声音数据没有经过任何的压缩, 是声卡直接支持的数据格式, 这给声音波形的分析带来便捷。该项目中采样位深为8, 取样数据被存储为无符号数, 所以振幅可用下列语句求得:

int amplitude= (unsigned int) labs ( ( (long) wavedata[i]-128L) /afactor) ;

3.声音干预

此部分用到了COM (Component Object Model, 组件对象模型) 与Core Audio API。

COM组件是以WIN32动态链接库 (DLL) 或可执行文件 (EXE) 形式发布的可执行代码组成, 可以给应用程序、操作系统以及其他组件提供服务。

Windows Vista、Windows 7等系统音频系统相比之前的系统有很大的变化, 产生了一套新的底层API即Core Audio APIs。该底层API为高层API (如Media Foundation, 将要取代Direct Show等高层API) 提供服务。

此部分需要包含的头文件见下:

#include

#include

#include

以下语句可直接控制系统音量, 若有变动时在任务栏点出的系统主音量调节界面可看到同步变化。

m_p Endpt Vol Ctrl->Set Master Volume Level Scalar (the_volume_you_want, &m_guid My Context) ;

退出程序前要释放掉相应的资源, 可在析构函数中添加相应语句。

实现效果

最终程序界面中有三个滚动条。第一个自动显示当前系统主音量, 用户可以手动调整, 与在任务栏点击小喇叭图标调整音量效果完全相同;第二个显示实时声音振幅, 每隔500毫秒更新一次, 滑块随振幅高低左右滑动;第三个为临界振幅, 可由用户调整, 若实时振幅大于临界振幅, 程序就会自动干预系统音量, 防止音量过大。

结束语

该程序较好地完成了预期的功能设想, 有以下价值。

同时做到对音量的实时分析和自动干预, 经查阅资料尚无发现有此类软件;

以人为本, 免去了手动调节的繁琐, 让电脑更易用;

为标准键盘定制一组音量控制键 篇5

1 声音控制

Windows XP和Win7对声音的控制是不同的, 具体来说在Windows XP中可以使用waveout Get Volumn和waveout Set Volumn这两个Win32 API来获取和设置系统主音量, 根据MSDN文档的说明, 这两个API函数都对DWORD变量进行操作, 这个变量的高16位是右声道, 低16位是左声道, 0xffff表示满音量, 0表示无音量, 可以采用类似下面的位操作来拼接出DWORD变量:

uint vol= ( (uint) vol Left&0x0000ffff) | ( (uint) vol Right<<16) ;

由于编程及测试环境都是Windows 7, 因此下文主要针对Windows 7来介绍, 如果读者希望在Windows XP下完成本程序, 请自行参阅参考文献1。在Windows 7环境下需要使用MMDevice API和Endpoint Volume API来操控主音量, 这相对复杂, 好在有前人写好了帮助类, 只需要调用帮助类的相关方法就可以了, 具体说明可参阅本文的参考文献2, 下面给出示例代码:

这些代码分3个部分, 首先要建立帮助类的对象, 通过MMDevice来获取End Point对象, 后面的操作都是与Endpoin对象打交道, 获取主音量的大小需要使用Endpoint对象的Audio Endpoint Volume对象的Master Volume Level Scalar属性, 这个属性的大小范围是0.0-1.0, 用它去乘以进度条的最大长度就可以得到进度条的相应指示。最后要注册Audio Endpoint Volume的On Volume Notification事件, 这个事件是当音量发生变化时被激发的, 通过注册这个事件, 就可以在音量变化时重新绘制进度条。示例代码如下:

请注意, 在这个事件处理程序中, Audio Volume Notification Data类的参数data的Master Volume属性指示了当前的主音量, 这个值的范围也是0.0-1.0, 因此设置进度条的方式与上面初始化时是相同的。最后说明下增加和减小音量, 这非常方便, 帮助类已经提供了相应的方法, 代码如下:

2 注册热键

下一步是完成注册热键 (Hotkey) 的过程, 由于要达到的目标是一键控制音量增大和减小, 因此必须在程序中注册全局热键, 这就要使用Register Hotkey这个API, , 具体代码如下:

这里注意, 使用了数字小键盘上的“+”和“/”来分别定义这两个键, 读者可以根据自己需求改动, MSDN文档说明了, 应该使用键盘的VK_CODE来作为参数传送给API, 可以在MSDN文档中查找到所有键的VK_CODE, 不过C#为定义了一个枚举变量Keys, 可以使用这个枚举来作为参数传递给API。注册完热键后, 需要覆盖 (override) Wnd Proc函数来处理WM_HOTKEY消息, 代码如下:

当然不要忘了在程序退出时还必须使用Unregister Hotkey这个API来释放热键, 代码如下:

3 显示音量状态

到目前为止, 实际上已经完成了这个程序的基本功能, 按动键盘就可以使音量增大或减小, 但是如果不给用户一个感官的提示, 用户无法获得感性的对音量大小的认识, 因此笔者还设计了一个在按动热键后短暂停留在桌面右下角的对话框, 用以提示当前的音量, 如图1所示。

要完成图1的设计首先需要在程序一启动就将窗体停靠在桌面右下角的位置, 代码如下:

这里, 使用了C#的Screen类, 其中Working Area属性返回的是桌面上除了任务栏外的边框区域, 通过这个区域与窗体自身的区域的计算, 就可以将窗体停靠到桌面右下角位置。当然根据本程序的应用环境, 设计了程序启动后将自动隐藏到托盘, 于是就需要在上文提到的Wnd Proc函数中响应热键时调用Show Wnd函数, 代码如下:

这里需要注意两点, 由于设计时在窗体的Shown事件时添加了将窗体最小化的代码 (为了实现启动即缩小到托盘) , 因此如果只在此函数中调用Show, 只能将窗体显示出来, 而窗体仍然保持在最小化状态, 因此必须将窗体恢复normal状态。另外, 之所以要在函数一开始先将timer_close这个计时器disable, 是因为存在用户连续点击键盘热键的情况, 这个计时器的目的是在计时器interval时间达到后将窗体重新隐藏, 如果用户连续点击热键, 那么有可能用户后续的点击发生后窗体很快就隐藏了 (因为窗体隐藏的时间段是从第一次用户点击热键开始计算的) , 通过在函数开头先将计时器disable, 可以做到窗体关闭是从用户最后一次点击开始计算interval时间段的。计时器的激活响应处理很直观, 代码如下:

4 自定义进度条

最后看看如何做到上文图示中的进度条效果, 如果使用C#默认的Progress Bar控件, 可以显示一个进度条, 但无法在其中同时显示文字, 要做到上文图示的效果, 必须使用自定义控件, 下面是笔者定义的text Progress Bar控件的代码:

这里做一些解释, 首先[Toolbox Item]特性的定义将给VS IDE一个提示, 让IDE将这个自定义控件中的Public枚举变量放到IDE的属性编辑器里, 以方便可视化设置属性, 代码里设置了Text Color, Text Font, Bar Color 3个属性, 分别代表文字的颜色、字体以及进度条的颜色。请特别注意定义的构造函数中两个Set Style函数的调用, 第一个函数是用于通知系统控件准备自绘制, 这非常重要, 如果没有这条语句, 即使重写了On Paint函数也没有实际效果。第二个Set Style用来平滑进度条的高速变动, 如果用户连续点击热键, 如果没有这条语句, 进度条变动时可能出现闪烁。随后的代码就是在On Paint函数中绘制进度条和文字了, 绘制时根据3个属性来配置画刷, 随后根据Progress Bar的Value属性确定进度条该在的位置, 至于文字可以始终显示在整个控件的中间, 需要注意的是必须先绘制进度条, 再绘制文字, 否则文字会被进度条覆盖。另外由于设置了自绘制, 因此基类的Style属性将不会有直接效果, 除非在On Paint函数中针对此属性做不同的绘制, 代码中并没有这样做, 读者可自行完善。

5 结语

通过C#编程, 将普通标准键盘变身带有音量控制键的自定义键盘, 方便了用户增加或减小音量, 一个小小的工具达到了许多品牌机电脑才有的功能, 读者可进一步完善程序, 实现更好的效果。最后提醒读者, 示例代码只能用于Windows 7系统, 若在Windows XP系统下运行, 必须按前面描述的自行修改音量控制部分代码。

摘要:通过定义热键给标准键盘添加一组控制音量的热键, 模拟笔记本电脑的功能。

关键词:热键,音量控制,自定义进度条

参考文献

[1]http://msdn.microsoft.com/en-us/library/aa719104 (VS.71) .aspx.

[2]http://www.codeproject.com/Articles/18520/Vista-Core-Audio-API-Master-Volume-Control.

音量检测 篇6

我们的大脑无时无刻不在产生脑电波。这些自发的生物电信号的频率变动范围通常在0.1Hz-50Hz之间,根据其频率不同可划分为Delta波、Theta波、Alpha波、Beta波、Gamma波等多种类型。本文即研究通过对脑电波信号的采集、处理、分析,将脑电波信号转换成对耳机进行直接控制的电路信号,从而实现人脑“意念”对耳机的直接控制。

脑电波信号现今已被研究作为一个生物信号输入用于人机交互。在医学上,脑电波信号的人机交互可以帮助残疾人与使用脑电波的机器进行通信。[1]如今脑电波也被广泛的用于智力游戏的开发,帮助人们提高注意力。Neurosky神念科技公司开发的Think Gear AM模块(简称TGAM)是一款世界上非常受欢迎的脑电技术应用模块,它利用一个干式电极就可以从人脑中检测到微弱的脑电信号。本文将TGAM模块应用于音响音量的控制上,实现了比较好的调控效果。

TGAM中的ASIC芯片实际上是一个芯片系统,它集成了脑电信号采集、滤波、放大、A/D转化、数据处理及分析等功能。TGAM模块可直接与干电极相连接,通过单个脑电波信号(EEG)和参考电极以及地线制作脑电波采集仪。并且它可以检测到512Hz的原始脑电信号,可以滤掉噪音,抗干扰。

2 系统构成

整个系统由TGAM模块、蓝牙模块、干电极、耳夹、电源和基于I3HGP的embedded主板、音响等部分组成。如图1所示。TGAM模块、蓝牙模块、干电极、耳夹和电源构成的部分完成脑电波的采集和特性的提取,嵌入式主板完成音量控制的编程和实现。

如图2所示,将TGAM模块与蓝牙模块、干电极以及耳夹(接地电路)、电源的连接,制成简易的脑电采集仪。图3中发光二极管亮表示该脑电采集仪通电可正常工作,通过蓝牙适配器连接电脑,可将采集到的脑电波以及由其生成的专注度、放松度在软件中显示出来。

在基于I3HGP的embedded主板上(见图4)利用VC++平台进行软件编程,动态调用专注度和眨眼数值,实现数据的提取,再将提取好的数据导入混音器中,在满足条件的情况下实现音量控制。

3 脑电波的采集与分析

在TGAM模块的处理下,已经可以将繁杂的脑电波转化为放松度、专注度两个数值,其大小用1~100表示,数值越大表示进入相应程度越深。为了确定音量增减的起始值,我们多次对脑电波进行采集(取其中10次),每次采集5分钟。观察专注度数值,除却开始和最后的1分钟,保留中间最有效3分钟。如图5所示,当我们保持专注时,专注度数值占60以上的比例为60%。图6中,当我们放松时,专注度数值基本在40以下,其中在20以下的占29%。而正常状态下(图7),脑电波专注度数值呈现的范围在20到60之间,占据最多的部分是40~49,占到36%,50~59和20~29分别占28%和20%。

因此设置音量放大、减小的阈值,确定音量控制程序思路:专注度>60时,音量增加,专注度<20时,音量减小。(如图8)音量改变开关,由眨眼值控制:当持续几秒钟能读取到眨眼数据情况下,开关开启。

4 音量控制软件

4.1 Mind Ware后台数据开发

4.1.1静态调控

静态调控是指对于Mind Development Tool(MDT)软件已生成的包含专注度、放松度等数值的后台excel表格的调用。具体调用方法如下:

在实现脑电波静态控制音量的基础上,预想上通过设置clock时钟刷新读取实时的数据,具体方法是,在MIC部分的mic Send String的代码部分加入刷新模块,由于后台excel表中的关于脑电波数据实时变化,设置刷新时间为每1s(如果有需要,可以设置更为小的时间间隔,这里暂设置为1s即可满足需求)刷新一次,从而可以读取新的数据。

4.1.2进程与刷新的设置

除此之外,通过使用进程,设置线程为后台线程,那样进程里就不会有未关闭的程序,避免读取数据和播放音乐之间的互相干扰问题,通过定义线程Thread Log Thread = new Thread(new Thread Start(Do Service))相关代码实现。

通过get Time()读取当前windows时钟Clock的值,获得当前时间,实现每隔1s的重新执行。但是会造成读取excel表的数据重复读取,音量控制上无法形成连贯性,其结果是形成无数次的重复获取数据,每次刷新后从开始播放。试图通过设置标记跟随时间变化来解决,使读取函数从标记的时间点开始读,保留之前读取过的数据,实际操作时却由于形成不断的迭代,无法执行。

4.2 MDT开发

4.2.1 MDT开发的可行性分析

主要思路为通过利用开源的神念传感器连接程序(TGC)与Think Gear通信驱动程序(TGCD),可以直接从Think Gear芯片中获取s Sense数据(包括集中度和放松度),即直接从接口中获取数据,避免了从动态excel表中读取数据。

其中,神念传感器连接程序(TGC)在后台持续运行,并在本地用户的电脑上显示有一个打开的插口,允许应用程序与其连接,并接受已连接好的Think Gear设备发送的信息,这意味着从插口出打开并读取的任何语言的任何程序都能够与Mind Set耳机相连并从其接收数据,并且连接程序的平台包括win-dows。因此,此连接程序的支持PC机上的程序连接接口,让从接口获取数据成为可能。

另外,Think Gear通信驱动(TGCD)包括一个简单的API(位于驱动程序安装文件中),是此方法主要的编程手段。通过在开发环境中加入开发文件:thinkgear.h和thinkgear.lib,利用自己的编程语言,使用TFCD API中的重要函数调用,可以方便快捷的直接读取接口中的数据。

4.2.2 MDT具体开发手段

MDT(mind develop tool)开发包与MRT(mind research tool)包的专注于研究不同,主要用于开发,其中的工具包括:Think GearConnector、Think GearCommunicationsDriver、Think Gear Communications Protocol三种,各自的用途如下:

Think Gear Connector:提供了一个连接软件,获取数据的话,只需要通过socket来获取就可以了。可以把连接和控制分离,但是需要开发者自己获取socket数据并且解析。

Think Gear Communications Driver:提供各种API,方便开发者使用。

Think Gear Communications Protocol:属于最底层的通信协议,一般不会用到。

第一种方法:Think Gear Connector,以TGC作为基础,也就是一个服务器,执行TThhiinnkk GG eeaarr ssoocckkeett协议,负责在其他设备中响应授权请求与传播耳机数据。TThhiinnkk GGeeaarr ssoocckkeett协议是基于JJSSOONN的,在协议连接的使用期主要经过以下几个阶段:套接字的创建、一次性的授权、服务器的配置、耳机数据的收取、套接字服务的终止。而相比于第一种方法,第二种方法Think GeaCCoommmmuunniiccaattiioonnss DDrriivvee,利用提供的AAPPII建立连接获取数据流,易于使用的通信程序接口,缺点是不能模拟发送信号。适合普通的PC机上的开发。因此,我们选择第二种方法进行开发。

CC语言版本使用方法:

1)新建工程,将Think Gear.h、Think Gear.lib、thinkgear_testapp.cpp放入工程;

2)根据开发者自己的需求进行编译,然后将thinkgear.dll文件放入exe所在的文件夹;

3)将自己焊制的耳机与接收器连接,启动程序,指示灯由红变蓝;

主程序中主要代码部分功能:1)获取连接句柄;2)COM名与电脑的连接想对应;33)读取数据包、读取aatttteennttiioonn数据;44)释放句柄。

主要API的大概说明:

TTGG__GGeett N Neeww C Coonnnneeccttiioonn I Id():获取一个连接句柄,在之后的程序中都会用到;

TG_Free Connection():释放句柄;

TG_Connect():连接

TG_Disconnect():取消连接,但是注意调用后一些依赖函数不可使用

TG_Read Packets():读取若干个packet,保证读取的数据实时性

TG_Get Value Status():判断数据是否更新

TG_Get Value():读取数据,为主要功能TG_Enable Auto Read

TG_Enable Auto Read():开启一个后台线程,每隔1ms刷新一次TG_Enable Blink Detection()

TG_Enable Blink Detection():控制是够开启眨眼功能

参考文献

[1]Jangwoo Park,Il Woo and Shinsuk Park,Application of EEGfor Multimodal Human-Machine Interface,2012 12th Interna-tional Conference on Control,Automation and Systems,Oct.17-21,2012 in ICC,Jeju Island,Korea.

[2]TGAM1 Spec Sheet,Neurosky,January 27,2011.

上一篇:滞回分析下一篇:航空快件异常应急研究