技术领域
[0001] 本
发明涉及嵌入式设备技术领域,尤其涉及一种嵌入式混音方法、装置、嵌入式设备及存储介质。
背景技术
[0002]
计算机系统在处理多路数字音频数据时常常需要进行混音计算。例如,在语音会议系统中,当用户A和用户B通过各自麦克
风采集的音频需要同时传递给用户C时,就需要对用户A和用户B两路的音频数据进行混合处理。
[0003]
现有技术在处理混音时,为了减少混音时可能出现的爆音、音量过小的问题,一般采用归一化的混音
算法,该算法根据音频的
能量动态调整衰减因子,可以达到较好的混音效果。
[0004] 然而,归一化的混音算法需要计算机系统承担大量的运算,尤其是浮点运算,通常采用专用的计算芯片或者占用较大的系统运算资源,这要求计算机系统本身具备较高的运算能
力,而这恰恰是
嵌入式系统难以达到的。
[0005] 因此,寻找一种适用于嵌入式系统、对系统运算能力要求较低的混音方法成为本领域技术人员亟需解决的问题。
发明内容
[0006] 本发明
实施例提供一种嵌入式混音方法、装置、嵌入式设备及存储介质,以解决现有混音算法不适用于嵌入式系统的问题。
[0007] 一种嵌入式混音方法,包括:
[0008] 获取待混音的第一数字音频数据和第二数字音频数据,所述第一数字音频数据和第二数字音频数据的
采样位宽和采样
频率均相同;
[0009] 若所述第一数字音频数据和所述第二数字音频数据均为正,则对所述第一数字音频数据和第二数字音频数据做加法运算,得到第三音频数据,然后将所述第三音频数据减去防溢出数据,得到混音后的音频数据,其中,所述防溢出数据由对所述第一数字音频数据和所述第二数字音频数据做乘法运算后再带符号右移
指定位数得到,所述指
定位数根据所述采样位宽确定;
[0010] 若所述第一数字音频数据和所述第二数字音频数据均为负,则对所述第一数字音频数据和第二数字音频数据做加法运算,得到第四音频数据,然后将所述第四音频数据加上所述防溢出数据,得到混音后的音频数据;
[0011] 若所述第一数字音频数据和所述第二数字音频数据不均为正且不均为负,则对所述第一数字音频数据和第二数字音频数据做加法运算,得到第五音频数据作为混音后的音频数据。
[0012] 一种嵌入式混音装置,包括:
[0013] 待混音音频获取模
块,用于获取待混音的第一数字音频数据和第二数字音频数据,所述第一数字音频数据和第二数字音频数据的采样位宽和
采样频率均相同;
[0014] 第一混音处理模块,用于若所述第一数字音频数据和所述第二数字音频数据均为正,则对所述第一数字音频数据和第二数字音频数据做加法运算,得到第三音频数据,然后将所述第三音频数据减去防溢出数据,得到混音后的音频数据,其中,所述防溢出数据由对所述第一数字音频数据和所述第二数字音频数据做乘法运算后再带符号右移指定位数得到,所述指定位数根据所述采样位宽确定;
[0015] 第二混音处理模块,用于若所述第一数字音频数据和所述第二数字音频数据均为负,则对所述第一数字音频数据和第二数字音频数据做加法运算,得到第四音频数据,然后将所述第四音频数据加上所述防溢出数据,得到混音后的音频数据;
[0016] 第三混音处理模块,用于若所述第一数字音频数据和所述第二数字音频数据不均为正且不均为负,则对所述第一数字音频数据和第二数字音频数据做加法运算,得到第五音频数据作为混音后的音频数据。
[0017] 一种嵌入式设备,包括
存储器、处理器以及存储在所述存储器中并可在所述处理器上运行的
计算机程序,所述处理器执行所述计算机程序时实现上述嵌入式混音方法的步骤。
[0018] 一种计算机可读存储介质,所述计算机可读存储介质存储有计算机程序,所述计算机程序被处理器执行时实现上述嵌入式混音方法的步骤。
[0019] 上述嵌入式混音方法、装置、嵌入式设备及存储介质,首先,获取待混音的第一数字音频数据和第二数字音频数据,所述第一数字音频数据和第二数字音频数据的采样位宽和采样频率均相同;若所述第一数字音频数据和所述第二数字音频数据均为正,则对所述第一数字音频数据和第二数字音频数据做加法运算,得到第三音频数据,然后将所述第三音频数据减去防溢出数据,得到混音后的音频数据,其中,所述防溢出数据由对所述第一数字音频数据和所述第二数字音频数据做乘法运算后再带符号右移所述采样位宽得到;若所述第一数字音频数据和所述第二数字音频数据均为负,则对所述第一数字音频数据和第二数字音频数据做加法运算,得到第四音频数据,然后将所述第四音频数据加上所述防溢出数据,得到混音后的音频数据;若所述第一数字音频数据和所述第二数字音频数据不均为正且不均为负,则对所述第一数字音频数据和第二数字音频数据做加法运算,得到第五音频数据作为混音后的音频数据。可知,本发明在计算两路数字音频数据时,仅需使用加法、减法、乘法和位运算,无需使用除法运算,也即无需要求计算机系统具备浮点运算能力,只需较少的运算性能即可实现多路混音的计算,适用于嵌入式系统。
附图说明
[0020] 为了更清楚地说明本发明实施例的技术方案,下面将对本发明实施例的描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动性的前提下,还可以根据这些附图获得其他的附图。
[0021] 图1是本发明一实施例中嵌入式混音方法的一应用环境示意图;
[0022] 图2是本发明一实施例中嵌入式混音方法的一
流程图;
[0023] 图3是本发明一实施例中嵌入式混音方法在一个应用场景下计算防溢出数据的流程示意图;
[0024] 图4是本发明一实施例中嵌入式混音方法在一个应用场景下确定指定位数的流程示意图;
[0025] 图5是本发明一实施例中嵌入式混音装置的结构示意图。
具体实施方式
[0026] 下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有作出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
[0027] 本
申请提供的嵌入式混音方法,可应用在如图1的应用环境中,其中,可采集音频数据的客户端可以与嵌入式设备进行通信连接。其中,该客户端可以但不限于各种个人计算机、
笔记本电脑、智能手机、
平板电脑和便携式可穿戴设备。
[0028] 在一实施例中,如图2所示,提供一种嵌入式混音方法,以该方法应用在图1中的嵌入式设备为例进行说明,包括如下步骤:
[0029] 101、获取待混音的第一数字音频数据和第二数字音频数据,所述第一数字音频数据和第二数字音频数据的采样位宽和采样频率均相同;
[0030] 本实施例中,客户端可以通过其上的音频采集设备采集得到两路音频数据,分别为第一数字音频数据和第二数字音频数据,该音频采集设备具体可以为麦克风。需要说明的是,本实施例中待混音的第一数字音频数据和第二数字音频数据既可以分别来自两个不同的客户端,也可以来自同一个客户端,只需第一数字音频数据和第二数字音频数据这两路数字音频数据的采样位宽和采样频率均相同即可。例如,在某个应用场景下,分别设有采样位宽和采样频率均相同的麦克风A和麦克风B,用户1使用麦克风A录入语音,得到第一数字音频数据,用户2使用麦克风B录入语音,得到第二数字音频数据。
[0031] 102、判断所述第一数字音频数据和所述第二数字音频数据是否均为正或者是否均为负,若均为正,则执行步骤103和步骤104,若均为负,则执行步骤105和步骤106,若不均为正且不均为负,则执行步骤107;
[0032] 可以理解的是,在采集音频并转化出数字音频数据时,由于音频振动方向的不同而导致转化出的数字音频数据存在正负之分。在本实施例中,步骤101获取到的待混音的第一数字音频数据和第二数字音频数据已经过转化,也即已经过数字化处理,两路音频数据的正负已确定下来。考虑到所述第一数字音频数据和所述第二数字音频数据之间的正负关系将影响到这两路音频数据在混音后是否会出现数据溢出的情况,为此,嵌入式设备需要判断所述第一数字音频数据和所述第二数字音频数据是否均为正或者是否均为负,若均为正,则执行步骤103和步骤104,若均为负,则执行步骤105和步骤106,若不均为正且不均为负,即在所述第一数字音频数据和所述第二数字音频数据一正一负的情况下,则执行步骤107。
[0033] 103、对所述第一数字音频数据和第二数字音频数据做加法运算,得到第三音频数据;
[0034] 104、将所述第三音频数据减去防溢出数据,得到混音后的音频数据,其中,所述防溢出数据由对所述第一数字音频数据和所述第二数字音频数据做乘法运算后再带符号右移指定位数得到,所述指定位数根据所述采样位宽确定;
[0035] 当所述第一数字音频数据和所述第二数字音频数据均为正时,可以理解的是,所述第一数字音频数据和第二数字音频数据混音后,由于两路音频数据振动方向相同,存在正溢出的可能性,因此在步骤103对所述第一数字音频数据和第二数字音频数据做加法运算,得到第三音频数据之后,需要将所述第三音频数据减去防溢出数据,可以防止数据正溢出,从而得到的该混音后的音频数据不会出现“爆音”的情况。
[0036] 其中,所述防溢出数据由对所述第一数字音频数据和所述第二数字音频数据做乘法运算后再带符号右移指定位数得到,所述指定位数根据所述采样位宽确定。具体地,如图3所示,所述防溢出数据可以通过以下步骤计算得到:
[0037] 201、对所述第一数字音频数据和所述第二数字音频数据做乘法运算,得到第六音频数据;
[0038] 202、将所述第六音频数据带符号右移所述指定位数,得到防溢出数据。
[0039] 对于步骤201,可以理解的是,由于乘法运算相对占用系统的运算资源较少,因此本实施例中的嵌入式设备可以对所述第一数字音频数据和所述第二数字音频数据做乘法运算,得到第六音频数据,不会给该嵌入式设备带来较大的运算负担。
[0040] 对于步骤202,本实施例中,防溢出数据的计算思路是第一数字音频数据与第二数字音频数据相乘,然后除以采样
精度的最大值。然而,考虑到除法运算要求系统具备浮点运算能力,而嵌入式设备无法满足这一要求,因此,本实施例采用位运算来代替除法运算。可知,在步骤202中,得到第六音频数据之后,可以将所述第六音频数据带符号右移所述指定位数,得到防溢出数据。其中,带符号右移指定位数的效果与除以采样精度的最大值的效果相同,因此均能得到该防溢出数据。
[0041] 上述步骤201和202的计算过程可以采用如下公式表述:
[0042] Y=(A×B)>>K
[0043] 其中,A为第一数字音频数据,B为第二数字音频数据,K为指定位数,Y为防溢出数据。其中指定位数K根据所述采样位宽确定,采样位宽一般为8bit、16bit或24bit,若该第一数字音频数据和第二数字音频数据的采样位宽为8bit,则K=8;若该第一数字音频数据和第二数字音频数据的采样位宽为16bit,则K=16;若该第一数字音频数据和第二数字音频数据的采样位宽为24bit,则K=24。
[0044] 进一步地,如图4所示,所述指定位数可以通过以下步骤确定得到:
[0045] 301、获取所述第一数字音频数据或所述第二数字音频数据的采样位宽;
[0046] 302、确定所述采样位宽的值作为指定位数。
[0047] 对于步骤301和步骤302,可以理解的是,由于所述第一数字音频数据和所述第二数字音频数据的采样位宽相同,因此只需可以获取所述第一数字音频数据和所述第二数字音频数据中任意一个数字音频数据的采样位宽。在获取到采样位宽后,可以直接确定该采样位宽的值为指定位数。比如,若该采样位宽为8bit,则指定位数为8;若该采样位宽为16bit,则指定位数为16;若该采样位宽为24bit,则指定位数为24。
[0048] 105、对所述第一数字音频数据和第二数字音频数据做加法运算,得到第四音频数据;
[0049] 106、将所述第四音频数据加上所述防溢出数据,得到混音后的音频数据;
[0050] 当所述第一数字音频数据和所述第二数字音频数据均为负时,可以理解的是,所述第一数字音频数据和第二数字音频数据混音后,由于两路音频数据振动方向相同,存在负溢出的可能性,因此在步骤105对所述第一数字音频数据和第二数字音频数据做加法运算,得到第四音频数据之后,需要将所述第四音频数据加上所述防溢出数据,可以防止数据负溢出,从而得到的该混音后的音频数据不会出现“爆音”的情况。
[0051] 需要说明的是,步骤105、步骤106中的防溢出数据和指定位数的与上述步骤103、步骤104相同,此处不再赘述。
[0052] 107、对所述第一数字音频数据和第二数字音频数据做加法运算,得到第五音频数据作为混音后的音频数据。
[0053] 可以理解的是,当所述第一数字音频数据和所述第二数字音频数据不均为正且不均为负时,即所述第一数字音频数据和所述第二数字音频数据一正一负,这两路音频数据的振动相反,这种情况下所述第一数字音频数据和第二数字音频数据混音后不存在数据溢出的可能性,因此本实施例中可以直接对所述第一数字音频数据和第二数字音频数据做加法运算,得到第五音频数据作为混音后的音频数据。
[0054] 上述步骤103-107可以简单总结为如下公式:
[0055]
[0056] 其中,A为第一数字音频数据,B为第二数字音频数据,K为指定位数,C为混音后的音频数据。
[0057] 在某个应用场景中,设采样位宽为16bit,通过C++代码实现上述C的计算公式时,其代码如下:
[0058]
[0059] 本发明实施例中,首先,获取待混音的第一数字音频数据和第二数字音频数据,所述第一数字音频数据和第二数字音频数据的采样位宽和采样频率均相同;若所述第一数字音频数据和所述第二数字音频数据均为正,则对所述第一数字音频数据和第二数字音频数据做加法运算,得到第三音频数据,然后将所述第三音频数据减去防溢出数据,得到混音后的音频数据,其中,所述防溢出数据由对所述第一数字音频数据和所述第二数字音频数据做乘法运算后再带符号右移所述采样位宽得到;若所述第一数字音频数据和所述第二数字音频数据均为负,则对所述第一数字音频数据和第二数字音频数据做加法运算,得到第四音频数据,然后将所述第四音频数据加上所述防溢出数据,得到混音后的音频数据;若所述第一数字音频数据和所述第二数字音频数据不均为正且不均为负,则对所述第一数字音频数据和第二数字音频数据做加法运算,得到第五音频数据作为混音后的音频数据。可知,本发明在计算两路数字音频数据时,仅需使用加法、减法、乘法和位运算,无需使用除法运算,也即无需要求计算机系统具备浮点运算能力,只需较少的运算性能即可实现多路混音的计算,适用于嵌入式系统。
[0060] 应理解,上述实施例中各步骤的序号的大小并不意味着执行顺序的先后,各过程的执行顺序应以其功能和内在逻辑确定,而不应对本发明实施例的实施过程构成任何限定。
[0061] 在一实施例中,提供一种嵌入式混音装置,该嵌入式混音装置与上述实施例中嵌入式混音方法一一对应。如图5所示,该嵌入式混音装置包括待混音音频获取模块401、第一混音处理模块402、第二混音处理模块403和第三混音处理模块404。各功能模块详细说明如下:
[0062] 待混音音频获取模块401,用于获取待混音的第一数字音频数据和第二数字音频数据,所述第一数字音频数据和第二数字音频数据的采样位宽和采样频率均相同;
[0063] 第一混音处理模块402,用于若所述第一数字音频数据和所述第二数字音频数据均为正,则对所述第一数字音频数据和第二数字音频数据做加法运算,得到第三音频数据,然后将所述第三音频数据减去防溢出数据,得到混音后的音频数据,其中,所述防溢出数据由对所述第一数字音频数据和所述第二数字音频数据做乘法运算后再带符号右移指定位数得到,所述指定位数根据所述采样位宽确定;
[0064] 第二混音处理模块403,用于若所述第一数字音频数据和所述第二数字音频数据均为负,则对所述第一数字音频数据和第二数字音频数据做加法运算,得到第四音频数据,然后将所述第四音频数据加上所述防溢出数据,得到混音后的音频数据;
[0065] 第三混音处理模块404,用于若所述第一数字音频数据和所述第二数字音频数据不均为正且不均为负,则对所述第一数字音频数据和第二数字音频数据做加法运算,得到第五音频数据作为混音后的音频数据。
[0066] 进一步地,所述防溢出数据可以通过以下模块计算得到:
[0067] 乘法运算模块,用于对所述第一数字音频数据和所述第二数字音频数据做乘法运算,得到第六音频数据;
[0068] 位运算模块,用于将所述第六音频数据带符号右移所述指定位数,得到防溢出数据。
[0069] 进一步地,所述指定位数可以通过以下模块确定得到:
[0070] 采样位宽获取模块,用于获取所述第一数字音频数据或所述第二数字音频数据的采样位宽;
[0071] 位数确定模块,用于确定所述采样位宽的值作为指定位数。
[0072] 进一步地,所述采样位宽可以为8bit、16bit或24bit。
[0073] 关于嵌入式混音装置的具体限定可以参见上文中对于嵌入式混音方法的限定,在此不再赘述。上述嵌入式混音装置中的各个模块可全部或部分通过
软件、
硬件及其组合来实现。上述各模块可以硬件形式内嵌于或独立于嵌入式设备中的处理器中,也可以以软件形式存储于嵌入式设备中的存储器中,以便于处理器调用执行以上各个模块对应的操作。
[0074] 在一个实施例中,提供了一种嵌入式设备,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,处理器执行计算机程序时实现上述实施例中嵌入式混音方法的步骤,例如图2所示的步骤101至步骤107。或者,处理器执行计算机程序时实现上述实施例中嵌入式混音装置的各模块的功能,例如图5所示模块401至模块404的功能。为避免重复,这里不再赘述。
[0075] 在一个实施例中,提供了一种计算机可读存储介质,其上存储有计算机程序,计算机程序被处理器执行时实现上述实施例中嵌入式混音方法的步骤,例如图2所示的步骤101至步骤107。或者,计算机程序被处理器执行时实现上述实施例中嵌入式混音装置的各模块的功能,例如图5所示模块401至模块404的功能。为避免重复,这里不再赘述。
[0076] 本领域普通技术人员可以理解实现上述实施例方法中的全部或部分流程,是可以通过计算机程序来指令相关的硬件来完成,所述的计算机程序可存储于一非易失性计算机可读取存储介质中,该计算机程序在执行时,可包括如上述各方法的实施例的流程。其中,本申请所提供的各实施例中所使用的对存储器、存储、
数据库或其它介质的任何引用,均可包括非易失性和/或易失性存储器。
非易失性存储器可包括
只读存储器(ROM)、可编程ROM(PROM)、电可编程ROM(EPROM)、电可擦除可编程ROM(EEPROM)或闪存。易失性存储器可包括
随机存取存储器(RAM)或者外部
高速缓冲存储器。作为说明而非局限,RAM以多种形式可得,诸如静态RAM(SRAM)、动态RAM(DRAM)、同步DRAM(SDRAM)、双数据率SDRAM(DDRSDRAM)、增强型SDRAM(ESDRAM)、同步链路(Synchlink)DRAM(SLDRAM)、存储器总线(Rambus)直接RAM(RDRAM)、直接存储器总线动态RAM(DRDRAM)、以及存储器总线动态RAM(RDRAM)等。
[0077] 所属领域的技术人员可以清楚地了解到,为了描述的方便和简洁,仅以上述各功能单元、模块的划分进行举例说明,实际应用中,可以根据需要而将上述功能分配由不同的功能单元、模块完成,即将所述装置的内部结构划分成不同的功能单元或模块,以完成以上描述的全部或者部分功能。
[0078] 以上所述实施例仅用以说明本发明的技术方案,而非对其限制;尽管参照前述实施例对本发明进行了详细的说明,本领域的普通技术人员应当理解:其依然可以对前述各实施例所记载的技术方案进行
修改,或者对其中部分技术特征进行等同替换;而这些修改或者替换,并不使相应技术方案的本质脱离本发明各实施例技术方案的精神和范围,均应包含在本发明的保护范围之内。