基于hi35xx平台的软件混音方法技术

技术编号:38544177 阅读:8 留言:0更新日期:2023-08-22 20:54
本发明专利技术公开了基于hi35xx平台的软件混音方法,包括以下方法:步骤S1:初始化工作模块;步骤S2:创建拉流解码线程,将码流送入解码器进行解码,解码后的数据由海思芯片自动放入缓存池;步骤S3:将步骤S1和步骤S2中获得的音频数据创建混音线程,以阻塞方式从解码通道中获取音频帧数据,从而获取码流数目;步骤S4:将步骤S3中的码流数目进行分析;如果只有一路音频码流,则不需要混音。本发明专利技术自动识别当前场景是否需要混音,在单路码流时避免冗余计算,减少系统的多余开销,混音算法中的衰减因子可以自适应调节,当数据溢出时,则相应地使因子变小,使后续的数据衰减后处于临界范围内,没有溢出时,衰减因子慢慢变大,使数据变化相对平滑。滑。滑。

【技术实现步骤摘要】
基于hi35xx平台的软件混音方法


[0001]本专利技术涉及音频处理
,更具体地说,本专利技术涉及基于hi35xx平台的软件混音方法。

技术介绍

[0002]目前hi3536芯片的音频输出模块不支持多路音频叠加,当需要多路音频同时输出时,必须增加软件混音的功能,将多路音频混合后,由hi3536的audio out(音频输出模块)输出,而单独的hi3536不能提供混音功能,例如音视频会议场景。此时需要拉取多路码流,会议中所有成员的声音都需要通过本地的一个喇叭发声,如果不能提供混音功能,那么就只能听到其中一个会议成员的声音,显然不满足会议需求。
[0003]因此我们提出了基于hi35xx平台的软件混音方法来解决上述问题。

技术实现思路

[0004]为了克服现有技术的上述缺陷,本专利技术的实施例提供基于hi35xx平台的软件混音方法,以解决上述
技术介绍
中提出的问题。
[0005]为实现上述目的,本专利技术提供如下技术方案:基于hi35xx平台的软件混音方法,包括以下方法:
[0006]步骤S1:初始化工作模块;
[0007]步骤S2:创建拉流解码线程,将码流送入解码器进行解码,解码后的数据由海思芯片自动放入缓存池;
[0008]步骤S3:将步骤S1和步骤S2中获得的音频数据创建混音线程,以阻塞方式从解码通道中获取音频帧数据,从而获取码流数目;
[0009]步骤S4:将步骤S3中的码流数目进行分析;
[0010]如果只有一路音频码流,则不需要混音,可以直接通过音频输出模块进行声音的播放;
[0011]如果是多路码流,则进行混音;
[0012]步骤S5:混音使用自适应加权算法进行混音处理;
[0013]步骤S6,步骤S5经过混音后,多路音频变成了一路,将这路混合后的音频灌入音频输出模块,由音频输出模块进行数模转换后输出至音箱,由音箱播放混合后的声音。
[0014]本专利技术自动识别当前场景是否需要混音,在单路码流时避免冗余计算,减少系统的多余开销,混音算法中的衰减因子可以自适应调节,当数据溢出时,则相应地使因子变小,使后续的数据衰减后处于临界范围内,没有溢出时,衰减因子慢慢变大,使数据变化相对平滑。
[0015]在一个优选地实施方式中,步骤S1中,初始化海思音频相关模块,包括解码缓存池、音频解码器、音频输出模块。
[0016]在一个优选地实施方式中,步骤S2中,每一个线程对应一个解码通道,不同的解码
通道会将数据放在缓存池的不同区域;
[0017]该方法不关心数据存放在缓存池的具体位置,只需要标记好解码通道的通道号。
[0018]在一个优选地实施方式中,步骤S3中,之所以采取阻塞方式而不采用非阻塞方式,是因为解码线程和混音线程是异步的;
[0019]当混音线程想要获取音频时,解码线程不一定准备好了数据,所以通过阻塞的方式等待另一个线程的数据,只要缓存池中的数据准备好了,阻塞线程就会被唤醒,从而获取到音频帧,混音线程获取音频帧时,需要根据解码通道的通道号,遍历所有的通道,以便将所有待混音的数据全部拿到。
[0020]自动识别当前场景是否需要混音,在单路码流时避免冗余计算,减少系统的多余开销。
[0021]在一个优选地实施方式中,步骤S5中,混音处理包括以下几个方面:
[0022]音轨叠加;音轨叠加,就是将多个通道的数据进行线性求和;
[0023]当前音频支持最大位宽是16bit,所表示的范围是

32768

32767,数据超过这个范围就会溢出,所以在求和后,如果超过了阈值范围,则用最大值来代替;
[0024]衰减因子调整;衰减因子调整就是当人为的削峰会破坏信号特征,也有可能产生噪音,所以需要引入一个系数,从而对超过有效范围的数据进行平滑处理,并且这个因子不是固定值,而是根据音轨叠加后的结果实时变化的,使用可变的衰减因子对语音进行衰减,该衰减因子随着数据的变化而变化;
[0025]数据平滑处理,当数据溢出时,则相应地使因子变小,使后续的数据衰减后处于临界值内,没有溢出时,让衰减因子慢慢变大,使数据变化相对平滑。
[0026]混音算法中的衰减因子可以自适应调节。当数据溢出时,则相应地使因子变小,使后续的数据衰减后处于临界范围内。没有溢出时,衰减因子慢慢变大,使数据变化相对平滑。
[0027]本专利技术的技术效果和优点:
[0028]原本在hi3536上只能输出一路音频,在会议等场景下不满足需求,该方法将多路音频混合成一路音频后灌入音频输出模块,并且采用自适应衰减因子的算法,平滑处理各路音频,解决了问题同时不损坏音质。
附图说明
[0029]图1为本专利技术的流程示意图。
具体实施方式
[0030]下面将结合本专利技术实施例中的附图,对本专利技术实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本专利技术一部分实施例,而不是全部的实施例。基于本专利技术中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本专利技术保护的范围。
[0031]参照图1,基于hi35xx平台的软件混音方法,首先初始化海思音频相关模块,包括解码缓存池、音频解码器、音频输出模块;
[0032]然后创建拉流解码线程,将码流送入解码器进行解码,解码后的数据由海思芯片
自动放入缓存池;
[0033]每一个线程对应一个解码通道,不同的解码通道会将数据放在缓存池的不同区域,该方法不关心数据存放在缓存池的具体位置,只需要标记好解码通道的通道号;
[0034]之后创建混音线程,以阻塞方式从解码通道中获取音频帧数据,之所以采取阻塞方式而不采用非阻塞方式,是因为解码线程和混音线程是异步的;
[0035]当混音线程想要获取音频时,解码线程不一定准备好了数据,所以通过阻塞的方式等待另一个线程的数据,只要缓存池中的数据准备好了,阻塞线程就会被唤醒,从而获取到音频帧;
[0036]混音线程获取音频帧时,需要根据解码通道的通道号,遍历所有的通道,以便将所有待混音的数据全部拿到;
[0037]比如当前接入两路音频码流,获取音频帧时需要遍历两个解码通道,将这两个通道的数据都获取到;
[0038]再则在混音之前需要判断当前有几路码流,如果只有一路音频码流,则不需要混音,可以直接通过音频输出模块进行声音的播放,如果是多路码流,则进行混音。
[0039]然后混音使用自适应加权算法进行混音处理。
[0040]首先进行音轨叠加。
[0041]所谓音轨叠加,就是将多个通道的数据进行线性求和,当前音频支持最大位宽是16bit,所表示的范围是

32768~32767,数据超过这个范围就会溢出。所以在求和后,如果超过了阈值范围,则用最大值来代替;
[0042]但是这样人为的削峰会破坏信号特征,也有可能产生噪音,所以需要引本文档来自技高网
...

【技术保护点】

【技术特征摘要】
1.基于hi35xx平台的软件混音方法,其特征在于;包括以下方法:步骤S1:初始化工作模块;步骤S2:创建拉流解码线程,将码流送入解码器进行解码,解码后的数据由海思芯片自动放入缓存池;步骤S3:将步骤S1和步骤S2中获得的音频数据创建混音线程,以阻塞方式从解码通道中获取音频帧数据,从而获取码流数目;步骤S4:将步骤S3中的码流数目进行分析;如果只有一路音频码流,则不需要混音,可以直接通过音频输出模块进行声音的播放;如果是多路码流,则进行混音;步骤S5:混音使用自适应加权算法进行混音处理;步骤S6,步骤S5经过混音后,多路音频变成了一路,将这路混合后的音频灌入音频输出模块,由音频输出模块进行数模转换后输出至音箱,由音箱播放混合后的声音。2.根据权利要求1所述的基于hi35xx平台的软件混音方法,其特征在于:步骤S1中,初始化海思音频相关模块,包括解码缓存池、音频解码器、音频输出模块。3.根据权利要求1所述的基于hi35xx平台的软件混音方法,其特征在于:步骤S2中,每一个线程对应一个解码通道,不同的解码通道会将数据放在缓存池的不同区域;该方法不关心数据存放在缓存池的具体位置,只需要标记好解码通道的通道号。4.根据权利要求1所述的基于hi35xx平台的软件混音方法,其特征在于:步骤S3中,之所以采取阻塞方式而不采用非阻塞方式,是因为解码线程和混音线程是异步的;当混音线程想要获取音频时,解码线程不一定准备好了数据,所以通过阻塞的方式等待另一个...

【专利技术属性】
技术研发人员:陈晨
申请(专利权)人:国科环宇南京电子技术有限公司
类型:发明
国别省市:

网友询问留言 已有0条评论
  • 还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。

1