发明内容
为了解决相关技术中存在的问题,本公开提供一种音频混合方法、装置、存储介质及电子设备。
为了实现上述目的,根据本公开实施例的第一方面,提供一种音频混合方法,所述方法包括:
获取多路PCM音频数据,每一路所述PCM音频数据的配置参数相同;
对所述多路PCM音频数据进行混合处理,以获得一路混合音频数据,其中,所述混合音频数据中包含有每一路所述PCM音频数据中的部分音频字节。
可选地,所述获取多路PCM音频数据,包括:
获取多路原始音频数据;
若所述多路原始音频数据中包括除PCM格式之外的其他格式的原始音频数据,则对每一所述其他格式的所述原始音频数据进行格式转化,以获得对应的PCM音频数据;
若所述PCM音频数据的配置参数不为预设的目标配置参数,则根据所述目标配置参数对所述PCM音频数据进行处理,以获得配置参数相同的所述PCM音频数据。
可选地,若所述多路PCM音频数据为两路PCM音频数据,则所述对所述多路PCM音频数据进行混合处理,以获得一路混合音频数据,包括:
确定第一音频数据和第二音频数据,其中,若所述两路PCM音频数据长度不同,则所述第一音频数据为所述两路PCM音频数据中长度较短的PCM音频数据,而所述第二音频数据为长度较长的PCM音频数据;若所述两路PCM音频数据长度相同,则所述第一音频数据为所述两路PCM音频数据中任一路PCM音频数据,而所述第二音频数据为另一路PCM音频数据;
采用第一混合方式、第二混合方式、第三混合方式中的一种对所述第一音频数据和所述第二音频数据进行混合处理,混合处理后所得第二音频数据作为所述混合音频数据;其中,
所述第一混合方式为用所述第一音频数据的每一偶数帧分别替换所述第二音频数据中的对应帧;
所述第二混合方式为用所述第一音频数据的每一奇数帧分别替换所述第二音频数据中的对应帧;
所述第三混合方式为针对所述第一音频数据的每一帧,分别生成随机数;针对所述第一音频数据的每一帧,若该帧对应的随机数为第一数值类型,则用该帧替换所述第二音频数据中的对应帧,若该帧对应的随机数为第二数值类型,则保留所述第二音频数据中该帧的对应帧;
其中,若音频数据为单声道音频数据,则一帧包括一个音频字节,若音频数据为双声道音频数据,则一帧包括两个音频字节。
可选地,若所述多路PCM音频数据为两路以上PCM音频数据,则所述对所述多路PCM音频数据进行混合处理,以获得一路混合音频数据,包括:
从所述多路PCM音频数据中,随机选取两路PCM音频数据作为目标PCM音频数据;
在两路所述目标PCM音频数据中,确定第一音频数据和第二音频数据,其中,若两路所述目标PCM音频数据长度不同,则所述第一音频数据为两路所述目标PCM音频数据中长度较短的目标PCM音频数据,而所述第二音频数据为长度较长的目标PCM音频数据;若两路所述目标PCM音频数据长度相同,则所述第一音频数据为两路所述目标PCM音频数据中任一路目标PCM音频数据,而所述第二音频数据为另一路目标PCM音频数据;
针对所述第一音频数据的每一帧,分别生成随机数;
针对所述第一音频数据的每一帧,若该帧对应的随机数为第一数值类型,则用该帧替换所述第二音频数据中的对应帧,若该帧对应的随机数为第二数值类型,则保留所述第二音频数据中该帧的对应帧;其中,替换之后所得的第二音频数据为第一混合音频数据;
若所述多路PCM音频数据中存在尚未进行混合处理的PCM音频数据,且所述尚未进行混合处理的PCM音频数据为多路,则从所述尚未进行混合处理的PCM音频数据中随机选取一路PCM音频数据,并将所选择的该路PCM音频数据和所述第一混合音频数据作为新的目标PCM音频数据,之后返回所述在两路所述目标PCM音频数据中,确定第一音频数据和第二音频数据的步骤;
若所述多路PCM音频数据中存在尚未进行混合处理的PCM音频数据,且所述尚未进行混合处理的PCM音频数据为一路,则在该路尚未进行混合处理的PCM音频数据和所述第一混合音频数据中确定第三音频数据和第四音频数据,其中,若该路尚未进行混合处理的PCM音频数据和所述第一混合音频数据长度不同,则所述第三音频数据为这两路音频数据中长度较短的音频数据,而所述第四音频数据为长度较长的音频数据;若该路尚未进行混合处理的PCM音频数据和所述第一混合音频数据长度相同,则所述第三音频数据为这两路音频数据中任一路音频数据,而所述第四音频数据为另一路音频数据;
采用第一混合方式、第二混合方式、第三混合方式中的一种对所述第三音频数据和所述第四音频数据进行混合处理,混合处理后所得第四音频数据作为第二混合音频数据;其中,
所述第一混合方式为用所述第三音频数据的每一偶数帧分别替换所述第四音频数据中的对应帧;
所述第二混合方式为用所述第三音频数据的每一奇数帧分别替换所述第四音频数据中的对应帧;
所述第三混合方式为针对所述第三音频数据的每一帧,分别生成随机数;针对所述第三音频数据的每一帧,若该帧对应的随机数为第一数值类型,则用该帧替换所述第四音频数据中的对应帧,若该帧对应的随机数为第二数值类型,则保留所述第四音频数据中该帧的对应帧;
其中,若音频数据为单声道音频数据,则一帧包括一个音频字节,若音频数据为双声道音频数据,则一帧包括两个音频字节。
可选地,所述配置参数包括以下中的一者或多者:采样率、声道、采样精度。
根据本公开实施例的第二方面,提供一种音频混合装置,所述装置包括:
获取模块,用于获取多路PCM音频数据,每一路所述PCM音频数据的配置参数相同;
混合处理模块,用于对所述多路PCM音频数据进行混合处理,以获得一路混合音频数据,其中,所述混合音频数据中包含有每一路所述PCM音频数据中的部分音频字节。
可选地,所述获取模块包括:
获取子模块,用于获取多路原始音频数据;
转换子模块,用于若所述多路原始音频数据中包括除PCM格式之外的其他格式的原始音频数据,则对每一所述其他格式的所述原始音频数据进行格式转化,以获得对应的PCM音频数据;
处理子模块,用于若所述PCM音频数据的配置参数不为预设的目标配置参数,则根据所述目标配置参数对所述PCM音频数据进行处理,以获得配置参数相同的所述PCM音频数据。
可选地,若所述多路PCM音频数据为两路PCM音频数据,则所述混合处理模块包括:
第一确定子模块,用于确定第一音频数据和第二音频数据,其中,若所述两路PCM音频数据长度不同,则所述第一音频数据为所述两路PCM音频数据中长度较短的PCM音频数据,而所述第二音频数据为长度较长的PCM音频数据;若所述两路PCM音频数据长度相同,则所述第一音频数据为所述两路PCM音频数据中任一路PCM音频数据,而所述第二音频数据为另一路PCM音频数据;
第一混合处理子模块,用于采用第一混合方式、第二混合方式、第三混合方式中的一种对所述第一音频数据和所述第二音频数据进行混合处理,混合处理后所得第二音频数据作为所述混合音频数据;其中,
所述第一混合方式为用所述第一音频数据的每一偶数帧分别替换所述第二音频数据中的对应帧;
所述第二混合方式为用所述第一音频数据的每一奇数帧分别替换所述第二音频数据中的对应帧;
所述第三混合方式为针对所述第一音频数据的每一帧,分别生成随机数;针对所述第一音频数据的每一帧,若该帧对应的随机数为第一数值类型,则用该帧替换所述第二音频数据中的对应帧,若该帧对应的随机数为第二数值类型,则保留所述第二音频数据中该帧的对应帧;
其中,若音频数据为单声道音频数据,则一帧包括一个音频字节,若音频数据为双声道音频数据,则一帧包括两个音频字节。
可选地,若所述多路PCM音频数据为两路以上PCM音频数据,则所述混合处理模块包括:
第一获取子模块,用于从所述多路PCM音频数据中,随机选取两路PCM音频数据作为目标PCM音频数据;
第二确定子模块,用于在两路所述目标PCM音频数据中,确定第一音频数据和第二音频数据,其中,若两路所述目标PCM音频数据长度不同,则所述第一音频数据为两路所述目标PCM音频数据中长度较短的目标PCM音频数据,而所述第二音频数据为长度较长的目标PCM音频数据;若两路所述目标PCM音频数据长度相同,则所述第一音频数据为两路所述目标PCM音频数据中任一路目标PCM音频数据,而所述第二音频数据为另一路目标PCM音频数据;
随机数生成子模块,用于针对所述第一音频数据的每一帧,分别生成随机数;
第二混合处理子模块,用于针对所述第一音频数据的每一帧,若该帧对应的随机数为第一数值类型,则用该帧替换所述第二音频数据中的对应帧,若该帧对应的随机数为第二数值类型,则保留所述第二音频数据中该帧的对应帧;其中,替换之后所得的第二音频数据为第一混合音频数据;
第二选取子模块,用于若所述多路PCM音频数据中存在尚未进行混合处理的PCM音频数据,且所述尚未进行混合处理的PCM音频数据为多路,则从所述尚未进行混合处理的PCM音频数据中随机选取一路PCM音频数据,并将所选择的该路PCM音频数据和所述第一混合音频数据作为新的目标PCM音频数据,之后触发所述第二确定子模块重新执行在两路所述目标PCM音频数据中,确定第一音频数据和第二音频数据的操作;
第三确定子模块,用于若所述多路PCM音频数据中存在尚未进行混合处理的PCM音频数据,且所述尚未进行混合处理的PCM音频数据为一路,则在该路尚未进行混合处理的PCM音频数据和所述第一混合音频数据中确定第三音频数据和第四音频数据,其中,若该路尚未进行混合处理的PCM音频数据和所述第一混合音频数据长度不同,则所述第三音频数据为这两路音频数据中长度较短的音频数据,而所述第四音频数据为长度较长的音频数据;若该路尚未进行混合处理的PCM音频数据和所述第一混合音频数据长度相同,则所述第三音频数据为这两路音频数据中任一路音频数据,而所述第四音频数据为另一路音频数据;
第三混合处理子模块,用于采用第一混合方式、第二混合方式、第三混合方式中的一种对所述第三音频数据和所述第四音频数据进行混合处理,混合处理后所得第四音频数据作为第二混合音频数据;其中,
所述第一混合方式为用所述第三音频数据的每一偶数帧分别替换所述第四音频数据中的对应帧;
所述第二混合方式为用所述第三音频数据的每一奇数帧分别替换所述第四音频数据中的对应帧;
所述第三混合方式为针对所述第三音频数据的每一帧,分别生成随机数;针对所述第三音频数据的每一帧,若该帧对应的随机数为第一数值类型,则用该帧替换所述第四音频数据中的对应帧,若该帧对应的随机数为第二数值类型,则保留所述第四音频数据中该帧的对应帧;
其中,若音频数据为单声道音频数据,则一帧包括一个音频字节,若音频数据为双声道音频数据,则一帧包括两个音频字节。
根据本公开实施例的第三方面,提供一种计算机可读存储介质,其上存储有计算机程序,该程序被处理器执行时实现本公开第一方面提供的所述音频混合方法的步骤。
根据本公开实施例的第四方面,提供一种电子设备,包括:
存储器,其上存储有计算机程序;
处理器,用于执行所述存储器中的所述计算机程序,以实现本公开第一方面提供的所述音频混合方法的步骤。
本公开中,首先获取多路PCM音频数据,每一路所述PCM音频数据的配置参数相同。接着,对多路PCM音频数据进行混合处理,以获得一路混合音频数据,其中,混合音频数据中包含有每一路PCM音频数据中的部分音频字节。本公开中的方案,使得混合后的音频数据中包含有每一路PCM音频数据中的部分音频字节,达到保留各路音频数据原有的振幅信息的目的,解决了音频混合后声音溢出失真,或者声音忽大忽小的问题,使得音频混合后的声音自然、清楚、流畅。同时,该音频混合方法不需要对音频数据进行加减乘除运算,从而使得本公开提供的音频混合方法简单易于实现,提高了音频混合的效率且通用性更强。
本公开的其他特征和优点将在随后的具体实施方式部分予以详细说明。
具体实施方式
以下结合附图对本公开的具体实施方式进行详细说明。应当理解的是,此处所描述的具体实施方式仅用于说明和解释本公开,并不用于限制本公开。
图1为本公开一示例性实施例示出的音频混合方法的流程图,该方法可以应用于终端,例如,混音设备。或者,该方法可以应用于云端,例如,应用于音频混合处理的服务器。
如图1所示,该方法可以包括以下步骤。
在S101中,获取多路PCM音频数据,每一路PCM音频数据的配置参数相同。
其中,PCM(Pulse Code Modulation)音频数据是未经压缩的音频采样数据流,一个采样点数据代表一个音频字节。配置参数可以包括以下中的一者或多者:采样率、声道、采样精度。其中,采样率是每秒对音频信号的采样次数,例如,采样率为44.1KHz,则一秒得到44100个采样点数据,即44100个音频字节。声道包括单声道、双声道两种。采样精度决定了记录声音的动态范围,它以位(Bit)为单位,比如8位、16位。8位可以把声波分成256级,16位可以把同样的波分成65536级的信号。每一路PCM音频数据的配置参数相同是指每一路PCM音频数据包括的任一项参数都相同,例如,每一路PCM音频数据的配置参数均为:44.1KHz、双声道、8Bit。
在S102中,对多路PCM音频数据进行混合处理,以获得一路混合音频数据,其中,混合音频数据中包含有每一路PCM音频数据中的部分音频字节。
通过以上方案,使得混合音频数据中包含有每一路PCM音频数据中的部分音频字节,这样,可以达到保留各路音频数据原有的振幅信息的目的,解决了音频混合后声音溢出失真,或者声音忽大忽小的问题,使得音频混合后的声音自然、清楚、流畅。同时,该音频混合方法不需要对音频数据进行加减乘除运算,从而使得本公开提供的音频混合方法简单易于实现,提高了音频混合效率且通用性更强。
图2为本公开一示例性实施例示出的一种获取多路PCM音频数据的示例性实现方式的流程图。如图2所示,S101可以包括S201、S202、S203。
在S201中,获取多路原始音频数据。
在本公开中,多路原始音频数据可以是PCM格式的音频数据,也可以包括除PCM格式之外的其他格式的音频数据,例如,MP3格式、WAV格式、OGG格式、APE格式等等。且,多路原始音频数据可以是已预先获得的音频数据,也可以是实时获取的音频数据,本公开不具体进行限定。
在S202中,若多路原始音频数据中包括除PCM格式之外的其他格式的原始音频数据,则对每一其他格式的原始音频数据进行格式转化,以获得对应的PCM音频数据。
在该步骤中,对除PCM格式之外的其他格式的原始音频数据进行格式转化,以将全部音频数据的格式统一为PCM格式。例如,若原始音频数据为WAV格式,去掉前22个字节的头文件信息,便可以获得对应的PCM音频数据。
需要说明的是,将任意格式的原始音频数据转化成对应的PCM音频数据的方式可以参照现有技术中音频格式转化的方案,在这里不再赘述。
在S203中,若PCM音频数据的配置参数不为预设的目标配置参数,则根据目标配置参数对PCM音频数据进行处理,以获得配置参数相同的PCM音频数据。
在本公开中,目标配置参数可以与任一路原始音频数据的配置参数相同,也可以是用户根据需要预先设定的配置参数,在本公开中不作具体的限定。
例如,若多路PCM音频数据中,既包括单声道音频数据,又包括双声道音频数据,则目标配置参数中声道参数为双声道。此时,可以将单声道音频数据复制一份,放在空白的声道上,以获得双声道音频数据。示例地,如图3所示,该单声道音频数据只在左声道上有音频数据,其中,1AL代表该单声道音频数据的第一个音频字节,2AL代表该单声道音频数据的第二个音频字节,以此类推。右声道无数据。此时,将左声道的音频数据复制一份,放在右声道上,1AR代表右声道音频数据的第一个音频字节,该1AR音频数据和1AL音频数据相同,2AR代表右声道音频数据的第二个音频字节,该2AR音频数据和2AL音频数据相同,以此类推,以形成双声道音频数据。若多路PCM音频数据均为单声道音频数据,则目标配置参数中声道参数可以为单声道;若多路PCM音频数据均为双声道音频数据,则目标配置参数中声道参数可以为双声道。
此外,需要说明的是,将不为预设的目标配置参数的PCM数据转化成目标配置参数的PCM音频数据,可以参照现有技术中配置参数转化的方案,这里不再赘述。
如此,在将其他格式的音频数据转化成PCM音频数据后,将不为目标配置参数的PCM音频数据进行处理,以获得与目标配置参数相同的PCM音频数据。这样,可以统一多路PCM音频数据的配置参数,以避免音频混合后的声音混乱。
图4本公开一示例性实施例示出的两路音频混合方法的流程图。如图4所示,该方法可以包括以下步骤。
在S401中,确定第一音频数据和第二音频数据。
在本公开中,可以根据两路PCM音频数据的长度来确定第一音频数据和第二音频数据。若两路PCM音频数据长度不同,则第一音频数据为两路PCM音频数据中长度较短的PCM音频数据,而第二音频数据为长度较长的PCM音频数据;若两路PCM音频数据长度相同,则第一音频数据为两路PCM音频数据中任一路PCM音频数据,而第二音频数据为另一路PCM音频数据。
在S402中,对第一音频数据和第二音频数据进行混合处理,混合处理后所得第二音频数据作为混合音频数据。
在本公开中,该混合音频数据是两路PCM音频数据进行混合处理后所得的音频数据。该混合音频数据进行混合处理的方式可以有多种。在本公开中,提供了如下三种音频混合处理方式。
第一混合方式为:用第一音频数据的每一偶数帧分别替换第二音频数据中的对应帧。其中,若音频数据为单声道音频数据,则一帧包括一个音频字节,若音频数据为双声道音频数据,则一帧包括两个音频字节。
若该第一音频数据和第二音频数据为单声道音频数据,则用第一音频数据中每一偶数音频字节替换第二音频数据中对应的偶数音频字节。示例地,如图5A所示,其中,1A代表第一音频数据的第一个音频字节,2A代表第一音频数据的第二个音频字节,以此类推。1B代表第二音频数据的第一个音频字节,2B代表第二音频数据的第二个音频字节,以此类推。用第一音频数据的第2个音频字节2A替换第二音频数据的第2个音频字节2B,用第一音频数据的第4个音频字节4A替换第二音频数据的第4个音频字节4B,以此类推,直到用第一音频数据的每一偶数音频字节替换了第二音频数据中的对应偶数音频字节为止。此时,经混合处理后的第二音频数据作为混合音频数据。
若该第一音频数据和第二音频数据为双声道音频数据,由于双声道的音频数据是以奇偶索引的字节分别代表左右声道,例如,音频数据流的奇数音频字节为左声道的音频数据,偶数音频字节为右声道的音频数据,因此,进行双声道音频数据混合处理时,一帧包括两个音频字节。即,PCM音频数据的每两个音频字节形成为一帧,例如,第1个音频字节和第2个音频字节为第一帧,第3个音频字节和第4个音频字节为第二帧,以此类推。示例地,对双声道音频数据进行混合时,用第一音频数据的每一偶数帧分别替换第二音频数据中的对应帧。例如,如图5B所示,其中1AL代表第一音频数据的第一个音频字节,且该音频数据属于左声道音频数据,2AR代表第一音频数据的第二个音频字节,且该音频数据属于右声道音频数据,1AL和2AR构成该第一音频数据的第一帧,以此类推。1BL代表第二音频数据的第一个音频字节,且该音频数据属于左声道音频数据,2BR代表第二音频数据的第二个音频字节,且该音频数据属于右声道音频数据,1BL和2BR构成该第二音频数据的第一帧,以此类推。用第一音频数据的第二帧替换第二音频数据的第二帧,即用第一音频数据的第3个音频字节3AL和第4个音频字节4AR替换第二音频数据的第3个音频字节3BL和第4个音频字节4BR,用第一音频数据的第四帧替换第二音频数据的第四帧,即用第一音频数据的第7个音频字节7AL和第8个音频字节8AR替换第二音频数据的第7个音频字节7BL和第8个音频字节8BR等等,以此类推,直到用第一音频数据的每一偶数帧替换了第二音频数据中的对应偶数帧为止。此时,经混合处理后的第二音频数据作为混合音频数据。
第二混合方式为:用第一音频数据的每一奇数帧分别替换第二音频数据中的对应帧。其中,若音频数据为单声道音频数据,则一帧包括一个音频字节,若音频数据为双声道音频数据,则一帧包括两个音频字节。
若该第一音频数据和第二音频数据为单声道音频数据,则用第一音频数据中每一奇数音频字节替换第二音频数据中对应的奇数音频字节。示例地,如图6A所示,其中,1A代表第一音频数据的第一个音频字节,2A代表第一音频数据的第二个音频字节,以此类推。1B代表第二音频数据的第一个音频字节,2B代表第二音频数据的第二个音频字节,以此类推。用第一音频数据的第1个音频字节1A替换第二音频数据的第1个音频字节1B,用第一音频数据的第3个音频字节3A替换第二音频数据的第3个音频字节3B,以此类推,直到用第一音频数据的每一奇数音频字节替换了第二音频数据中的对应奇数音频字节为止。此时,经混合处理后的第二音频数据作为混合音频数据。
若该第一音频数据和第二音频数据为双声道音频数据,则进行双声道音频数据混合处理时,一帧包括两个音频字节。即,PCM音频数据的每两个音频字节形成为一帧,例如,第1个音频字节和第2个音频字节为第一帧,第3个音频字节和第4个音频字节为第二帧,以此类推。示例地,对双声道音频数据进行混合时,用第一音频数据的每一奇数帧分别替换第二音频数据中对应的奇数帧。例如,如图6B所示,其中1AL代表第一音频数据的第一个音频字节,且该音频数据属于左声道音频数据,2AR代表第一音频数据的第二个音频字节,且该音频数据属于右声道音频数据,1AL和2AR构成该第一音频数据的第一帧,以此类推。1BL代表第二音频数据的第一个音频字节,且该音频数据属于左声道音频数据,2BR代表第二音频数据的第二个音频字节,且该音频数据属于右声道音频数据,1BL和2BR构成该第二音频数据的第一帧,以此类推。用第一音频数据的第一帧替换第二音频数据的第一帧,即用第一音频数据的第1个音频字节1AL和第2个音频字节2AR替换第二音频数据的第1个音频字节1BL和第2个音频字节2BR,用第一音频数据的第三帧替换第二音频数据的第三帧,即用第一音频数据的第5个音频字节5AL和第6个音频字节6AR替换第二音频数据的第5个音频字节5BL和第6个音频字节6BR等等,以此类推,直到用第一音频数据的每一奇数帧替换了第二音频数据中的对应奇数帧为止。此时,经混合处理后的第二音频数据作为混合音频数据。
第三混合方式为:针对第一音频数据的每一帧,分别生成随机数,针对第一音频数据的每一帧,若该帧对应的随机数为第一数值类型,则用该帧替换第二音频数据中的对应帧,若该帧对应的随机数为第二数值类型,则保留第二音频数据中该帧的对应帧。其中,若音频数据为单声道音频数据,则一帧包括一个音频字节,若音频数据为双声道音频数据,则一帧包括两个音频字节。
在本公开中,随机数为整数,且随机数的取值范围可以是用户设定的,示例地,如0-1之间、或者0-9之间,在本公开中不作具体限定。数值类型可以为奇数或者偶数。示例地,第一数值类型为奇数,第二数值类型为偶数,该第一数值类型和第二数值类型可以是用户设定,在本公开中不作具体限定。在一种实施例中,随机数的取值范围为0-1,且第一数值类型为奇数,第二数值类型为偶数。因此,针对第一音频数据的每一帧,若该帧对应的随机数为1,则用该帧替换第二音频数据中的对应帧,若该帧对应的随机数为0,则保留第二音频数据中该帧的对应帧。示例地,如图7所示,其中,1A代表第一音频数据的第一帧,2A代表第一音频数据的第二帧,以此类推。1B代表第二音频数据的第一帧,2B代表第二音频数据的第二帧,以此类推。针对第一音频数据的第一帧,对应的随机数为1,则用第一音频数据的第一帧1A替换第二音频数据的第一帧1B,针对第一音频数据的第二帧,对应的随机数为0,则保留第二音频数据的第二帧2B,以此类推,此时,经混合处理后的第二音频数据作为混合音频数据。
采用上述第一混合方式、第二混合方式、第三混合方式中的一种对第一音频数据和第二音频数据进行混合处理,实现了将第一音频数据和第二音频数据的混合,且保留了该第一音频数据和第二音频数据原有的振幅信息,解决了音频混合后声音溢出失真,或者声音忽大忽小的问题。
图8为本公开一示例性实施例示出的两路以上音频混合方法的流程图。两路以上音频混合方式可以有多种。在一种实施方式中,如图4所示,该方法可以包括以下步骤。
在S801中,从多路PCM音频数据中,随机选取两路PCM音频数据作为目标PCM音频数据。
在S802中,在两路目标PCM音频数据中,确定第一音频数据和第二音频数据。其中,确定第一音频数据和第二音频数据的方式可以为:若两路PCM音频数据长度不同,则第一音频数据为两路PCM音频数据中长度较短的PCM音频数据,而第二音频数据为长度较长的PCM音频数据;若两路PCM音频数据长度相同,则第一音频数据为两路PCM音频数据中任一路PCM音频数据,而第二音频数据为另一路PCM音频数据。
在S803中,针对第一音频数据的每一帧,分别生成随机数。
在S804中,针对第一音频数据的每一帧,若该帧对应的随机数为第一数值类型,则用该帧替换第二音频数据中的对应帧,若该帧对应的随机数为第二数值类型,则保留第二音频数据中该帧的对应帧,其中,替换之后所得的第二音频数据为第一混合音频数据。该步骤的具体实现方式与上述第三混合方式相同,这里不再赘述。
在S805中,判断多路PCM音频数据中是否存在尚未进行混合处理的PCM音频数据,若存在,执行步骤806,若不存在,音频混合处理结束。
在S806中,判断尚未进行混合处理的PCM音频数据是否为多路。如果是,执行步骤807,如果否,执行步骤808。
在S807中,从尚未进行混合处理的PCM音频数据中随机选取一路PCM音频数据,并将所选择的该路PCM音频数据和第一混合音频数据作为新的目标PCM音频数据,之后返回步骤802,以重新执行S802-S806。
在S808中,若尚未进行混合处理的PCM音频数据为一路,则在该路尚未进行混合处理的PCM音频数据和第一混合音频数据中确定第三音频数据和第四音频数据。其中,确定第三音频数据和第四音频数据的方式可以为:若该路尚未进行混合处理的PCM音频数据和第一混合音频数据长度不同,则第三音频数据为这两路音频数据中长度较短的音频数据,而第四音频数据为长度较长的音频数据;若该路尚未进行混合处理的PCM音频数据和第一混合音频数据长度相同,则第三音频数据为这两路音频数据中任一路音频数据,而第四音频数据为另一路音频数据。
在S809中,采用第一混合方式、第二混合方式、第三混合方式中的一种对第三音频数据和所述第四音频数据进行混合处理,混合处理后所得第四音频数据作为第二混合音频数据。
其中,第二混合音频数据是将两路以上的音频数据全部混合处理后,所获得的混合音频数据。在本公开中,首先从两路以上的PCM音频数据中,随机选取两路PCM音频数据作为目标PCM音频数据进行音频混合处理,以获得第一混合音频数据,具体的实施方式在两路PCM音频数据采用第三混合方式进行音频混合处理时进行了详细说明,这里不再赘述。接着,判断是否存在尚未进行混合处理的音频数据,若存在,且剩余的音频数据为多路,说明音频混合处理尚未结束,则从剩余的PCM音频数据中随机选择一路,并将所选择的该路PCM音频数据和第一混合音频数据作为新的目标PCM音频数据,之后返回步骤S802,继续采用上述第三混合方式进行音频混合处理。若剩余的音频数据为一路,则在该路尚未进行混合处理的PCM音频数据和第一混合音频数据中确定第三音频数据和第四音频数据。接着,采用第一混合方式、第二混合方式、第三混合方式中的一种进行混合处理,以获得第二混合音频数据。其中,第一混合方式、第二混合方式、第三混合方式的具体实施方式已在上文详细描述,这里不再赘述。这样,可以将两路音频数据的混合方法扩展到两路以上的音频数据混合,且保留了两路以上的音频数据原有的振幅信息,使得该音频混合方法通用性更强。
图9为本公开一示例性实施例示出的音频混合装置的框图。如图9所示,该装置900可以包括:
获取模块901,用于获取多路PCM音频数据,每一路所述PCM音频数据的配置参数相同;
混合处理模块902,用于对所述多路PCM音频数据进行混合处理,以获得一路混合音频数据,其中,所述混合音频数据中包含有每一路所述PCM音频数据中的部分音频字节。
本公开中的方案,将多路PCM音频数据混合在一起,使得混合音频数据中包含有每一路PCM音频数据中的部分音频字节,这样,可以达到保留各路音频数据原有的振幅信息的目的,解决了音频混合后声音溢出失真,或者声音忽大忽小的问题,使得音频混合后的声音自然、清楚、流畅。同时,该音频混合方法不需要对音频数据进行加减乘除运算,从而使得本公开提供的音频混合方法简单易于实现,提高了音频混合效率且通用性更强。
可选地,所述获取模块包括:
获取子模块,用于获取多路原始音频数据;
转换子模块,用于若所述多路原始音频数据中包括除PCM格式之外的其他格式的原始音频数据,则对每一所述其他格式的所述原始音频数据进行格式转化,以获得对应的PCM音频数据;
处理子模块,用于若所述PCM音频数据的配置参数不为预设的目标配置参数,则根据所述目标配置参数对所述PCM音频数据进行处理,以获得配置参数相同的所述PCM音频数据。
可选地,若所述多路PCM音频数据为两路PCM音频数据,则所述混合处理模块包括:
第一确定子模块,用于确定第一音频数据和第二音频数据,其中,若所述两路PCM音频数据长度不同,则所述第一音频数据为所述两路PCM音频数据中长度较短的PCM音频数据,而所述第二音频数据为长度较长的PCM音频数据;若所述两路PCM音频数据长度相同,则所述第一音频数据为所述两路PCM音频数据中任一路PCM音频数据,而所述第二音频数据为另一路PCM音频数据;
第一混合子模块,用于采用第一混合方式、第二混合方式、第三混合方式中的一种对所述第一音频数据和所述第二音频数据进行混合处理,混合处理后所得第二音频数据作为所述混合音频数据;其中,
所述第一混合方式为用所述第一音频数据的每一偶数帧分别替换所述第二音频数据中的对应帧;
所述第二混合方式为用所述第一音频数据的每一奇数帧分别替换所述第二音频数据中的对应帧;
所述第三混合方式为针对所述第一音频数据的每一帧,分别生成随机数;针对所述第一音频数据的每一帧,若该帧对应的随机数为第一数值类型,则用该帧替换所述第二音频数据中的对应帧,若该帧对应的随机数为第二数值类型,则保留所述第二音频数据中该帧的对应帧;
其中,若音频数据为单声道音频数据,则一帧包括一个音频字节,若音频数据为双声道音频数据,则一帧包括两个音频字节。
可选地,若所述多路PCM音频数据为两路以上PCM音频数据,则所述混合处理模块包括:
第一选取子模块,用于从所述多路PCM音频数据中,随机选取两路PCM音频数据作为目标PCM音频数据;
第二确定子模块,用于在两路所述目标PCM音频数据中,确定第一音频数据和第二音频数据,其中,若两路所述目标PCM音频数据长度不同,则所述第一音频数据为两路所述目标PCM音频数据中长度较短的目标PCM音频数据,而所述第二音频数据为长度较长的目标PCM音频数据;若两路所述目标PCM音频数据长度相同,则所述第一音频数据为两路所述目标PCM音频数据中任一路目标PCM音频数据,而所述第二音频数据为另一路目标PCM音频数据;
随机数生成子模块,用于针对所述第一音频数据的每一帧,分别生成随机数;
第二混合处理子模块,用于针对所述第一音频数据的每一帧,若该帧对应的随机数为第一数值类型,则用该帧替换所述第二音频数据中的对应帧,若该帧对应的随机数为第二数值类型,则保留所述第二音频数据中该帧的对应帧;其中,替换之后所得的第二音频数据为第一混合音频数据;
第二选取子模块,用于若所述多路PCM音频数据中存在尚未进行混合处理的PCM音频数据,且所述尚未进行混合处理的PCM音频数据为多路,则从所述尚未进行混合处理的PCM音频数据中随机选取一路PCM音频数据,并将所选择的该路PCM音频数据和所述第一混合音频数据作为新的目标PCM音频数据,之后触发所述第二确定子模块重新执行在两路所述目标PCM音频数据中,确定第一音频数据和第二音频数据的操作;
第三确定子模块,用于若所述多路PCM音频数据中存在尚未进行混合处理的PCM音频数据,且所述尚未进行混合处理的PCM音频数据为一路,则在该路尚未进行混合处理的PCM音频数据和所述第一混合音频数据中确定第三音频数据和第四音频数据,其中,若该路尚未进行混合处理的PCM音频数据和所述第一混合音频数据长度不同,则所述第三音频数据为这两路音频数据中长度较短的音频数据,而所述第四音频数据为长度较长的音频数据;若该路尚未进行混合处理的PCM音频数据和所述第一混合音频数据长度相同,则所述第三音频数据为这两路音频数据中任一路音频数据,而所述第四音频数据为另一路音频数据;
第三混合处理子模块,用于采用第一混合方式、第二混合方式、第三混合方式中的一种对所述第三音频数据和所述第四音频数据进行混合处理,混合处理后所得第四音频数据作为第二混合音频数据;其中,
所述第一混合方式为用所述第三音频数据的每一偶数帧分别替换所述第四音频数据中的对应帧;
所述第二混合方式为用所述第三音频数据的每一奇数帧分别替换所述第四音频数据中的对应帧;
所述第三混合方式为针对所述第三音频数据的每一帧,分别生成随机数;针对所述第三音频数据的每一帧,若该帧对应的随机数为第一数值类型,则用该帧替换所述第四音频数据中的对应帧,若该帧对应的随机数为第二数值类型,则保留所述第四音频数据中该帧的对应帧;
其中,若音频数据为单声道音频数据,则一帧包括一个音频字节,若音频数据为双声道音频数据,则一帧包括两个音频字节。
关于上述实施例中的装置,其中各个模块执行操作的具体方式已经在有关该方法的实施例中进行了详细描述,此处将不做详细阐述说明。
基于同一构思,本公开提供一种计算机可读存储介质,其上存储有计算机程序,该程序被处理器执行时实现本公开提供的音频混合方法的步骤。
图10是根据一示例性实施例示出的一种电子设备1000的框图。如图10所示,该电子设备1000可以包括:处理器1001,存储器1002。该电子设备1000还可以包括多媒体组件1003,输入/输出(I/O)接口1004,以及通信组件1005中的一者或多者。
其中,处理器1001用于控制该电子设备1000的整体操作,以完成上述的音频混合方法中的全部或部分步骤。存储器1002用于存储各种类型的数据以支持在该电子设备1000的操作,这些数据例如可以包括用于在该电子设备1000上操作的任何应用程序或方法的指令,以及应用程序相关的数据,例如联系人数据、收发的消息、图片、音频、视频等等。该存储器1002可以由任何类型的易失性或非易失性存储设备或者它们的组合实现,例如静态随机存取存储器(Static Random Access Memory,简称SRAM),电可擦除可编程只读存储器(Electrically Erasable Programmable Read-Only Memory,简称EEPROM),可擦除可编程只读存储器(Erasable Programmable Read-Only Memory,简称EPROM),可编程只读存储器(Programmable Read-Only Memory,简称PROM),只读存储器(Read-Only Memory,简称ROM),磁存储器,快闪存储器,磁盘或光盘。多媒体组件1003可以包括屏幕和音频组件。其中屏幕例如可以是触摸屏,音频组件用于输出和/或输入音频信号。例如,音频组件可以包括一个麦克风,麦克风用于接收外部音频信号。所接收的音频信号可以被进一步存储在存储器1002或通过通信组件1005发送。音频组件还包括至少一个扬声器,用于输出音频信号。I/O接口1004为处理器1001和其他接口模块之间提供接口,上述其他接口模块可以是键盘,鼠标,按钮等。这些按钮可以是虚拟按钮或者实体按钮。通信组件1005用于该电子设备1000与其他设备之间进行有线或无线通信。无线通信,例如Wi-Fi,蓝牙,近场通信(Near FieldCommunication,简称NFC),2G、3G、4G、NB-IOT、eMTC、或其他5G等等,或它们中的一种或几种的组合,在此不做限定。因此相应的该通信组件1005可以包括:Wi-Fi模块,蓝牙模块,NFC模块等等。
在一示例性实施例中,电子设备1000可以被一个或多个应用专用集成电路(Application Specific Integrated Circuit,简称ASIC)、数字信号处理器(DigitalSignal Processor,简称DSP)、数字信号处理设备(Digital Signal Processing Device,简称DSPD)、可编程逻辑器件(Programmable Logic Device,简称PLD)、现场可编程门阵列(Field Programmable Gate Array,简称FPGA)、控制器、微控制器、微处理器或其他电子元件实现,用于执行上述的音频混合方法。
在另一示例性实施例中,还提供了一种包括程序指令的计算机可读存储介质,该程序指令被处理器执行时实现上述的音频混合方法的步骤。例如,该计算机可读存储介质可以为上述包括程序指令的存储器1002,上述程序指令可由电子设备1000的处理器1001执行以完成上述的音频混合方法。
图11是根据一示例性实施例示出的一种电子设备1100的框图。例如,电子设备1100可以被提供为一服务器。参照图11,电子设备1100包括处理器1122,其数量可以为一个或多个,以及存储器1132,用于存储可由处理器1122执行的计算机程序。存储器1132中存储的计算机程序可以包括一个或一个以上的每一个对应于一组指令的模块。此外,处理器1122可以被配置为执行该计算机程序,以执行上述的音频混合方法。
另外,电子设备1100还可以包括电源组件1126和通信组件1150,该电源组件1126可以被配置为执行电子设备1100的电源管理,该通信组件1150可以被配置为实现电子设备1100的通信,例如,有线或无线通信。此外,该电子设备1100还可以包括输入/输出(I/O)接口1158。电子设备1100可以操作基于存储在存储器1132的操作系统,例如WindowsServerTM,Mac OS XTM,UnixTM,LinuxTM等等。
在另一示例性实施例中,还提供了一种包括程序指令的计算机可读存储介质,该程序指令被处理器执行时实现上述的音频混合方法的步骤。例如,该计算机可读存储介质可以为上述包括程序指令的存储器1132,上述程序指令可由电子设备1100的处理器1122执行以完成上述的音频混合方法。
在另一示例性实施例中,还提供一种计算机程序产品,该计算机程序产品包含能够由可编程的装置执行的计算机程序,该计算机程序具有当由该可编程的装置执行时用于执行上述的音频混合方法的代码部分。
以上结合附图详细描述了本公开的优选实施方式,但是,本公开并不限于上述实施方式中的具体细节,在本公开的技术构思范围内,可以对本公开的技术方案进行多种简单变型,这些简单变型均属于本公开的保护范围。
另外需要说明的是,在上述具体实施方式中所描述的各个具体技术特征,在不矛盾的情况下,可以通过任何合适的方式进行组合,为了避免不必要的重复,本公开对各种可能的组合方式不再另行说明。
此外,本公开的各种不同的实施方式之间也可以进行任意组合,只要其不违背本公开的思想,其同样应当视为本公开所公开的内容。