发明内容
本发明提供了一种数据同步方法、装置及系统,回声消除方法及系统,本发明提供的数据同步方法,能够很好的解决将第一终端和第二终端的数据不同步的问题,进而能够更好的利用声学回声消除器解决第一终端听到自己讲话回声的问题,提升用户体验。
为了实现上述目的,本发明提供了以下技术手段:
一种数据同步方法,包括:
接收音频编码数据,将所述音频编码数据解码后得到音频数据;
将所述音频数据发送至接收帧缓冲区;
拷贝所述第一N字节数据至播放队列和参考帧缓冲区;
同时启动音频播放线程和音频录制线程,所述音频录制线程和所述音频播放线程的音频参数为一致的;
所述音频播放线程播放所述播放队列中的第一N字节数据,同时所述音频录制线程通过麦克录制音频数据,并发送至录制帧缓冲区;
待所述录制帧缓冲区取得第二N字节数据时,将所述第二N字节数据和所述参考帧缓冲区的第一N字节数据同时发送至回声消除线程,由声学回声消除器对两个N字节数据进行回声处理。
优选的,接收音频编码数据,将所述音频编码数据解码后得到音频数据包括:
音频数据接收线程通过网络模块从远端接收所述音频编码数据;
通过音频解码对所述音频编码数据进行解码得到音频数据。
优选的,拷贝所述第一N字节数据至播放队列和参考帧缓冲区包括:
判断所述接收帧缓冲区是否达到N字节音频数据;
若所述接收帧缓冲区达到N字节音频数据,则将所述N字节音频数据作为所述第一N字节数据拷贝至所述播放队列和所述参考帧缓冲区;
若所述接收帧缓冲区未达到N字节音频数据,则将N字节静音数据作为所述第一N字节数据拷贝至所述播放队列和所述参考帧缓冲区。
优选的,还包括:
当所述录制帧缓冲区未取得所述第二N字节数据时,则循环等待直到所述录制帧缓冲区取得第二N字节数据。
一种回声消除方法,包括:
接收音频编码数据,将所述音频编码数据解码后得到音频数据;
将所述音频数据发送至接收帧缓冲区;
拷贝所述第一N字节数据至播放队列和参考帧缓冲区;
同时启动音频播放线程和音频录制线程,所述音频录制线程和所述音频播放线程的音频参数为一致的;
所述音频播放线程播放所述播放队列中的第一N字节数据,同时所述音频录制线程通过麦克录制音频数据,并发送至录制帧缓冲区;
待所述录制帧缓冲区取得第二N字节数据时,将所述第二N字节数据和所述参考帧缓冲区的第一N字节数据同时发送至回声消除线程;
声学回声消除器对所述两个N字节数据进行回声消除处理得到第三N字节数据,并将其发送至发送帧缓冲区;
音频数据发送线程从所述发送帧缓冲区中取得所述第三N字节数据,将所述第三N字节数据进行音频编码,然后通过网络发送模块发送至远端。
优选的,声学回声消除器对所述两个N字节数据进行回声消除处理得到第三N字节数据包括:
所述声学回声消除器将所述第二N字节数据中的频域与第一N字节数据频域一致内容进行消除,得到第三N字节数据。
优选的,所述声学回声消除器中预设延时参数为100。
一种数据同步装置,包括:
接收单元,用于接收音频编码数据,将所述音频编码数据解码后得到音频数据;
发送单元,用于将所述音频数据发送至接收帧缓冲区;
拷贝单元,用于拷贝所述第一N字节数据至播放队列和参考帧缓冲区;
启动单元,用于同时启动音频播放线程和音频录制线程,所述音频录制线程和所述音频播放线程的音频参数为一致的;
播放录制单元,用于所述音频播放线程播放所述播放队列中的第一N字节数据,同时所述音频录制线程通过麦克录制音频数据,并发送至录制帧缓冲区;
同步单元,用于待所述录制帧缓冲区取得第二N字节数据时,将所述第二N字节数据和所述参考帧缓冲区的第一N字节数据同时发送至回声消除线程,由声学回声消除器对两个N字节数据进行回声处理。
一种数据同步系统,包括:第一终端和第二终端;
所述第一终端,用于发送音频编码数据;
所述第二终端,用于接收音频编码数据,将所述音频编码数据解码后得到音频数据,将所述音频数据发送至接收帧缓冲区,拷贝所述第一N字节数据至播放队列和参考帧缓冲区,同时启动音频播放线程和音频录制线程,所述音频录制线程和所述音频播放线程的音频参数为一致的,所述音频播放线程播放所述播放队列中的第一N字节数据,同时所述音频录制线程通过麦克录制音频数据,并发送至录制帧缓冲区,待所述录制帧缓冲区取得第二N字节数据时,将所述第二N字节数据和所述参考帧缓冲区的第一N字节数据同时发送至回声消除线程,由声学回声消除器对两个N字节数据进行回声处理。
一种回声消除系统,包括:第一终端和第二终端;
所述第一终端,用于发送音频编码数据;
所述第二终端,用于接收音频编码数据,将所述音频编码数据解码后得到音频数据,将所述音频数据发送至接收帧缓冲区,拷贝所述第一N字节数据至播放队列和参考帧缓冲区,同时启动音频播放线程和音频录制线程,所述音频录制线程和所述音频播放线程的音频参数为一致的,所述音频播放线程播放所述播放队列中的第一N字节数据,同时所述音频录制线程通过麦克录制音频数据,并发送至录制帧缓冲区,待所述录制帧缓冲区取得第二N字节数据时,将所述第二N字节数据和所述参考帧缓冲区的第一N字节数据同时发送至回声消除线程,声学回声消除器对所述两个N字节数据进行回声消除处理得到第三N字节数据,并将其发送至发送帧缓冲区,音频数据发送线程从所述发送帧缓冲区中取得所述第三N字节数据,将所述第三N字节数据进行音频编码,然后通过网络发送模块发送至远端。
本发明提供了一种数据同步方法,该方法中有音频播放线程、音频录制线程和回声消除线程三个线程,且音频播放线程和音频录制线程的音频参数都是一致的,还有接收帧缓冲区、播放帧缓冲区和参考帧缓冲区三个缓冲区。
该方法中由于音频播放线程和音频录制线程的音频参数是一致,即两者的采样速率、播放速率、采样精度等音频参数是一致的,保证音频播放线程和音频录制线程中除了声音数据之外,其他的参数都是一致的。本方法中在接收帧缓冲区取第一N字节数据,并将其拷贝至播放队列和参考帧缓冲区,即为播放队列中第一N字节数据和参考帧缓冲区中的第一N字节数据是同步且一致的。
该方法中还需保证音频播放线程和音频录制线程同时启动,即在音频播放线程播放播放队列中的第一N字节数据时,能够保证音频录制线程也是在录制第一N字节数据的回声,并得到第二N字节数据,因此播放队列中的第一N字节数据和录制帧缓冲区的第二N字节数据也是同步的。
由于播放队列中第一N字节数据和参考帧缓冲区中的第一N字节数据是同步且一致的,且播放队列中第一N字节数据和录制帧缓冲区的第二N字节数据也是同步的,因此参考帧缓冲区中的第一N字节数据和录制帧缓冲区的第二N字节数据即为同步的,并且两者是同时放入回声消除线程中,因此两者在回声消除线程中也是同步的,并由回声消除器对参考帧缓冲区中的第一N字节数据和录制帧缓冲区的第二N字节数据进行回声处理。本发明在第一终端和第二终端通话的过程中,循环执行本发明提供的同步方法。
因此,采用本发明提供的数据同步方法能够很好的解决将第一终端和第二终端的数据不同步的问题,进而能够更好的利用声学回声消除器解决第一终端听到自己讲话回声的问题,提升用户体验。
具体实施方式
下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
如图2所示,本发明提供了一种数据同步方法的第一实施例,包括:
步骤S101:接收音频编码数据,将所述音频编码数据解码后得到音频数据;
如图3所示,步骤S101具体包括以下两个步骤:
步骤S201:第二终端的音频数据接收线程通过网络模块从远端接收所述音频编码数据;
步骤S202:第二终端通过音频解码对所述音频编码数据进行解码得到音频数据。
本发明中第一终端首先将用户A声音数据中的N字节数据进行音频编码,将编码后得到的音频编码数据通过网络发送模块发送至远端。第二终端的音频数据接收线程从远端接收音频编码数据,并通过音频解码对音频编码数据进行解码,接到解码后的音频数据。
步骤S102:将所述音频数据发送至接收帧缓冲区;
第二终端将上述步骤中得到的音频数据发送至预先开发的接收帧缓冲区,为后续过程做准备。
步骤S103:拷贝所述第一N字节数据至播放队列和参考帧缓冲区;
如图4所示,该步骤具体包括:
步骤S301:第二终端判断所述接收帧缓冲区是否达到N字节音频数据,若达到则进入步骤S302,若未达到则进入步骤S303;
在音频播放线程启动后,会在播放队列中寻求播放所需的数据,音频播放线程在一个周期中需要播放N字节数据,其中N为自然数,N的大小与音频播放线程中的音频参数的设置有关,在此不做限定。因此为了保证播放队列中有足够的数据供音频播放线程播放,因此第二终端会判断接收帧缓冲区中的音频数据是否达到N字节,即达到音频播放线程一个周期内的播放需要。
步骤S302:若所述接收帧缓冲区达到N字节音频数据,则将所述N字节音频数据作为所述第一N字节数据拷贝至所述播放队列和所述参考帧缓冲区;
若接收帧缓冲区达到N字节音频数据,则将N字节音频数据作为第一N字节数据拷贝至播放队列和参考帧缓冲区,播放队列为音频播放线程取播放数据的队列,参考帧缓冲区为在下文中涉及的回声消除中使用的参考数据所在的缓冲区,本方法中将第一N字节数据拷贝至播放队列和参考帧缓冲区,从而使得播放队列和参考帧缓冲区中数据是同步且一致的。
步骤S303:若所述接收帧缓冲区未达到N字节音频数据,则将N字节静音数据作为所述第一N字节数据拷贝至所述播放队列和所述参考帧缓冲区。
若所述接收帧缓冲区未达到N字节音频数据,则将N字节静音数据作为第一N字节数据拷贝至播放队列和参考帧缓冲区,其中静音数据是指用一组二进制为0的码表示脉冲幅值为0的数据,这组二进制码展现在用户侧时,为没有声音的一段空白因此称为静音数据。本方法中将第一N字节数据拷贝至播放队列和参考帧缓冲区,从而使得播放队列和参考帧缓冲区中第一N字节数据是同步且一致的。
步骤S104:同时启动音频播放线程和音频录制线程,所述音频录制线程和所述音频播放线程的音频参数为一致的;
第二终端同时启动音频播放线程和音频录制线程,其中,音频播放线程为第二终端播放第一终端声音A的线程,音频录制线程为第二终端录制声音B的线程,声音B包括第二终端侧用户B的声音和声音A的回声。并且由于音频播放线程和音频录制线程的音频参数是一致,即两者的采样速率、播放速率、采样精度等音频参数是一致的,保证音频播放线程和音频录制线程中除了声音数据之外,其他的参数都是一致的。
步骤S105:所述音频播放线程播放所述播放队列中的第一N字节数据,同时所述音频录制线程通过麦克录制音频数据,并发送至录制帧缓冲区;
在上述步骤中音频播放线程和音频接收线程已同时启动,音频播放线程会从播放队列中提取第一N字节数据进行播放,与此同时,音频录制线程也开始通过麦克录制音频数据即声音B,并将录制得到的音频数据发送至录制帧缓冲区。
由于该方法中音频播放线程和音频录制线程是同时启动,即在音频播放线程播放播放队列中的第一N字节数据时,能够保证音频录制线程也是在录制第一N字节数据的回声,并得到第二N字节数据,因此播放队列中的第一N字节数据和录制帧缓冲区的第二N字节数据也是同步的。
步骤S106:待所述录制帧缓冲区取得第二N字节数据时,将所述第二N字节数据和所述参考帧缓冲区的第一N字节数据同时发送至回声消除线程,由声学回声消除器对两个N字节数据进行回声处理。
当所述录制帧缓冲区未取得所述第二N字节数据时,则循环等待直到所述录制帧缓冲区取得第二N字节数据。因为在下述步骤中需要将录制帧缓冲区的数据与参考帧缓冲区的数据进行对比,并进行回声消除,因此需要保证录制帧缓冲区得到音频数据长度与第一N字节长度一致,以便能够更好的进行回声消除。
待录制帧缓冲区取得第二N字节数据时,此时获取的第二N字节数据中包括第二终端侧用户B的声音和播放队列中的第一N字节数据的回声。第二终端同时将第二N字节数据和参考帧缓冲区中的第一N字节数据发送至回声消除线程,由回声消除线程对两个数据进行对比,并进行回声处理。
由上文可知,播放队列中第一N字节数据和参考帧缓冲区中的第一N字节数据是同步且一致的,且播放队列中第一N字节数据和录制帧缓冲区的第二N字节数据也是同步的,因此参考帧缓冲区中的第一N字节数据和录制帧缓冲区的第二N字节数据即为同步的,并且两者是同时放入回声消除线程中,因此两者在回声消除线程中也是同步的。
在第一终端和第二终端通话的过程中,循环执行本发明提供的同步方法,直到第一终端和第二终端的通话结束,因此采用本发明提供的数据同步方法能够很好的解决将第一终端和第二终端的数据不同步的问题,进而能够更好的利用声学回声消除器解决第一终端听到自己讲话回声的问题,提升用户体验。
本发明在上述内容中提出了数据同步方法,本发明在下述内容在数据同步的基础之上提出了一种回声消除方法,基于良好同步基础之上,对回声进行消除,具体请参见下述实施例。
如图5所示,本发明还提供了一种回声消除方法,包括:
步骤S401:接收音频编码数据,将所述音频编码数据解码后得到音频数据;
步骤S402:将所述音频数据发送至接收帧缓冲区;
步骤S403:拷贝所述第一N字节数据至播放队列和参考帧缓冲区;
步骤S404:同时启动音频播放线程和音频录制线程,所述音频录制线程和所述音频播放线程的音频参数为一致的;
步骤S405:所述音频播放线程播放所述播放队列中的第一N字节数据,同时所述音频录制线程通过麦克录制音频数据,并发送至录制帧缓冲区;
步骤S406:待所述录制帧缓冲区取得第二N字节数据时,将所述第二N字节数据和所述参考帧缓冲区的第一N字节数据同时发送至回声消除线程;
步骤S401-S406在上述实施例中已经详细介绍,在此不再赘述,下面详细介绍后续步骤。
步骤S407:声学回声消除器对所述两个N字节数据进行回声消除处理得到第三N字节数据,并将其发送至发送帧缓冲区;
具体的,声学回声消除器将所述第二N字节数据中的频域与第一N字节数据频域一致内容进行消除,得到第三N字节数据,如图6所示,上述步骤具体包括:
步骤S501:声学回声消除器将第一N字节数据和第二N字节数据经过傅里叶变换得到第一频域数据和第二频域数据;
步骤S502:声学回声消除器将第二频域数据与第一频域数据一致的内容进行消除得到第三频域数据;
步骤S503:将第三频域数据经过反傅里叶变换得到第三N字节数据。
因为第一字节数据和第二字节数据均为时域数据,在时域不方便对两个字节数据进行处理,因此将两个N字节数据进行转换得到频域数据,并在频域中对两个N字节数据一致的数据进行消除得到第三频域数据,为了得到能够使用的数据因此需要将第三频域数据转换为时域数据,因此进行反傅里叶变换得到第三N字节数据。
声学回声消除器中有一个预设延时参数,假设音频播放线程将播放队列中的第一N字节数据进行播放的时间为t1,第一N字节数据经过喇叭播放出的时间为t2,那么t2-t1即为声学回声消除器中预设延时参数,经过本发明工程师大量实验,本发明中设定声学回声消除器中预设延时参数为100ms。在该参数下,声学回声消除器具有以下优点:
1)单方讲话时,无回音;
2)双方同时讲话时,双方交流流畅无回音;
3)麦克和用户的嘴唇距离相对位置改变时,收敛比较快,没有出现回音
4)免提播放达到最大音量时,基本无回音。
步骤S408:音频数据发送线程从所述发送帧缓冲区中取得所述第三N字节数据,将所述第三N字节数据进行音频编码,然后通过网络发送模块发送至远端。
在第一终端和第二终端通话的过程中,循环执行本发明提供的回声消除方法,直到第一终端和第二终端的通话结束,因为本发明中数据能够很好的进行同步,因此采用本发明提供的数据回声消除方法能够很好的利用声学回声消除器解决第一终端听到自己讲话回声的问题,提升用户体验。
如图7所示,本发明还提供了一种数据同步装置,包括:
接收单元701,用于接收音频编码数据,将所述音频编码数据解码后得到音频数据;
发送单元702,用于将所述音频数据发送至接收帧缓冲区;
拷贝单元703,用于拷贝所述第一N字节数据至播放队列和参考帧缓冲区;
启动单元704,用于同时启动音频播放线程和音频录制线程,所述音频录制线程和所述音频播放线程的音频参数为一致的;
播放录制单元705,用于所述音频播放线程播放所述播放队列中的第一N字节数据,同时所述音频录制线程通过麦克录制音频数据,并发送至录制帧缓冲区;
同步单元706,用于待所述录制帧缓冲区取得第二N字节数据时,将所述第二N字节数据和所述参考帧缓冲区的第一N字节数据同时发送至回声消除线程,由声学回声消除器对两个N字节数据进行回声处理。
如图8所示,本发明还提供了一种数据同步系统,包括:第一终端100和第二终端200;
所述第一终端100,用于发送音频编码数据;
所述第二终端200,用于接收音频编码数据,将所述音频编码数据解码后得到音频数据,将所述音频数据发送至接收帧缓冲区,拷贝所述第一N字节数据至播放队列和参考帧缓冲区,同时启动音频播放线程和音频录制线程,所述音频录制线程和所述音频播放线程的音频参数为一致的,所述音频播放线程播放所述播放队列中的第一N字节数据,同时所述音频录制线程通过麦克录制音频数据,并发送至录制帧缓冲区,待所述录制帧缓冲区取得第二N字节数据时,将所述第二N字节数据和所述参考帧缓冲区的第一N字节数据同时发送至回声消除线程,由声学回声消除器对两个N字节数据进行回声处理。
如图9所示,本发明还提供了一种回声消除装置,包括:
第二接收单元901,用于接收音频编码数据,将所述音频编码数据解码后得到音频数据;
第二发送单元902,用于将所述音频数据发送至接收帧缓冲区;
第二拷贝单元903,用于拷贝所述第一N字节数据至播放队列和参考帧缓冲区;
第二启动单元904,用于同时启动音频播放线程和音频录制线程,所述音频录制线程和所述音频播放线程的音频参数为一致的;
第二播放录制单元905,用于所述音频播放线程播放所述播放队列中的第一N字节数据,同时所述音频录制线程通过麦克录制音频数据,并发送至录制帧缓冲区;
第二同步单元906,用于待所述录制帧缓冲区取得第二N字节数据时,将所述第二N字节数据和所述参考帧缓冲区的第一N字节数据同时发送至回声消除线程。
回声处理单元907,用于声学回声消除器对所述两个N字节数据进行回声消除处理得到第三N字节数据,并将其发送至发送帧缓冲区;
第三发送单元908,用于音频数据发送线程从所述发送帧缓冲区中取得所述第三N字节数据,将所述第三N字节数据进行音频编码,然后通过网络发送模块发送至远端。
如图10所示,本发明还提供了一种回声消除系统,包括:第一终端300和第二终端400;
所述第一终端300,用于发送音频编码数据;
所述第二终端400,用于接收音频编码数据,将所述音频编码数据解码后得到音频数据,将所述音频数据发送至接收帧缓冲区,拷贝所述第一N字节数据至播放队列和参考帧缓冲区,同时启动音频播放线程和音频录制线程,所述音频录制线程和所述音频播放线程的音频参数为一致的,所述音频播放线程播放所述播放队列中的第一N字节数据,同时所述音频录制线程通过麦克录制音频数据,并发送至录制帧缓冲区,待所述录制帧缓冲区取得第二N字节数据时,将所述第二N字节数据和所述参考帧缓冲区的第一N字节数据同时发送至回声消除线程,声学回声消除器对所述两个N字节数据进行回声消除处理得到第三N字节数据,并将其发送至发送帧缓冲区,音频数据发送线程从所述发送帧缓冲区中取得所述第三N字节数据,将所述第三N字节数据进行音频编码,然后通过网络发送模块发送至远端。
本实施例方法所述的功能如果以软件功能单元的形式实现并作为独立的产品销售或使用时,可以存储在一个计算设备可读取存储介质中。基于这样的理解,本发明实施例对现有技术做出贡献的部分或者该技术方案的部分可以以软件产品的形式体现出来,该软件产品存储在一个存储介质中,包括若干指令用以使得一台计算设备(可以是个人计算机,服务器,移动计算设备或者网络设备等)执行本发明各个实施例所述方法的全部或部分步骤。而前述的存储介质包括:U盘、移动硬盘、只读存储器(ROM,Read-OnlyMemory)、随机存取存储器(RAM,RandomAccessMemory)、磁碟或者光盘等各种可以存储程序代码的介质。
本说明书中各个实施例采用递进的方式描述,每个实施例重点说明的都是与其它实施例的不同之处,各个实施例之间相同或相似部分互相参见即可。
对所公开的实施例的上述说明,使本领域专业技术人员能够实现或使用本发明。对这些实施例的多种修改对本领域的专业技术人员来说将是显而易见的,本文中所定义的一般原理可以在不脱离本发明的精神或范围的情况下,在其它实施例中实现。因此,本发明将不会被限制于本文所示的这些实施例,而是要符合与本文所公开的原理和新颖特点相一致的最宽的范围。