一种残膜回收机防缠绕挑膜装置的制 一种秧草收获机用电力驱动行走机构

一种基于自适应混音的多路音频拥塞优化方法与流程

2023-10-21 15:05:13 来源:中国专利 TAG:

1.本发明属于计算机软件开发技术领域,具体涉及一种基于自适应混音的多路音频拥塞优化方法。


背景技术:

2.高级linux声音架构(advanced linux sound architecture,alsa)是linux内核组件,是在pc上提供音频和midi功能的api框架,用于处理声音硬件设备的问题,其本质上是linux的音频内核驱动用于为上层应用提供抽象的alsa音频设备接口。但是,同一时刻只能允许一个应用通过alsa输出音频,也就是说,当多个应用同时打开alsa设备输出音频时只能有一个应用正常输出。
3.pulseaudio通常被称为pulse,是基于alsa的音频输出服务器。它是开源、跨平台的,可在linux、unix、mac os及windows等各种操作系统上运行,同时支持网络音频。pulseaudio可以处理多个音频流并将其路由到适当的输出设备,使用户可以实现更复杂和灵活的音频设置,它还包括了对音频效果如均衡器、环绕声和音量控制等的支持。
4.因此,如果需要多个应用同时输出声音,就需要采用pulseaudio输出音频。然而,pulseaudio对应用数量存在限制,一般最多允许32个应用同时输出,这能够满足大部分使用场景的需求,但是对于云手机等需要大规模音频输出通道的使用场景来说上述限制就无法满足实际的使用需求,当应用超过数量限制时就会导致音频输出通道的拥塞,进而致使正在输出音频的应用出现卡死的情况。


技术实现要素:

5.有鉴于此,本发明提供了一种基于自适应混音的多路音频拥塞优化方法,实现了大量音频输出通道场景下的应用音频的正确输出。
6.本发明提供的一种基于自适应混音的多路音频拥塞优化方法,包括以下步骤:步骤1、获取音频输出服务器的最大音频输出通道数量作为最大通道数g;步骤2、当应用新建音频流时,获取该音频流的音频位深度、所需音频输出通道数x及采样率,将该采样率作为第一采样率,若当前处于打开状态的音频输出通道的数量m与x的和不大于g则执行步骤3,否则执行步骤4;步骤3、建立音频流作为第一音频流,使用第一音频流完成应用所需的音频输出,结束本流程;步骤4、建立音频流作为第一音频流;若当前处于打开状态的音频输出通道中恰好存在(x-(g-m))个采样率为第一采样率的音频输出通道,则将这(x-(g-m))个音频输出通道作为复用通道执行步骤5;若当前处于打开状态的音频输出通道总数中存在p个采样率为第一采样率的音频输出通道且p大于(x-(g-m)),则以该p个音频输出通道作为可复用通道执行步骤6;若当前处于打开状态的音频输出通道中不存在采样率为第一采样率的音频输出通道则执行步骤7;
步骤5、将第一音频流中(x-(g-m))个音频输出通道的音频数据与(x-(g-m))个复用通道中的音频数据进行混音,再将第一音频流中的其他音频数据写入(g-m)个音频输出通道完成应用所需的音频输出,结束本流程;步骤6、分别估算p个可复用通道的混音计算量q,从p个可复用通道中选取(x-(g-m))个q较小的可复用通道作为复用通道,执行步骤5;步骤7、若当前m个音频输出通道中具有相同采样率的音频输出通道的数量t小于2*x,则应用无法完成音频输出,结束本流程;若当前m个音频输出通道中具有相同采样率的音频输出通道的数量t等于2*x,则以该t个音频输出通道作为合并通道执行步骤8;若当前m个音频输出通道中具有相同采样率的音频输出通道的数量t大于2*x,则以该t个音频输出通道作为可合并通道执行步骤9;步骤8、将合并通道中的音频数据逐对混音,将混音后的音频数据分别写入对应的部分合并通道中使其余合并通道空闲,令第一音频流使用空闲合并通道完成应用所需的音频输出,结束本流程;步骤9、分别估算t个可合并通道的混音计算量q,从t个可合并通道中选取2*x个q较小的可合并通道作为合并通道,执行步骤8。
7.进一步地,所述建立音频流作为第一音频流的方式为:调用pulseaudio提供的标准函数pa_simple_new。
8.进一步地,所述步骤5中所述将第一音频流中(x-(g-m))个音频输出通道的音频数据与(x-(g-m))个复用通道中的音频数据进行混音,再将第一音频流中的其他音频数据写入(g-m)个音频输出通道完成应用所需的音频输出,具体方式为:为第一音频流建立(x-(g-m))个虚拟通道,应用使用这(x-(g-m))个虚拟通道及(g-m)个音频输出通道的组合输出音频;为(x-(g-m))个复用通道建立与其一一对应的(x-(g-m))个虚拟复用通道,将相互对应的复用通道与虚拟复用通道两两绑定;将(x-(g-m))个虚拟复用通道与(x-(g-m))个虚拟通道中的音频数据进行混音,再将混音后的音频数据写入对应的(x-(g-m))个复用通道、将其他音频数据写入(g-m)个音频输出通道完成应用所需的音频输出。
9.进一步地,所述步骤8中所述将合并通道中的音频数据逐对混音,将混音后的音频数据分别写入对应的部分合并通道中使其余合并通道空闲,令第一音频流使用空闲合并通道完成应用所需的音频输出,具体为:将合并通道分为第一组合并通道和第二组合并通道,将第一组合并通道和第二组合并通道中的音频数据逐对进行混音,再将混音后的音频数据分别写入对应的第一组合并通道中,使第二组合并通道处于空闲状态;令第一音频流使用第二组合并通道完成应用所需的音频输出。
10.进一步地,所述步骤8中所述将第一组合并通道和第二组合并通道中的音频数据逐对进行混音,再将混音后的音频数据分别写入对应的第一组合并通道中,具体为:为第一组合并通道中的每个合并通道建立与其一一对应的虚拟合并通道,将相互对应的合并通道与虚拟合并通道两两绑定;将虚拟合并通道与第二组合并通道中的音频数据进行混音,再将混音后的音频数据写入对应的第一组合并通道中。
11.进一步地,所述混音计算量q的计算方式为:获取音频输出通道的输入声音信号数量n及各输入声音信号的采样率sr和音频位深度b,采用公式q =n * sr
_avg * b
_avg
估算音频
输出通道的混音计算量q,其中,sr
_avg
为各输入声音信号采样率的平均值,b
_avg
为各输入声音信号音频位深度的平均值。
12.进一步地,所述多路音频拥塞优化方法采用hook创建音频流的api的方式实现。
13.有益效果
14.本发明根据处于打开状态的音频输出通道的数量与音频输出服务器设置的最大音频输出通道数量的关系确定其与音频输出通道的关联方式,在空闲的音频输出通道的数量无法满足应用时在处于打开状态的音频输出通道中选择可复用通道完成音频输出,当处于打开状态的音频输出通道中不存在满足条件的可复用通道时将处于打开状态的音频输出通道进行合并形成空闲通道,再利用空闲通道完成音频输出,实现了大量音频输出通道场景下的应用音频的正确输出,提高了系统的可靠性。
具体实施方式
15.下面列举实施例,对本发明进行详细描述。
16.本发明提供了一种基于自适应混音的多路音频拥塞优化方法,其核心思想是:应用输出音频时根据处于打开状态的音频输出通道的数量与音频输出服务器设置的最大音频输出通道数量的关系,确定其与音频输出通道的关联方式,在空闲的音频输出通道的数量无法满足应用时在处于打开状态的音频输出通道中选择可复用通道完成音频输出,当处于打开状态的音频输出通道中不存在满足条件的可复用通道时将处于打开状态的音频输出通道进行合并形成空闲通道,再利用空闲通道完成音频输出,由此可保证需要大量音频输出通道场景下的应用音频的正确输出。
17.本发明提供的一种基于自适应混音的多路音频拥塞优化方法,具体包括以下步骤:步骤1、获取音频输出服务器(如pulseaudio)的最大音频输出通道数量作为最大通道数g。
18.步骤2、当应用需要新建音频流时,获取该音频流的音频位深度、所需音频输出通道数x及采样率,将该采样率作为第一采样率,若当前处于打开状态的音频输出通道的总数m与x的和不大于最大通道数g则执行步骤3,否则执行步骤4。
19.为了进一步提高本发明的兼容性,本发明采用hook创建音频流的api(例如pulseaudio的pa_simple_new)的方式实现本发明提出的动态混音合并多个音频输出通道。采用hook方式实现,不需要修改音频输出服务器中的相关源码,能够更好与当前系统内已安装的音频输出服务器兼容。而采用修改音频输出服务器中的相关源码的方式则需要替换当前系统内已安装的音频输出服务器,存在较大的兼容性风险。
20.步骤3、采用音频输出服务器提供的标准方法建立音频流作为第一音频流,执行音频输出服务器提供的标准操作使用第一音频流完成应用所需的音频输出,结束本流程。
21.其中,建立音频流的标准方法,如调用pulseaudio提供的标准函数pa_simple_new实现音频流的建立。
22.音频位深度(audio bit depth)决定了可为每个样本记录的可能振幅值数值,常见的音频位深度有16位、24位和32位。音频位深度可被理解为采样格式或声音分辨率,它决定了音频精确度,控制音频文件里的数据,影响音频清晰度和细致程度。
23.步骤4、采用音频输出服务器提供的标准方法建立音频流作为第一音频流;若当前处于打开状态的音频输出通道中恰好存在(x-(g-m))个采样率为第一采样率的音频输出通道,则将这(x-(g-m))个音频输出通道作为复用通道执行步骤5;若当前处于打开状态的音频输出通道总数中存在p个采样率为第一采样率的音频输出通道且p大于(x-(g-m)),则以该p个音频输出通道作为可复用通道执行步骤6;若当前处于打开状态的音频输出通道中不存在采样率为第一采样率的音频输出通道则执行步骤7。
24.步骤5、为第一音频流建立(x-(g-m))个虚拟通道,使应用能够使用这(x-(g-m))个虚拟通道及(g-m)个音频输出通道的组合输出音频,其中,(g-m)个音频输出通道即为当前处于空闲状态的音频输出通道;为(x-(g-m))个复用通道建立与其一一对应的(x-(g-m))个虚拟复用通道,将相互对应的复用通道与虚拟复用通道两两绑定;将(x-(g-m))个虚拟复用通道与(x-(g-m))个虚拟通道中的音频数据进行混音,再将混音后的音频数据写入对应的(x-(g-m))个复用通道、将其他音频数据写入(g-m)个音频输出通道完成应用所需的音频输出,结束本流程。
25.步骤6、分别获取p个可复用通道的输入声音信号数量n及各输入声音信号的采样率sr和音频位深度b,采用公式q =n * sr
_avg * b
_avg
分别估算各可复用通道的混音计算量q,其中,sr
_avg
为各输入声音信号采样率的平均值,b
_avg
为各输入声音信号音频位深度的平均值,从p个可复用通道中选取(x-(g-m))个q较小的可复用通道作为复用通道,执行步骤5。
26.步骤7、若当前m个音频输出通道中具有相同采样率的音频输出通道的数量t小于2*x,则应用无法完成音频输出,结束本流程;若当前m个音频输出通道中具有相同采样率的音频输出通道的数量t等于2*x,则以该t个音频输出通道作为合并通道执行步骤8;若当前m个音频输出通道中具有相同采样率的音频输出通道的数量t大于2*x,则以该t个音频输出通道作为可合并通道执行步骤9。
27.步骤8、将合并通道分为第一组合并通道和第二组合并通道,将第一组合并通道和第二组合并通道中的音频数据逐对进行混音,再将混音后的音频数据分别写入对应的第一组合并通道中,使第二组合并通道处于空闲状态;令第一音频流使用第二组合并通道完成应用所需的音频输出,结束本流程。
28.具体来说,将第一组合并通道和第二组合并通道中的音频数据逐对进行混音,再将混音后的音频数据分别写入对应的第一组合并通道中,其实现过程为:为第一组合并通道中的每个合并通道建立与其一一对应的虚拟合并通道,将相互对应的合并通道与虚拟合并通道两两绑定;将虚拟合并通道与第二组合并通道中的音频数据进行混音,再将混音后的音频数据写入对应的第一组合并通道中。
29.步骤9、分别获取t个可合并通道的输入声音信号数量n、各输入声音信号的采样率sr及音频位深度b,采用公式q =n * sr
_avg * b
_avg
分别估算各可合并通道的混音计算量q;从t个可合并通道中选取2*x个q较小的可合并通道作为合并通道执行步骤8。
实施例
30.本实施例中采用本发明提供的一种基于自适应混音的多路音频拥塞优化方法实现了基于pulseaudio的多路音频自适应混音输出,本实施例中新建的音频流仅需要一个音频输出通道,具体包括以下步骤:
s1、获取pulseaudio的最大音频输出通道数量,记为maxaudiooutputchannel。
31.s2、当新应用需要新建音频流时,通过hook新建音频流的api,该api为pulseaudio的pa_simple_new函数,完成对现有新建音频流操作过程的修改,从而进一步实现通过动态混音合并多个音频输出通道。
32.s3、将当前音频流需要创建的新音频输出通道记为newchannel,若当前处于打开状态的音频输出通道数量未超过maxaudiooutputchannel则执行s4,否则执行s5。
33.s4、调用pulseaudio的标准新建音频流函数pa_simple_new新建音频流,记录该新建的音频流的相关参数包括采样率、音频位深度、所需的音频输出通道数等,执行pulseaudio提供的标准操作使用该音频流完成应用所需的音频输出,结束本流程。
34.s5、在当前所有处于打开状态的音频输出通道中查找是否存在一个采样率与newchannel相同的音频输出通道,如果仅存在一个满足条件的音频输出通道记为targetchannel则执行s6,targetchannel由现有应用使用;如果存在多个满足条件的音频输出通道则执行s7;如果不存在则执行s8。
35.s6、创建虚拟通道virtualchannel,将该虚拟通道返回给pa_simple_new的调用者;为targetchannel创建虚拟通道virutaltargetchannel,将targetchannel与virutaltargetchannel绑定;hook pulseaudio的写入数据api:pa_simple_write,实现将现有应用写入targetchannel的操作转换为实际写入virutaltargetchannel,新应用写入virtualchannel的操作转换为实际写入virutaltargetchannel;再将写入targetchannel与写入virutaltargetchannel的音频数据进行混音,再将混音后的音频数据写入到targetchannel中,完成新应用所需的音频输出。
36.s7 、采用公式q =n * sr
_avg * b
_avg
评估满足条件的音频输出通道的混音计算量,再从中选取计算量最小的音频输出通道作为新应用的音频输出通道targetchannel,执行s6。
37.s8、尝试合并现有处于打开状态的音频输出通道,以使某个音频输出通道空闲,如果现有处于打开状态的音频输出通道中不存在一对采样率相同的音频输出通道,则pa_simple_new返回失败,结束本流程;如果现有处于打开状态的音频输出通道中仅存在一对采样率相同的音频输出通道,则将这一对音频输出通道中的音频数据进行混音,再将混音后的音频数据写入其中一个音频输出通道中,使另一个音频输出通道处于空闲状态,新应用使用空闲的音频输出通道完成所需的音频输出,结束本流程;如果在现有处于打开状态的音频输出通道中存在多对采样率相同的音频输出通道,则分别获取可合并通道的输入声音信号数量n、各输入声音信号的采样率sr及音频位深度b,分别估算各可合并通道的混音计算量q,从中选取q最小的一对可合并通道进行合并,得到空闲状态的音频输出通道,新应用使用空闲的音频输出通道完成所需的音频输出,结束本流程。
38.综上所述,以上仅为本发明的较佳实施例而已,并非用于限定本发明的保护范围。凡在本发明的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。
再多了解一些

本文用于创业者技术爱好者查询,仅供学习研究,如用于商业用途,请联系技术所有人。

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表