发明内容
本申请实施例提供一种音频处理方法、装置及设备,用以解决现有技术音频算法复杂,导致音频处理时间长,从而降低了用户体验的问题。
本申请实施例提供的一种音频处理方法,包括:
获取待处理音频;
确定针对所述待处理音频的处理音效;
调取所述处理音效对应的冲激响应;
在频域采用所述冲激响应对所述待处理音频进行处理,得到频域形式的处理数据;
将所述频域形式的处理数据转换为时域形式的处理数据。
可选的,所述调取所述处理音效对应的冲激响应之前,还包括:
确定所述处理音效对应的音效算法;
根据所述音效算法与冲激序列生成冲激响应。
可选的,在所述根据所述音效算法与冲激序列生成冲激响应之后,还包括:
对所述冲激响应进行有效长度截取。
可选的,在所述根据所述音效算法与冲激序列生成冲激响应之后,还包括:
对所述冲激响应进行归一化处理。
可选的,所述调取所述处理音效对应的冲激响应,具体包括:
调取所述处理音效对应的冲激响应;
在所述冲激响应的后面添0,将所述冲激响应的序列长度由M扩展到N;M和N为大于零的整数;
对扩展后的冲激响应进行傅里叶变换,得到频域形式的冲激响应。
可选的,所述获取待处理音频,具体包括:
获取时域形式的音频数据;
对所述音频数据进行划分,得到多个序列长度相等的音频片段;
对每个所述音频片段进行傅里叶变换。
可选的,所述对所述音频数据进行划分,具体包括:
将所述音频数据按时间顺序划分为多个序列长度为L的第一片段;
对于每个所述第一片段,在所述第一片段的后面添加0,得到多个长度为N的第二片段,L和N为大于零的整数;
所述对每个所述音频片段进行傅里叶变换,具体包括:
对每个所述第二片段进行傅里叶变换。
可选的,所述在频域采用所述冲激响应对所述待处理音频进行处理,具体包括:
在频域采用所述冲激响应分别与每个经过傅里叶变换的第二片段进行乘法运算,得到多个第三片段;
所述将所述频域形式的处理数据转换为时域形式的处理数据,具体包括:
针对每个所述第三片段,采用傅里叶逆变换对各所述第三片段进行处理,得到多个第四片段,相邻两个所述第四片段在时域上有重叠部分;
根据各所述第四片段确定各时刻的数值,其中,每个时刻的数值为所有该时刻的数值之和;
将各所述时刻的数值整合为一组在时域上连续的数据。
可选的,所述对所述音频数据进行划分,具体包括:
将所述音频数据按时间顺序划分为多个序列长度为N的第五片段,相邻两个所述第五片段在时域上存在重叠部分,各所述重叠部分的序列长度相同,其中,N为大于零的整数;
所述对每个所述音频片段进行傅里叶变换,具体包括:
对每个所述第五片段进行傅里叶变换。
可选的,所述在频域采用所述冲激响应对所述待处理音频进行处理,具体包括:
在频域采用所述冲激响应分别与每个经过傅里叶变换的第五片段进行乘法运算,得到多个第六片段;
所述将所述频域处理数据转换为时域处理数据,具体包括:
针对每个所述第六片段,采用傅里叶逆变换的对各所述第六片段进行处理,得到多个第七片段;
针对每个所述第七片段,将所述第七片段中位于起始位置的固定长度的序列去掉;
将各经过处理后的第七片段整合为一组在时域上连续的数据。
本申请实施例提供的一种音频处理装置,包括:
待处理音频获取模块,用于获取待处理音频;
处理音效确定模块,用于确定针对所述待处理音频的处理音效;
冲激响应调取模块,用于调取所述处理音效对应的冲激响应;
待处理音频处理模块,用于在频域采用所述冲激响应对所述待处理音频进行处理,得到频域形式的处理数据;
处理数据转换模块,用于将所述频域形式的处理数据转换为时域形式的处理数据。
本申请实施例提供一种音频处理设备,该方法包括:
至少一个处理器;以及,
与所述至少一个处理器通信连接的存储器;其中,
所述存储器存储有可被所述至少一个处理器执行的指令,所述指令被所述至少一个处理器执行,以使所述至少一个处理器能够执行上述音频处理方法。
本申请实施例提供一种计算机可读存储介质,所述计算机可读存储介质上存储有指令,其特征在于,所述指令被处理器执行时上述音频处理方法的步骤。本说明书实施例采用的上述至少一个技术方案能够达到以下有益效果:
通过上述方法,在对音频进行处理时,只需执行一种相同的运算,即采用冲激响应对待处理音频进行处理,将时域上复杂的卷积运算转换为频域的乘法运算,简化了运算程序,节省了音频处理时间,提高了用户的试听体验。
具体实施方式
为使本申请的目的、技术方案和优点更加清楚,下面将结合本申请具体实施例及相应的附图对本申请技术方案进行清楚、完整地描述。显然,所描述的实施例仅是本申请一部分实施例,而不是全部的实施例。基于本申请中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本申请保护的范围。
图1为本申请实施例提供的一种音频处理方法的流程示意图,具体包括以下步骤:
S101:获取待处理音频。
以K歌应用程序为例,在一些移动端K歌APP中,用户录制完一首歌曲或者其它音频以后,往往会根据需要对录制好的音频进行一些音效处理,用户可以在APP提供的多种音效中选择一种或者若干种,进行回放试听,然后选择满意的音效结果保存为文件。这些录制好的音频就是待处理音频,当然,用户还可以导入其他已录制好的音频文件。
需要注意的是,这里的待处理音频是以数字形式进行存储的,即待处理音频的数字音频。
待处理音频包括两种形式,一种是时域形式的,另一种是频域形式的,一般情况下,获取的都是时域形式的待处理音频,此时需要将时域形式的待处理音频转换为频域形式的待处理音频,以便于在频域对待处理音频进行音效处理。
S102:确定针对所述待处理音频的处理音效。
在本说明书实施例中,处理音效可以是EQ,混响,滤波,还可以是古典、流行、爵士、电音、美声、民族和重金属等。用户可以根据自己的喜好自动选择一种或者多种处理音效。在具体的场景中,可以在显示界面呈现多种处理音效供用户来进行选择。
S103:调取所述处理音效对应的冲激响应。
在现有技术中,处理音效与音效算法一一对应,想要得到某种处理音效的声音,只需根据处理音效来选择对应的音效算法来对输入的声音进行处理。如果处理音效不同,就需要执行不同的音效算法,占用CPU资源很大。
在声学和音频应用中,脉冲响应能够捕获诸如音乐厅的位置的声学特性。各种各样的包裹可以包含来自特定位置的脉冲响应,从小房间到大型音乐厅。然后,这些脉冲响应可以用于卷积混响应用,以使特定位置的声学特性能够应用于目标音频。本说明书实施例代替传统的方法,只存储处理音效对应的冲激响应,当用户需要得到某种处理音效时,只需调取该处理音效对应的冲激响应即可,例如,处理音效时混响,只需调取混响对应的冲激响应即可。
系统在单位冲激函数激励下引起的零状态响应被称之为该系统的“冲激响应”,冲激响应”完全由系统本身的特性所决定,与系统的激励源无关,是用时间函数表示系统特性的一种常用方式。本说明书实施例中的冲激响应就是音效算法对单位冲激函数的响应,用来表征音效算法本身的特性。
S104:在频域采用所述冲激响应对所述待处理音频进行处理,得到频域形式的处理数据。
在本说明书实施例中,当获取了处理音效对应的冲激响应之后,只需采用所述冲激响应对所述待处理音频进行处理即可,一般采用卷积对冲激响应和待处理音频进行处理,但是卷积的运算量很大,本说明书实施例将冲激响应和待处理音频做频域的乘法运算,得到频域形式的处理数据。
在具体的应用场景中,获取的待处理音频一般为时域形式,此时需要将时域形式的待处理音频转换为频域形式的待处理音频,可以采用傅里叶变换进行时域和频域的转换。
在具体的应用场景中,冲激响应一般以时域形式存储,此时,也需要将冲激响应从时域转换为频域,应用最多的就是傅里叶变换。
需要说明的是,如果频域的待处理音频的序列长度与频域的冲激响应的序列长度相差不多,则可以在待处理音频和冲激响应的末尾加零,扩展到相同的长度,然后再进行乘法运算。如果频域的待处理音频的序列长度明显长于频域的冲激响应的序列长度,甚至是几倍的关系,则可以先将待处理音频分段,然后再与冲激响应进行乘法运算。
S105:将所述频域形式的处理数据转换为时域形式的处理数据。
在具体的应用场景中,音效处理后播放的时域的音频数据,此时需要将步骤104中得到的频域形式的处理数据转换为时域形式的处理数据,然后再进行其他相应处理后,进行播放。
通过上述方法,在对音频进行处理时,只需执行一种相同的运算,即采用冲激响应对待处理音频进行处理,将时域上复杂的卷积运算转换为频域的乘法运算,简化了运算程序,节省了音频处理时间,提高了用户的试听体验。
基于图1的方法,本说明书实施例还提供了该方法的一些具体实施方式,下面进行说明。
可选的,所述调取所述处理音效对应的冲激响应之前,还可以包括:
确定所述处理音效对应的音效算法;
根据所述音效算法与冲激序列生成冲激响应。
在本说明书实施例中,处理音效对应的音效算法均为线性时不变系统。比如EQ,混响,滤波等等。
满足叠加原理的系统具有线性特性。即若对两个激励x1(n)和x2(n),有T[ax1(n)+bx2(n)]=aT[x1(n)]+bT[x2(n)],式中a、b为任意常数。不满足上述关系的为非线性系统。
时不变系统:就是系统的参数不随时间而变化,即不管输入信号作用的时间先后,输出信号响应的形状均相同,仅是从出现的时间不同。用数学表示为T[x(n)]=y[n],则T[x(n-n0)]=y[n-n0],这说明序列x(n)先移位后进行变换与它先进行变换后再移位是等效的。
本说明书实施例中,具体的音效算法中需要调整的参数种类是确定好的,但是针对一参数,其参数值往往是不确定的。调音师一般会使用自己熟悉的调音文件,音效进行调音。这一过程也许会根据用户反馈多次迭代。需要说明,调音并不仅限于调一种音效的参数,可以是多个音效级联,比如EQ+混响。多个音效可以在同一个冲激响应序列中得到体现。根据调音师在音效调音中确定的参数来确定音效算法。
针对不同的音效算法,调音师需要确定参数值的参数可以包括:分贝,频率,高音、低音、滤波和混响。
每一个音效算法都是一个T系统,音效算法不同,T系统的特征就不同。当把冲激序列输入到表示音效算法的T系统以后,就可以得到表征T系统的冲激响应。
可选的,在所述根据所述音效算法与冲激序列生成冲激响应之后,还可以包括:
对所述冲激响应进行有效长度截取。
所述截取后的冲激响应满足如下条件:
其中,L表示冲激响应的长度,ε1与ε2为可调的阈值,h(n)表示冲激响应,h(L-1)表示冲激响应的第L个点的数值,h(L-2)表示冲激响应的第(L-1)个点的数值。
在本说明书实施中,由于实际系统产生的冲激响应可能无限长,不具有实际操作性,为了减少计算的工作量,需要从冲激响应序列中截取一部分有效长度。
冲激响应是逐渐衰减的,首先要保证截取后的序列的最后一位要小于阈值ε
1,同时保证最后两位两位的数值查也是小于阈值ε
2。通常情况下,ε
1<ε
2,而
在本说明书实施例中,L的取值与实际的音效算法有关系,如混响往往需要1s-2s甚至更长时间的音频才可以实现,而均衡器需要比较短的声音就可以实现,比如100ms,因此,混响的冲激响应的长度要大于均衡器的冲激响应的长度。
可选的,在所述根据所述音效算法与冲激序列生成冲激响应之后,还可以包括:
对所述冲激响应进行归一化处理。
在本说明书实施例中,不同的音效算法会对输出声音的音量产生影响,为了保证输入与输出的音量一致,需要对冲激响应进行归一化处理。
可选的,所述对所述冲激响应进行归一化处理,具体可以包括:
根据所述冲激响应确定增益调整因子,采用如下公式计算增益调整因子:
其中,h(n)表示冲激响应,g表示增益调整因子,·表示乘积运算,L表示冲激响应的长度。
将所述冲激响应与所述增益调整因子进行乘法运算。
在本说明书实施例中,采用增益调整因子对冲激响应进行修正,以保证在对音频进行处理以后,输入与输出的音量一致。
可选的,所述获取待处理音频,具体可以包括:
获取时域形式的音频数据;
对所述音频数据进行划分,得到多个序列长度相等的音频片段;
对每个所述音频片段进行傅里叶变换。
在本说明书实施例中,提供两种音频数据划分的方式,具体如下:
第一种:将所述音频数据按时间顺序划分为多个序列长度为L的第一片段;对于每个所述第一片段,在所述第一片段的后面添加0,得到多个长度为N的第二片段,L和N为大于零的整数;对每个所述第二片段进行傅里叶变换。在频域采用所述冲激响应分别与每个经过傅里叶变换的第二片段进行乘法运算,得到多个第三片段。
在本说明书实施例中,将输入的音频数据x(n)分段,每段长L,则有:
其中:xi(n)=x(n+iL)RL(n),i=0,1,...
在长度L的输入后添0,使每段的输入总长度达到N。即
假设冲激响应h(n)的长度为M,则N需要满足是2的幂,且N≥L+M-1。
第二种:将所述音频数据按时间顺序划分为多个序列长度为N的第五片段,相邻两个所述第五片段在时域上存在重叠部分,各所述重叠部分的序列长度相同,其中,N为大于零的整数;对每个所述第五片段进行傅里叶变换。在频域采用所述冲激响应分别与每个经过傅里叶变换的第五片段进行乘法运算,得到多个第六片段。
在本说明书实施例中,对输入x(n)来说,不需要填0,而是直接使用N点原始数据,但每次的步长是N-M+1。其中M是冲激响应h(n)的长度。那么对于第一包数据,就需要在原始输入x′(n)前填0,即:
则分段后的输入表示为:
xi(n)=x[n+i(N-M+1)]RN(n)
针对上述两种情况,分别对N的序列xi(n)做FFT,得到:
Xi(k)=FFT[xi(n)]。
可选的,所述调取所述处理音效对应的冲激响应,具体可以包括:
调取所述处理音效对应的冲激响应;
在所述冲激响应的后面添0,将所述冲激响应的序列长度由M扩展到NM和N为大于零的整数;
对扩展后的冲激响应进行傅里叶变换,得到频域形式的冲激响应。
在本说明书实施例中,假设冲激响应h(n)的序列长度为M,在h(n)添零,然后也扩展到长度N,则有:
然后,对冲激响应进行FFT,得到频域形式的冲激响应:
H(k)=FFT[h(n)]。
在本说明书实施例中,用频域的复数相乘,完成时域的卷积操作,得到:
Yi(k)=Xi(k)H(k)。
然后将所述频域形式的处理数据转换为时域形式的处理数据。
在本说明书实施例中,将频域结果,通过IFFT转变到时域:
yi(n)=IFFT[Yi(k)]。
最后进行数据的整理,针对不同的音频数据划分方式,本说明书实施例也提供了两种对应的数据整理方法:
针对第一种音频数据划分方式:
针对每个所述第三片段,采用傅里叶逆变换对各所述第三片段进行处理,得到多个第四片段,相邻两个所述第四片段在时域上有重叠部分;
根据各所述第四片段确定各时刻的数值,其中,每个时刻的数值为所有该时刻的数值之和;
将各所述时刻的数值整合为一组在时域上连续的数据。
上述步骤中获得了长度为N的yi(n),最后求出真正想要的y(n),
需要注意,每个yi(n),右移iL,与前一分段yi-1(n-(i-1)L)有M-1个点是重叠的,需要相加作为最后的结果。每次可以得到长度为L的输出。
针对第二种音频数据划分方式:
针对每个所述第六片段,采用傅里叶逆变换的对各所述第六片段进行处理,得到多个第七片段;
针对每个所述第七片段,将所述第七片段中位于起始位置的固定长度的序列去掉;
将各经过处理后的第七片段整合为一组在时域上连续的数据。
上述步骤中我们获得的yi(n),每个片段共有N个点,针对每一个片段,其中前M-1个点需要抛弃,剩下的N-M+1个点作为输出。
下面采用表1的参数,对比使用本发明技术方案前后合成时长。
表1输入音频数据参数和冲激响应参数
|
时长 |
采样率 |
通道数 |
输入文件 |
4分52秒 |
44100 |
2 |
冲激响应序列 |
1.49秒(65536采样) |
44100 |
2 |
从表2可以看出,使用本说明书实施例中提供的方法,合成时间从99175毫秒降低了1903毫秒,即从99.175秒降到了1.903秒,虽然在不同平台上的数据可能不同,但是优化比例(约50:1)大致相同。另外,下表也给出了一包数据处理的时间是10ms,这说明在回放场景下,只需要10ms的延时,就可以拿到第一包1.49秒的数据,可以满足回放的实时性要求。
表2合成时间对比参数表
|
合成时长 |
一包数据处理时间 |
不使用本发明 |
99175毫秒 |
- |
使用本发明 |
1903毫秒 |
10ms |
以上为本申请实施例提供的音频处理方法,基于同样的思路,本申请实施例还提供一种音频处理装置。
如图2所示,本申请实施例提供的一种音频处理装置包括:
待处理音频获取模块201,用于获取待处理音频;
处理音效确定模块202,用于确定针对所述待处理音频的处理音效;
冲激响应调取模块203,用于调取所述处理音效对应的冲激响应;
待处理音频处理模块204,用于在频域采用所述冲激响应对所述待处理音频进行处理,得到频域形式的处理数据;
处理数据转换模块205,用于将所述频域形式的处理数据转换为时域形式的处理数据。
可选的,所述装置还可以包括:
音效算法确定模块,用于确定所述处理音效对应的音效算法;
冲激响应生成模块,用于根据所述音效算法与冲激序列生成冲激响应。
可选的,所述装置还可以包括:
有效长度截取模块,用于对所述冲激响应进行有效长度截取。
可选的,所述装置还可以包括:
归一化模块,用于对所述冲激响应进行归一化处理。
可选的,所述冲激响应调取模块203,具体可以包括:
冲激响应调取单元,用于调取所述处理音效对应的冲激响应;
长度扩展单元,用于在所述冲激响应的后面添0,将所述冲激响应的序列长度由M扩展到N;M和N为大于零的整数;
第一傅里叶变换单元,用于对扩展后的冲激响应进行傅里叶变换,得到频域形式的冲激响应。
可选的,待处理音频获取模块201,具体可以包括:
时域形式的音频数据获取单元,用于获取时域形式的音频数据;
划分单元,用于对所述音频数据进行划分,得到多个序列长度相等的音频片段;
第二傅里叶变换单元,用于对每个所述音频片段进行傅里叶变换。
可选的,所述划分单元,还可以用于:
将所述音频数据按时间顺序划分为多个序列长度为L的第一片段;
对于每个所述第一片段,在所述第一片段的后面添加0,得到多个长度为N的第二片段,L和N为大于零的整数;
所述第二傅里叶变换单元,还可以用于对每个所述第二片段进行傅里叶变换。
可选的,所述待处理音频处理模块204,还可以用于在频域采用所述冲激响应分别与每个经过傅里叶变换的第二片段进行乘法运算,得到多个第三片段;
所述处理数据转换模块205,还可以用于:
针对每个所述第三片段,采用傅里叶逆变换对各所述第三片段进行处理,得到多个第四片段,相邻两个所述第四片段在时域上有重叠部分;
根据各所述第四片段确定各时刻的数值,其中,每个时刻的数值为所有该时刻的数值之和;
将各所述时刻的数值整合为一组在时域上连续的数据。
可选的,所述划分单元,还可以用于:
将所述音频数据按时间顺序划分为多个序列长度为N的第五片段,相邻两个所述第五片段在时域上存在重叠部分,各所述重叠部分的序列长度相同,其中,N为大于零的整数;
所述第二傅里叶变换单元,还可以用于对每个所述第五片段进行傅里叶变换。
可选的,所述待处理音频处理模块204,还可以用于在频域采用所述冲激响应分别与每个经过傅里叶变换的第五片段进行乘法运算,得到多个第六片段;
所述处理数据转换模块205,还可以用于:
针对每个所述第六片段,采用傅里叶逆变换的对各所述第六片段进行处理,得到多个第七片段;
针对每个所述第七片段,将所述第七片段中位于起始位置的固定长度的序列去掉;
将各经过处理后的第七片段整合为一组在时域上连续的数据。
基于同样的思路,本说明书实施例还提供了上述方法对应的设备。
图3为本说明书实施例提供的对应于图1的一种音频处理设备的结构示意图。如图3所示,设备300可以包括:
至少一个处理器310;以及,
与所述至少一个处理器通信连接的存储器330;其中,
所述存储器330存储有可被所述至少一个处理器310执行的指令320,所述指令被所述至少一个处理器310执行,以使所述至少一个处理器310能够实现上述音频处理方法的实施例,其功能实现请参见方法实施例中的说明,在此不再赘述。
基于同样的思路,本说明书实施例还提供了一种计算机可读存储介质,所述所述计算机可读存储介质上存储有指令,所述指令被处理器执行时可以实现上述音频处理方法的实施例。
在一个典型的配置中,计算设备包括一个或多个处理器(CPU)、输入/输出接口、网络接口和内存。
内存可能包括计算机可读介质中的非永久性存储器,随机存取存储器(RAM)和/或非易失性内存等形式,如只读存储器(ROM)或闪存(flash RAM)。内存是计算机可读介质的示例。
计算机可读介质包括永久性和非永久性、可移动和非可移动媒体可以由任何方法或技术来实现信息存储。信息可以是计算机可读指令、数据结构、程序的模块或其他数据。计算机的存储介质的例子包括,但不限于相变内存(PRAM)、静态随机存取存储器(SRAM)、动态随机存取存储器(DRAM)、其他类型的随机存取存储器(RAM)、只读存储器(ROM)、电可擦除可编程只读存储器(EEPROM)、快闪记忆体或其他内存技术、只读光盘只读存储器(CD-ROM)、数字多功能光盘(DVD)或其他光学存储、磁盒式磁带,磁带磁磁盘存储或其他磁性存储设备或任何其他非传输介质,可用于存储可以被计算设备访问的信息。按照本文中的界定,计算机可读介质不包括暂存电脑可读媒体(transitorymedia),如调制的数据信号和载波。
还需要说明的是,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、商品或者设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、商品或者设备所固有的要素。在没有更多限制的情况下,由语句“包括一个……”限定的要素,并不排除在包括所述要素的过程、方法、商品或者设备中还存在另外的相同要素。
本领域技术人员应明白,本申请的实施例可提供为方法、系统或计算机程序产品。因此,本申请可采用完全硬件实施例、完全软件实施例或结合软件和硬件方面的实施例的形式。而且,本申请可采用在一个或多个其中包含有计算机可用程序代码的计算机可用存储介质(包括但不限于磁盘存储器、CD-ROM、光学存储器等)上实施的计算机程序产品的形式。
以上所述仅为本申请的实施例而已,并不用于限制本申请。对于本领域技术人员来说,本申请可以有各种更改和变化。凡在本申请的精神和原理之内所作的任何修改、等同替换、改进等,均应包含在本申请的权利要求范围之内。