一种消除回音的方法

xiaoxiao2020-7-22  1

专利名称:一种消除回音的方法
技术领域
本发明涉及音频处理领域,特别是一种消除回音的方法,用于语音交互系统中。
背景技术
在用电脑进行语音聊天、网络会议或其它音频活动的时候,如果用麦克风采集自己的声音,用音箱播放别人的声音,或者在使用耳麦时,音量设置过大,都会出现回音问题。比如对方说了一句话,通过我们的音箱播放出来,结果又被我们的麦克风采集进去,又发送给了对方,于是对方就感觉到了自己的回音。
目前,比较成熟的回音消除技术都主要集中在硬件实现领域,常见的包括以下的技术途径1、以简单声音抵消逻辑电路实现回音消除功能,这是目前广泛使用的最为普遍的一种方法,例如普通的电话听筒中就采用了相关的回音抵消逻辑电路。使用这种方法来消除回音,不仅实现起来较为简单,而且效果也不错。
2、以对距离递差度灵敏的逻辑电路实现回音消除功能,这种方式被广泛应用在高保真效果的麦克风设备中。所谓的距离递差度,是指麦克风在采集不同距离的语音时,对这些语音使用不同的采集强度的变化额度。有些麦克风不仅仅对于距离较近的声源采集得好,对于距离稍远的声源,采集效果往往也很好,这样的麦克风距离递差度较小。另外一些麦克风,只有对离该设备一定距离范围内的声源采集得较好,当声源超出一定距离范围时,该设备几乎采集不到它所发出的任何声音,这样的麦克风的距离递差度就较高。使用距离递差度高的麦克风对于回音的消除往往是很有效的,因为说话者离麦克风的距离往往较近,而音响等发音设备离麦克风的距离往往较远。高距离递差度的麦克风在采集语音时,采集的多是说话者的语音,对于距离较远的音箱,几乎不采集任何声音。
目前在普通的多媒体电脑中,依靠常规的硬件设备,达到消除回音的目的,最简单的方法就是使用耳机来代替音箱。因为耳机的功率很小,往往使得麦克风不能采集到耳机的发声,从而最大限度地降低了回音现象的产生。但是,使用耳机并不能完全避免回音现象的发生。现在,由于电脑配备的耳机和麦克风往往做成了一体,两者之间的距离非常有限,所以仍然容易产生回音现象。同时,在某些场合下,使用音箱比耳机更为方便,因此人们更愿意使用音箱设备而不是耳机,这就使得回音问题在有些场合是不可避免的。
采用高距离递差度的麦克风虽然可以较好地避免回音的产生,但是由于其具有高度的专业性,价格也往往偏高,所以并不为大多数普通多媒体电脑所配备。
而在普通的多媒体电脑中,依靠常规的硬件设备,以软件方式消除回音,目前仍然处于摸索阶段。

发明内容
有鉴于此,本发明的主要目的在于提供一种利用软件来消除回音的方法,在语音交互系统初始化时就完成对系统声卡的自动调整功能,达到消除回音的目的。
为达到上述目的,本发明提供一种消除回音的方法,具体为步骤一、启动线程一,通过系统音频播放设备循环播放保存在系统内存缓冲区一中的音频数据一;步骤二、启动线程二,通过麦克风设备采集外界音频数据二,并将其保存在系统内存缓冲区二中;步骤三、启动线程三,将音频数据二和音频数据一的波形进行比对,根据比对结果调整系统声卡波形输出设备的音量值,直至回音消失为止;
步骤四、结束回音消除程序。
步骤三具体为a)将所述音频数据二和音频数据一的波形进行比对,若有回音出现,则转向步骤b),否则转向步骤d);b)将当前系统声卡波形输出设备的音量减小1个数值;c)判断上一次音量调整是否为步骤c)中所述的将音量增加1个数值,如果不是,转向步骤a),否则结束当前回音消除程序;d)将当前系统声卡波形输出设备的音量增加1个数值,转向步骤a)。
所述的内存缓冲区二中,有若干个内存缓冲区列表成员,所有列表成员的存储空间大小都相等。
所述内存缓冲区列表成员的存储空间的大小,由系统声卡的当前采样率和内存缓冲区一中的音频数据的时间长度相乘得到,可以存储与内存缓冲区一中的音频数据时间长度相等的音频数据。
当一个内存缓冲区列表成员的存储空间存满数据后,即启用下一个列表成员进行数据存储,所有列表成员都存满后,再从头依次使用各个成员进行音频数据的存储。
步骤四中所述结束当前回音消除程序具体为依次结束线程三、线程二和线程一,释放内存缓冲区一和内存缓冲区二。
步骤一中所述的系统音频播放设备为音箱。
步骤一中所述的系统音频播放设备为耳机。
音频数据的格式包括MP3格式、WMA格式、WAV格式、ASF格式、AAC格式、Mp3Pro格式、VQF格式。
本发明针对目前回音消除技术多在硬件领域实现,而利用软件方法进行回音消除还不成熟的情况,提出在软件语音交互系统初始化时,启动回音消除程序,先循环播放预先保存在系统内存缓冲区一中的音频数据,然后将通过麦克风采集到的外界音频数据与上述内存缓冲区一中的音频数据相比较,根据比较结果调整系统声卡音量,直至不再有回音出现。该回音消除方法相对于现有技术来说,完全以软件实现,对多媒体电脑的硬件没有特殊要求;对系统声卡的调整自动完成,整个过程无须人工干预;在语音交互功能启动前完成回音消除过程,使其后的语音交互过程始终处于一个安静平稳的环境之中,避免了在语音交互过程中进行回音消除而带来的系统开销。


图1为回音消除方法的流程图;图2为调整系统声卡音量的流程图;图3a为预先存储在内存缓冲区一中的音频数据一示意图;图3b为通过麦克风采集到的外界音频数据二示意图。
具体实施例方式
本发明核心思想为在软件语音交互系统初始化时,先循环播放预先保存在系统内存缓冲区一中的音频数据,然后将通过麦克风采集到的外界音频数据与上述内存缓冲区一中的音频数据相比较,根据比较结果调整系统声卡音量,直至不再有回音出现。
下面参照说明书附图并结合实施例,对本发明做进一步详细的说明。
步骤101,在语音交互系统启动并初始化时,回音消除程序启动。
例如启动一个网络电话会议系统,在此系统初始化时,启动回音消除程序,预先进行回音的消除。这时的系统声卡音量值记为n。
步骤102,启动线程一,循环播放预先存储在系统内存缓冲区一中的音频数据一。
将预先准备好的一段音频数据,例如mp3格式、时间长度为三秒钟的鸟鸣声,如图3a所示,存入系统内存缓冲区B中,记为A,并通过音箱循环播放。
步骤103,启动线程二,采集外界音频数据二并将其保存在内存缓冲区二中。
首先在系统内存中开辟内存缓冲区M,包括两个列表成员M1和M2。两者存储空间大小相同,都可以保存时间长度为三秒的音频数据。
然后通过麦克风采集外界音频数据,采集到的外界音频数据波形中包括音箱播放出的音频数据A,还可能包括环境噪声以及人说话的声音,将其保存在M1中,M1存满后波形如图3b所示,标记为N1。
M1中数据存满后,进入步骤104,同时M2开始存储数据。
步骤104,启动线程三,对音频数据一和二进行比对,并根据比对结果调整系统声卡音量,直至回音消失。
将音频数据N1与音频数据A的波形相比较,并根据比较结果调整系统声卡音量,比较两音频数据以及调整系统声卡音量的具体步骤如图2所示。
步骤201,音频数据一在音频数据二中出现的概率是否大于回音判定阈值?关于波形识别比对的方法非常多,基本原理就是把两段波形(在这里即指音频数据A与N1的波形)作为比对对象,然后调用波形识别比对模块,最后根据它返回的结果(其结果是一个百分数,表示前者的波形在后者中出现的概率)来进行判断。在此不予赘述。
若音频数据A在音频数据N1中出现的概率大于回音判定阈值95%,则认为有回音出现,进入步骤202,否则进入步骤203。此回音判定阈值也可以根据用户对系统的要求自己进行设定,可略高或略低。
步骤202,将系统声卡音量减小一个数值。
将声卡音量值减小一个数值,即音量值经调整后变为n-1。
步骤203,将系统声卡音量增加一个数值。
将系统声卡音量值增加一个数值,即音量值经调整后变为n+1。
步骤204,判断上一次音量调整是否为增加一个数值?所谓“上一次”对系统声卡音量的调整,是指在此次调整之前的最后一次音量调整过程。
若判断结果为是,则进入步骤105;若结果为否,则转入步骤201,再次进行音频数据的比较和对系统声卡音量的调整。
假设在语音交互系统启动时,系统声卡音量过大,有回音产生,这时的系统声卡音量值为n。那么依据本发明的回音消除方法,在进行到步骤201时,判断结果为是,进入步骤202,将系统声卡音量值减小一个数值,为n-1,进入步骤204,判断上一次音量调整是否为增加一个数值?因为本次音量调整是第一次,在此之前并没有对音量进行调整,所以判断结果为否,进入步骤201。
上述步骤201、202、204循环进行,直至在步骤201中判断结果为否,这时回音消失,系统声卡音量已经调整为回音消失的临界音量值,即在此音量时,没有回音出现,而如果音量值增加一个数值,就会有回音出现。假设这时声卡音量值为n-m,转入步骤203。
在步骤203中将系统声卡音量增加一个数值,即音量值为n-m+1,然后进入步骤201,再次比较两音频数据,判断结果为是,进入步骤202,将音量减小一个数值,为n-m,在步骤204中判断结果为是,进入步骤105,结束回音消除程序。
在上述实施例中,采用了音箱作为系统音频播放设备,在实际应用中也可为耳机。
而对于系统内存缓冲区二,采取两个列表成员的方式,这样可以节省时间。因为在调用一个已存满数据的成员中的音频数据进行比较和声卡音量调整之后,不必等待即可调用另一个成员中的音频数据进入下一周期的音频数据比较和声卡音量调整过程。除了两个列表成员的方式,也可采用一个列表成员或三个及三个以上列表成员的方式。但在一个列表成员的情况下,只能在两个音频数据比较和声卡音量调整的一个过程完毕后,才能对外界音频数据进行下一周期的采集存储,所以比用两个或两个以上列表成员要消耗更多时间来完成回音消除。因此最好令列表成员为两个及两个以上,这样回音消除程序所需时间较少。
另外,在本实施例中,为了使算法更为简单,对于回音消失时声卡音量值的确定,是将系统声卡音量调整为回音消失的临界音量值,即在达到此值时,回音消失,但若音量值增加一个数值,回音将会再次出现。如果语音交互系统启动时,并没有回音出现,该实施例中的方法会增加系统声卡音量,直至回音第一次出现,然后将声卡音量减小一个数值,达到上述回音消失的临界音量值。在实际应用中也可以在回音消除程序启动时,先判断是否有回音出现,如果没有,则结束回音消除程序,启动语音交互功能;若有回音出现,则继续进行回音消除过程。这样做会更节省时间,但是有可能最初的音量过小,所以回音才没有出现,如果在语音交互功能启动后,说话人感觉音量太小而将音量调大,又出现了回音,这时就必须手动调整音量进行回音的消除了。
以上所述仅为本发明的较佳实施例而已,并不用以限制本发明,凡在本发明的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。
权利要求
1.一种消除回音的方法,具体为步骤一、启动线程一,通过系统音频播放设备循环播放保存在系统内存缓冲区一中的音频数据一;步骤二、启动线程二,通过麦克风设备采集外界音频数据二,并将其保存在系统内存缓冲区二中;步骤三、启动线程三,将音频数据二和音频数据一的波形进行比对,根据比对结果调整系统声卡波形输出设备的音量值,直至回音消失为止;步骤四、结束回音消除程序。
2.根据权利要求1所述的消除回音的方法,其特征在于,步骤三具体为a)将所述音频数据二和音频数据一的波形进行比对,若有回音出现,则转向步骤b),否则转向步骤d);b)将当前系统声卡波形输出设备的音量减小1个数值;c)判断上一次音量调整是否为步骤c)中所述的将音量增加1个数值,如果不是,转向步骤a),否则结束当前回音消除程序;d)将当前系统声卡波形输出设备的音量增加1个数值,转向步骤a)。
3.根据权利要求1所述的消除回音的方法,其特征在于,所述的内存缓冲区二中,有若干个内存缓冲区列表成员,所有列表成员的存储空间大小都相等。
4.根据权利要求3所述的消除回音的方法,其特征在于,所述内存缓冲区列表成员的存储空间的大小,由系统声卡的当前采样率和内存缓冲区一中的音频数据的时间长度相乘得到,可以存储与内存缓冲区一中的音频数据时间长度相等的音频数据。
5.根据权利要求3或4所述的消除回音的方法,其特征在于,当一个内存缓冲区列表成员的存储空间存满数据后,即启用下一个列表成员进行数据存储,所有列表成员都存满后,再从头依次使用各个成员进行音频数据的存储。
6.根据权利要求1所述的消除回音的方法,其特征在于,步骤四中所述结束当前回音消除程序具体为依次结束线程三、线程二和线程一,释放内存缓冲区一和内存缓冲区二。
7.根据权利要求1所述的消除回音的方法,其特征在于,步骤一中所述的系统音频播放设备为音箱。
8.根据权利要求1所述的消除回音的方法,其特征在于,步骤一中所述的系统音频播放设备为耳机。
9.根据权利要求1或2所述的消除回音的方法,其特征在于,音频数据的格式包括MP3格式、WMA格式、WAV格式、ASF格式、AAC格式、Mp3Pro格式、VQF格式。
全文摘要
本发明公开了一种消除回音的方法。在软件语音交互系统初始化时,启动线程一,通过系统音频播放设备循环播放预先保存在系统内存缓冲区一中的音频数据;同时启动线程二,通过麦克风设备采集外界音频数据;然后启动线程三,将外界音频数据与内存缓冲区一中的音频数据相比较,根据比较结果调整系统声卡音量,直至回音消失为止。该方法以软件方式,依靠语音交互系统中常规的硬件配置,自动完成对系统声卡音量的调整,并且在语音交互功能启动前完成回音消除过程,使得其后的语音交互过程始终处于安静平稳的状态中。
文档编号G06F3/16GK1687894SQ20051006344
公开日2005年10月26日 申请日期2005年4月8日 优先权日2005年4月8日
发明者傅群, 杨劲松, 施健标, 焉勇 申请人:北京中星微电子有限公司

最新回复(0)