技术领域
[0001] 本发明涉及录音领域,尤其涉及一种录音系统及计算机可读存储介质。
相关背景技术
[0002] 银行、保险等行业的双录业务要求指出,录下来的音频应清晰、不丢内容、无卡顿、减少噪音。然而,由于环境、形式和录制终端的多样性,要确保极大程度的满足要求,还是存在一些困难。比如,远程双录基于RTC系统构建,难免由于网络问题及回声消除等信号处理算法不完善问题导致讲话内容丢失、卡顿、音视频不同步等。又如,本地播报双录,可能由于某些麦克风处理了环境噪音或录制了本地播报的回声,对输入信号做了处理,导致录制声音断续、失真等问题。
[0003] 双录系统现有的音频录制,有多种途径输入,包括录制来自于远端RTC的音频、本端麦克风采集的音频及本端系统播放的loopback回采播放音频。录制写入文件的时候,不同的输入源内容可能都需要记录,但同时也要去除冗余的部分,否则听起来会有回声、混响的问题。冗余的信号主要是麦克风采集导致的,因为通常麦克风(除了定向麦克风)会采集所有在附近环境的声音,所以其声音可能包含扬声器播放的远端RTC音频、系统播放的本地音频。这些冗余信号一般通过回声消除算法消除。
[0004] 现有录音方案,很难适应多变的环境和硬件,从而可能导致音频内容丢失、失真或回声等问题。例如,当回声消除处理近端和远端同时双讲时,DSP(数字信号处理)处理不当可能导致有用信号丢失。回声消除的作用就是通过参考信号将麦克风输入的信号分离出周围的声音,当扬声器声音信号能量过大且和参考信号差异过大时,可能出现扬声器声音信号的残留或对周围的声音有过多损伤。
[0005] 又如,当终端通过其它软件播报本端音频时,双录系统由于缺少参考信号的输入,导致回声消除无法工作。然而,在硬件系统(或操作系统)层面,也可能存在一个硬件回声消除对麦克风采集的音频做类似的回声消除处理,此时双录系统的回声消除模块是否基于参考信号进行回声消除运算,就不那么重要了。在这个场景中,由于有些硬件设备的成本或质量原因,硬件系统回声消除的处理效果并不理想,导致回声消除不干净,亦或有用信号被误消除掉;由于信号被破坏,此时双录系统也很难进一步提升音频录制质量,最好的做法是换掉这个硬件设备。
[0006] 而当采用操作系统 loopback回采播放(或类似)接口获取播放音频的数据进行录制时,有些时候效果很好,但有很多时候效果不好,甚至无法正常录制。采用loopback回采播放确保正常效果,需要有以下几个条件:系统loopback回采播放可用,某些版本的系统是没有这个接口,或有接口功能不正常;或者硬件回声消除工作正常,回声消除干净,若回声消除不干净,则可能和loopback回采播放音频叠加产生噪音;或者硬件回声消除完全不工作,且麦克风录音和loopback回采播放音频内容同步,如果不同步,则会听到混响。由此可见,依赖loopback录音并不是一个非常可靠的办法。
具体实施方式
[0020] 以下结合附图实施例对本发明作进一步详细描述。
[0021] 如图1‑图6所示,本实施例的录音系统包括音频信号处理模块、回声消除模块及音频信号合成模块。其中,音频信号处理模块的输出端与回声消除模块的输入端连接,本地麦克风采集并输出的音频数据与音频信号处理模块的输入端连接。音频信号处理模块用于对本地麦克风采集并输出的音频数据进行信号处理,包括语音活性检测处理、降噪处理,以及自动增益补偿处理。回声消除模块用于对本地麦克风采集并输出的音频数据经音频信号处理后的数据进行回声消除。
[0022] 该录音系统的输入来源包括本地麦克风采集并输出的音频数据、远端RTC终端传入的音频数据f及本地播放音频数据p。其中,本地麦克风采集并输出的音频数据包括s' + (e'),s'为麦克风采集的有用信号,(e')表示麦克风回采扬声器的声音经过部分硬件回声消除处理后可能保留的部分能量,因此用括号表示;远端RTC终端传入的音频数据f会通过扬声器播放,在用户不带耳机时会通过麦克风回采进来记为e',如果硬件回声消除不工作,则信号e'也同时输入录音系统,因此f的回声可能部分或全部输入到录音系统也可能不输入;
至于本地播放音频数据,比如一段预先录制好的内容或从文本到语音生成的内容,记为p,这个信号也会通过扬声器播放,如同信号f,它的回声也可能部分或全部输入到录音系统,也可能不输入。
[0023] 录音系统的输出数据包括以下三部分:RTP数据:本地麦克风采集并输出的音频数据依次经过音频信号处理模块及回声消除模块处理后与本地播放音频数据p在音频信号合成模块中作同步合成处理并编码打包发送到网络的数据流;
REC数据:本地麦克风采集并输出的音频数据依次经过音频信号处理模块及回声消除模块处理后与本地播放音频数据p及远端RTC终端传入的音频数据f在音频信号合成模块中作同步合成处理并编码打包成的文件;
REC raw数据:备份存储的各路输入原始音频数据。
[0024] 其中,数据流的内容是排除了远端RTC终端传入的音频数据f的,如果不排除f听到的会有回声,该数据流发送通道是可选的,录音系统如果不接入网络,那么就没有f,同时也不需要在数据流通道输出,该数据流为RTP数据流;文件中为方便后续处理,可将远端RTC终端传入的音频数据f及本地播放音频数据p按左右声道分开存储;存储模块可将每路音频单独存到一个声道(音轨)中,包括本地麦克风采集并输出的音频数据、远端RTC终端传入的音频数据f及本地播放音频数据p。
[0025] 通过将各路原始音频流单独保存下来这个机制,除了录制常规的音频内容外,也保存了音频原始(未加工)信息,以便将来在录制音频时由于信号处理不当等非硬件原因出现问题时,还能够在后期进行数据恢复。
[0026] 录音系统中回声消除模块的处理效果是非常重要的,如果回声消除不干净,甚至失效,将导致录音文件内容质量很差。而回声消除处理效果除了算法本身外,也比较依赖硬件环境,为了应对这个不确定性,本实施例提出了以下技术方案,即基于检测结果,选择录音效果更好的方法。
[0027] 对录音系统进行考察可以发现,如果存在RTC通信,且远端RTC终端传入的音频数据f通过扬声器播放,由于还需要将麦克风音频通过RTP发出,那么都依赖回声消除将麦克风采集的f的回声消除掉,这一点是固定不变的。为了简化说明,后续仅讨论对本地播放音频数据p的录音处理机制。
[0028] 如图1所示本实施例中录音系统对本地播放音频数据p的录音处理机制包括如下步骤:步骤1、判断本地播放音频数据p是否使用外部播放器进行播放,若否,通过第一录制方式得到录制的目标音频数据流d;如是,进入步骤2;
步骤2、检测录音系统外部硬件回声消除效果hwaec,录音系统外部硬件回声消除效果hwaec的检测结果分为三种:hwaec的值为Yes时,表示很好消除;hwaec的值为Half时,表示能消除,但消除不干净,甚至使讲话信号损失;hwaec的值为No时,表示无法消除,即没有硬件回声消除能力或该功能关闭;如果hwaec的值为No,则通过第二录制方式得到录制的目标音频数据流d;如果hwaec的值为Yes或Half,则进入步骤3;
步骤3、检测录音系统是否支持loopback回采播放,如是,则通过第一录制方式得到录制的目标音频数据流d;如否,通知当前设备无法录音;
其中第一录制方式为:将本地麦克风采集并输出的音频数据先经过音频信号处理模块进行音频信号处理,再经过回声消除模块进行回声消除,再将回声消除模块输出的音频数据p’输送给音频信号合成模块,同时将本地播放音频数据p作为参考信号也输送给音频信号合成模块,在音频信号合成模块将数据p’与本地播放音频数据p作同步合成处理,得到目标音频数据流d,如图2所示;
第二录制方式为:将本地麦克风采集并输出的音频数据先经过音频信号处理模块进行音频信号处理,再经过回声消除模块进行回声消除,再将回声消除模块输出的音频数据p’输送给音频信号合成模块进行透传,得到录制的目标音频数据流d,音频信号合成模块在透传过程中,不对音频数据p’的内容进行改动,直接将音频数据p’的内容作为录制的目标音频数据流d,如图3所示。
[0029] 第一录制方式中如果音频数据p’保留,那么通过同步后合成,质量也能得到保证;如果音频数据p’被硬件或操作系统预先消除,由于音频信号合成模块再次合成了本地播放音频数据p,那么最终录音也能保留这个信号。这种方式适应性是最高的,但如果麦克风输入的信号被预先部分消除,即消除的不干净,那么同步合成质量有可能会受影响。第二录制方式中远端RTC终端传入的音频数据f若有,则作为回声消除模块的参考信号。
[0030] 本实施例中,步骤2中检测录音系统外部硬件回声消除效果hwaec的方法为:在安静环境下打开扬声器和麦克风,仅播放近端模拟音频数据p1,近端模拟音频数据p1依次经过音频信号处理模块和回声消除模块进行处理,且近端模拟音频数据p1不作为回声消除模块的参考信号,检查该近端模拟音频数据p1是否被完整录制,若被完整录制,则说明hwaec的值为No;若完全不能被录制,则说明hwaec的值为Yes;若只有部分被录制,则说明hwaec的值为Half。
[0031] 检查近端模拟音频数据p1是否被完整录制的方法为:使用客观语音质量评估算法(PESQ或者POLQA),将近端模拟音频数据p1作为参考源,将近端模拟音频数据p1依次经过音频信号处理模块和回声消除模块进行处理后得到的录制音频数据p1'作为评估信号,输出质量评分,并将质量评分映射到标准MOS分进行判断。标准MOS分取值范围为1 5,若质量评~分映射的标准MOS分大于等于3.5分,则说明录制正常,确认hwaec值为No;若质量评分映射的标准MOS分小于等于1.5分,则说明录制不正常,确认hwaec值为Yes,即本地播放音频数据p被硬件回声消除掉;若质量评分映射的标准MOS分在1.5分到3.5分之间,则说明录制效果差,确认hwaec值为Half,即硬件回声部分消除,或质量过差。
[0032] 在步骤3中设定检测录音系统是否支持loopback回采播放的指标值为local‑input。local‑input值表示本地播放音频数据p是否能合成,即是否支持loopback回采播放,或是否直接输入音频(由外部集成决定,因此相对可控)。local‑input值具有两种结果:Yes,表示可以做到本地输入,通过loopback回采播放,或外部接口直接输入都可以;No,表示录音系统无法直接获取输入。
[0033] 判定local‑input指标结果的方法为:使用录音系统的loopback回采播放接口采集播放的近端模拟音频数据p1,使用客观语音质量评估算法,将近端模拟音频数据p1作为参考源,然后在安静环境下打开扬声器和麦克风,仅播放近端模拟音频数据p1,将近端模拟音频数据p1依次经过音频信号处理模块和回声消除模块进行处理后得到的录制音频数据p1'作为评估信号,输出质量评分,并将评分映射到标准MOS分进行判断,若质量评分映射的标准MOS分大于等于3.5分,则说明录制正常,确认local‑input值为Yes;若质量评分映射的标准MOS分小于3.5分,则说明录制不正常,确认local‑input值为No。
[0034] 本实施例还设定判断回声消除是否正常工作的指标值为good‑aec,该指标值在单讲和双讲处理的场景下都要检查。good‑aec值具有两种结果:Yes,表示回声消除工作正常,回声消除干净,且讲话声音质量不损伤;No,表示回声消除不正常,无法消除干净,或者讲话声音质量被损伤。
[0035] 另外,本实施例提供的录音系统还包括手动备选的第三录制方式,如图4所示,第三录制方式为:将本地麦克风采集并输出的音频数据先经过音频信号处理模块进行音频信号处理并将得到的数据输送给回声消除模块,同时将本地播放音频数据p作为参考信号也输送给回声消除模块进行回声消除,再将回声消除模块输出的音频数据p’输送给音频信号合成模块进行透传,得到录制的目标音频数据流d,音频信号合成模块在透传过程中,不对音频数据p’的内容进行改动,直接将音频数据p’的内容作为录制的目标音频数据流d。
[0036] 判断完上述三个指标值hwaec、local‑input及good‑aec后,可根据图5查使用哪种录制方式。可以看到,第一录制方式是适用范围最广的。除此之外,只需要检查hwaec 是否为 No,即可确定是否使用第二录制方式。因此,自动检测只需要在上述两个方法之间做出选择即可,第三录制方式仅做手工选项,作为备选。
[0037] 将本地麦克风采集并输出的音频数据依次经过音频信号处理模块及回声消除模块处理后得到的数据p’与本地播放音频数据p在音频信号合成模块中作同步合成处理,即要将讲话音频和本地回录音频都完整的记录,即如hwaec取值为No的情况。那么,当hwaec为Half或Yes的情况时,可以通过算法将本地播放音频数据p直接合入即可达到目的。
[0038] 但是一开始并不知道hwaec的情况,必须通过测试才能获得相应指标。而且,即使通过测试获得了hwaec的情况,但在硬件环境变化后,也可能发生变化。比如,若用户戴上耳机,此时麦克风回录音频也会被消除,即认为hwaec为Yes。
[0039] 因此,需要提供一个几乎没有外部依赖的解决方案,将能大大提升录音的可靠性。由于本地播放音频数据p和本地麦克风采集并输出的音频数据依次经过音频信号处理模块及回声消除模块处理后得到的数据p’是高度相似的,那么可在两个信号保持同步的前提下,将两者合并是能够满足录制要求的。
[0040] 合成音频的思路简单的说,由于相同音源的两段音频具有高度相似性,所以最基本的思想是通过计算两个信号的互相关,来判断两段音频间的延迟,对齐后合并。但是,实际中音频信号通常携带噪声,大大降低了互相关的准确性。因此,工业上常常使用一些加权函数来提高算法的鲁棒性。其中,最出名的属GCC‑PHAT算法,本实施例也采用该算法做信号之间的时延估计。
[0041] 更进一步,信号的长度也会影响算法的准确度。具体地讲:若信号长度太短,那么信息太少,计算结果偏差会非常大;若信号太长,那么一方面降低了处理效率,另一方面可能错过延迟改变的信息,导致计算获得的延迟,只是两段不同延迟信号的平均值,那么合成效果也不尽人意。经过测试,这个长度在200~300ms比较合适。
[0042] 在本地播放音频数据p和本地麦克风采集并输出的音频数据依次经过音频信号处理模块及回声消除模块处理后得到的数据p’做同步加权合成之前,假定本地麦克风采集并输出的音频数据做了自动增益控制,即其音量大小是合适的,不至于过大或者过小;若未做过 AGC,那么应事先做好增益控制,调整音量到合适大小。如图6所示,该合成方法包括以下步骤:步骤一、将本地播放音频数据p、本地麦克风采集并输出的音频数据依次经过音频信号处理模块及回声消除模块处理后得到的数据p’的处理指针初始化设为0,即设定p’当前位置pos1=0,p当前位置pos2=0;
步骤二、等待p’输入信号至缓冲区,数据长度至预设截取值step+100ms,检测两段音频共同的无语音时长skip_time,即pos1= pos1+skip_time,pos2= pos2+skip_time,同时将无语音音频接入目标音频流d;
步骤三、若有语音,等待本地麦克风采集并输出的音频数据依次经过音频信号处理模块及回声消除模块处理后得到的数据p’持续输入到缓冲区,待其数据长度超过预设截取值step,分别从pos1、pos2开始,分别截取长度为预设截取值step的音频片段audio1、audio2,分别计算能量值,得到第一能量rms1和第二能量rms2;
步骤四、判断第一能量rms1和第二能量rms1是否至少有一个小于预设音频能量阈值rms_th,若是,则直接合并两段截取的音频片段,接入目标音频流d中;若否,则通过GCC‑PHAT或频域互相关等其它方法计算两者的延迟delay;
并判断延迟delay是否小于最大预设延迟阈值delay_max和大于最小预设延迟阈值delay_min,若否,则直接合并两段截取的音频片段,接入目标音频流d中;若是,则根据延迟delay将截取的音频片段对齐并合并,基于历史audio1拼接跳变长度t,缩短音频后接入目标音频流d中,更新t,同时更新pos1、pos2,判断是否到音频结尾,若否,则进入步骤2继续循环;若是,则结束流程。
[0043] 其中,rms_th的计算方式为:计算rms1和rms2的平均值rms_avg,而后设定rms_avg初始值为0,rms_avg=0.8*rms_avg + 0.2*max(rms1, rms2);
rms_th = 0.01*rms_avg,式中0.01表示当前片段的rms值较rms_avg小40dB。
[0044] 而根据delay调整片段合并及更新pos值的方式为(以audio1超前delay为例,反之亦然):将audio1向后移动delay长度,前方缺失部分复制audio2对应的0~delay段数据;把移动后的audio1和audio2相加,拼接到合并的音频后方;重新计算pos值:pos1 = pos1 ‑ delay + step, pos2 = pos2 + step。
[0045] 另外,若延迟delay大于最大预设延迟阈值delay_max,则说明两段音频无关,可以直接合并,否则将会大幅度拉长合并后音频的长度;而若延迟delay小于最小预设延迟阈值delay_min,那么肉耳无法分辨两者的延迟,可以不处理,避免后期操作对音频信号造成损伤。
[0046] 本实施例还提供一种计算机可读存储介质,该计算机可读存储介质上存储有计算机程序,该计算机程序被处理器运行时执行如上所述的录音系统进行录制。