掌桥专利:专业的专利平台
掌桥专利
首页

一种缓冲音频数据的控制装置和方法

文献发布时间:2024-04-18 19:58:26


一种缓冲音频数据的控制装置和方法

技术领域

本发明涉及音视频处理技术领域,具体而言,涉及一种缓冲音频数据的控制装置和方法。

背景技术

在实时音频处理中,数据产生和处理是多个环节进行连接的,上游模块按一定的节奏、指定的大小输出数据块给下游模块,下游模块按该节奏获取数据进行后续操作,例如播放音频;有时为进行一些额外处理,需要在两个相邻的模块中插入数据处理模块,而这个新的模块一次能处理的数据的量可能与上游模块输出的数据块大小不一致。对于这种情况,目前常见的方案是把上游模块输出的数据缓存起来,每积攒到新插入模块一次能处理的数据量就处理一次。这种方式会导致两个问题:首先,由于新插入的数据处理单元输出的数据块大小和上游模块输出的不同,导致下游模块接收到的中间模块处理后的数据块的大小和之前不同,会影响其数据处理的完整性;其次,如果将新插入的模块已处理的数据缓存起来,每达到下游模块输出数据块大小就输出给下游模块处理一次,解决了下游模块接收到的数据块大小变化的问题,数据的输出的时间间隔却不一定是均匀的,使得下游模块处理数据并输出的间隔不均匀,可能会影响最终数据的呈现的效果。假设上游模块提供音频数据,中间处理模块处理噪声,下游模块播放音频,如果下游模块在播放的过程中播放音频时间间隔不均匀,会导致播放中断、卡顿延时等,影响音频播放的效果。因此需要一种能够保证下游播放中途不产生卡顿、不发生延时的技术方案。基于此目的,在采用缓冲机制存在等待时间的前提下,将等待时间集中在下游模块处理前,即进行音频播放前,以保证播放过程中的质量控制。如何在进行音频播放前,也就是下游模块进行处理之前完成合理的缓冲和等待,既要等待时间最少,也要资源代价尽量最小,是目前需要解决的问题。

发明内容

为实现上述目的,本申请提供了一种缓冲音频数据的控制装置,包括:

容量获取模块:用于获取指定数据块的数据量值,获取指定空间的容量大小;

数据缓存模块,用于获取和存储上游模块下发的数据;其中,缓存数据模块中的缓存数据包括未处理数据和待处理数据,待处理数据用于准备下一步处理数据模块的处理,未处理数据用于下次下发的数据累积;

数据处理模块,用于从数据缓存模块获取待处理数据,响应处理指令,;所述处理指令来自条件判断模块;

下发缓存模块,用于从数据处理模块获取已处理数据,按指定频率和指定数量向下游模块发送数据;所述指定频率为下游模块处理数据的频率,所述指定数量是下游模块一次处理数据的数据量;

条件判断模块,用于根据容量获取模块提取的各环节的容量状态,判断当前是否达到缓冲数据处理条件,如果已达到缓冲数据处理条件,向数据处理模块发起数据处理请求。

其中,各环节的容量状态包括:上游模块每次下发的数据量值m、数据缓存模块中的缓存数据量值S、所述数据处理模块可处理数据的空间容量n。

进一步的,条件判断模块包括控量单元和控数单元;

控量单元用于通过容量获取模块获取数据缓存模块中的数据值,当数据值超过上游模块一次下发数据块的数据量值m与数据处理模块一次能处理的数据容量n的合计时,向数据处理模块发起数据处理请求;

控数单元用于获取上游模块下发数据的次数K,当次数K达到等待次数标准值Ks时向数据处理模块发起数据处理请求,等待次数标准值Ks是根据上游模块一次下发数据块的数据量值m、一次能处理的数据容量n确定的启动数据处理的标准时机。

其中,数据处理模块包括数据分离单元和数据提取单元;

数据分离单元用于数据处理模块从数据缓存模块获取待处理数据时,实现对缓存数据的分离;分离的处理方式为:在数据缓存模块中标注预设大小的数据,将标注的数据定义为待处理数据;

数据提取单元,用于从数据缓存模块将待处理数据复制至数据处理模块后,将待处理数据从数据缓存模块删除。

进一步的,等待次数标准值Ks的确定,可根据数据传输和处理环境进一步划分为:m>n环境和m<=n环境:

所述m>n环境时,等待次数标准值Ks=2;

所述m<=n环境时,等待次数标准值Ks=floor(n/m)+2。

进一步的,等待次数标准值Ks的确定,还支持根据控制总量的原则定义,即:等待次数标准值Ks=floor(n/m)+2。

另一方面,本发明提供了一种缓冲音频数据的控制方法,包括以下步骤:

获取各环节的容量状态,各环节的容量状态包括上游模块每次下发的数据量值m、可处理数据的空间容量n;

获取来自上游模块下发数据,存储为缓存数据;其中,缓存数据包括未处理数据和待处理数据,待处理数据用于准备下一步数据处理,未处理数据用于下次获取的下发的数据累积;

根据各环节的容量状态,判断当前是否达到缓冲数据处理条件,如果已达到缓冲数据处理条件,发起数据处理请求;

响应处理指令,获取待处理数据,执行数据处理,生成已处理数据,按指定频率和指定数量向下游模块发送已处理数据;所述指定频率为下游模块处理数据的频率,所述指定数量是下游模块一次处理数据的数据量。

其中,判断当前是否达到缓冲数据处理条件包括数据总量条件和下发次数条件;

数据总量条件的判断依据是缓存数据的数据量,当数据量超过上游模块一次下发数据块的数据量值m与数据处理时一次能处理的数据容量n的合计时,可以发起数据处理请求;

下发次数条件的判断依据为上游模块下发数据的次数K,当次数K达到等待次数标准值Ks时发起数据处理请求,等待次数标准值Ks是根据上游模块一次下发数据块的数据量值m、一次能处理的数据容量n确定的启动数据处理的标准时机。

进一步的,获取待处理数据前,包括数据分离和数据提取;

数据分离指:在缓存数据中标注预设大小的数据,将标注的数据定义为待处理数据;

数据提取指:提取待处理数据准备数据处理,将待处理数据从缓存数据中删除。

进一步的,等待次数标准值Ks的确定,根据数据传输和处理环境进一步划分为:m>n环境、m<=n环境和控制总量原则:

所述m>n环境时,等待次数标准值Ks=2;

所述m<=n环境时,等待次数标准值Ks=floor(n/m)+2;

所述控制总量原则时,等待次数标准值Ks=floor(n/m)+2。

根据本发明实现了对缓冲和等待的时机的控制,结合了下发数据和处理能力的平衡,实现在保证处理质量的前提下,下游模块处理的等待时间最少、中间缓存资源代价尽量最小。

附图说明

图1是根据本发明实施例提供的缓冲音频数据的控制装置结构图;

图2是根据本发明实施例提供的第一种情况下缓冲音频数据控制示意图;

图3是根据本发明实施例提供的第二种情况下缓冲音频数据控制示意图;

图4是根据本发明实施例提供的缓冲音频数据的控制方法步骤图。

具体实施方式

本发明提出一种音频数据的缓冲方案,在原有的上下游模块中加入新的处理模块,获取上游模块输出数据的规律和处理模块的处理能力,计算处理模块的最佳处理时机,处理数据完成后,发送给下游模块的时机,使下游模块能够以稳定的频率连续地接收已中间处理的数据,便于后续的操作。

下面结合说明书附图对本发明的具体实现方式做一详细描述。

图1是缓冲音频数据的控制装置结构图,如图所示,包括:

P110容量获取模块:用于获取指定数据块的数据量值,获取指定空间容量大小;

本发明中,容量获取模块至少获取上游模块下发数据块的数据量值,即一次下发的数据量为m;数据处理模块的处理空间容量,即一次能处理的数据容量n。

在常规的数据处理能力设计时,上游模块的数据发送能力和下游模块的数据处理能力能达到一定平衡,例如下游模块一次处理的数据块与上游模块一次下发的数据块的大小一致;但在某些运用环境例如音频传输和播放的环境中,上游模块为音频发送,下游模块为音频播放,在其中加入回音消除的中间处理模块,由于噪声抑制时的资源开销会跟随音频采集质量发生变化,实现噪声抑制的中间处理模块的空间也会设定为不同的容量。

P120数据缓存模块,用于获取和存储上游模块下发数据;

本发明采取的处理方案,是通过数据缓存模块累积多次从上游模块下发的数据后再交由数据处理模块进行数据处理,因此数据缓存模块中的缓存数据在每次处理后,可能会留有之前累积、本次未处理、等下次数据下发积累后再处理的情况。

基于此,缓存数据模块中的缓存数据按规则分离出未处理数据和待处理数据,待处理数据用于准备下一步处理数据模块的处理,未处理数据用于等待下次上游模块下发的数据累积;同时,待处理数据经过数据处模块的加工后,生成已处理数据,存入下发缓存模块,再根据下游模块正常接受和处理数据的节奏发送至下游模块,且保证每次都有足够的数据量使用和播放,以确保下游模块处理数据的质量。

缓存数据模块中的缓存数据的量值,也可通过容量获取模块获取。

P130数据处理模块,用于从数据缓存模块获取待处理数据,响应处理指令;

数据处理模块本身用于响应处理指令,执行中间数据处理,实现上游模块到下游模块之间的数据效果实现,例如实现音频数据的噪声抑制,数据处理完成后,传给下发缓存模块,准备供下游模块使用。

执行中间数据处理前还需要进行数据准备,因此,数据处理模块包括P131数据分离单元和P132数据提取单元:

P131数据分离单元:数据处理模块用来从数据缓存模块获取待处理数据的同时,也实现对缓存数据的分离。具体来说:数据分离单元的处理目标为数据缓存模块;处理方式为:在数据缓存模块中标注预设大小的数据,将标注的数据定义为待处理数据,预设大小与数据处理模块可处理数据的空间容量n一致;处理的时机,由条件判断模块确定;

实际应用中,下游数据一次处理的数据量与上游数据一次处理的数据量一致、且n>m时,数据处理模块处理一次,可由下游数据处理floor(n/m)次(其中,floor()为向下取整函数)。

P132数据提取单元,用于从数据缓存模块将待处理数据复制至数据处理模块后,将待处理数据从数据缓存模块删除。

P133下发缓存模块,用于从数据处理模块获取已处理数据,按指定频率和指定数量向下游模块发送数据;指定频率和指定数量可按下游模块正常处理数据的节奏和一次处理数据的量确定;因此,指定频率定义为下游模块处理数据的频率,指定数量定义为下游模块一次处理数据的数据量。

P140条件判断模块,用于根据容量获取模块提取的各环节的容量状态,判断当前是否达到缓冲数据处理条件,如果已达到缓冲数据处理条件,向数据处理模块发起数据处理请求;数据处理模块响应的处理指令则来自条件判断模块。

各环节的容量状态包括:上游模块一次下发数据块的数据量值m、数据处理模块一次能处理的数据容量n、数据缓存模块中的缓存数据量值S;

首先,条件判断模块获取数据缓存模块的容量状态,包括:获取m、n、S。

其次,根据容量状态S判断是否符合缓冲数据处理条件。

缓冲数据处理条件可根据上游模块下发的量是否足够数据缓存模块、下游模块处理和使用来确定:

1)m>n时:假设m=x×n+r,其中x、r为整数,且x>=1,0<=rx×n+r=m),这时剩余未处理过的数据为2(x×n+r)-(x+1)×n=2×x×n+2×r-(x+1)×n,也就是x×n+r+r-n,也等于m+r-n;而产生的总的已处理数据(x+1)×n减去发送给下游模块的数据m后剩余的数据量为(x+1)×n-x×n-r,等于n-r。即:剩余的未处理数据量m+r-n和剩余的已处理数据量n-r的和是m。采用数学归纳法可证明:之后每次上游模块再输出m个未处理数据,一定可以凑出m个已处理数据,供下游模块使用。

为了方便表达,将剩余的未处理数据量用p(0<=p<=m)表示,则剩余的已处理数据量为m-p(因为剩余的未处理数据和剩余的已处理数据之和是m)。先来看第三次上游模块产生数据量m的未处理数据时的情况:

如果p>=n:剩余的未处理数据量大于等于n,而第三次产生的数据量m大于等于x×n,总共剩余的未处理数据大于等于x×n+n,即(x+1)×n,此时处理(x+1)×n的数据,一定可以输出m个数据;由于未处理数据增加了m,再之后有m的已处理数据被输出,所以未处理数据和已处理数据的和是不变的,还是m。

如果pm-n>=r,即剩余的已处理数据量大于r。此时新得到m个未处理数据,总的剩余的未处理数据合并起来一定超过x×n,如果处理前x×n个数据后,再加上m-p的已处理数据,已处理数据大于x×n+r,即m个数据,此时可输出m个已处理数据。由于未处理数据增加m,后续有m的已处理数据被输出,所以未处理数据和已处理数据的和是不变,还是m。

因此,无论p为何种情况,都可以输出m个已处理数据。且处理完成后,剩余的未处理数据和已处理数据的和还是m。

根据数学归纳法,第k(k>=3)次产生数据量为m的未处理数据时,都能输出数据量为m的已处理数据,且保持输出后剩余的未处理数据和已处理数据的和为m;结合前面的分析,再次证明,第k(k>=2)次产生数据量为m的未处理数据时,都能输出数据量为m的已处理数据,且保持输出后剩余的未处理数据和已处理数据的和还是m。

2)m<=n时:假设n=x×m+r,其中x、r为整数,且x=floor(n/m),x>=1、0<=r

当上游模块输出了x+2个数据块时,现有未处理数据为(x+2)×m,处理n个数据,剩余的未处理数据为(x+2)×m-(x×m+r)=m+m-r;此时输出m个数据,剩余n-m个已处理数据,即x×m+r-m个已处理数据。此时剩余的未处理数据和已处理数据之和为(x+1)×m。

采用p表示剩余的已处理数据,剩余的未处理数据为(x+1)×m-p。

当上游模块输出第x+3次数据时:

p>=m的情况:因为剩余数据量p大于等于m,直接输出m个已处理数据即可。由于此时增加了m个未处理数据,又减少了m个已处理数据,所以剩余的未处理数据和已处理数据之和还是不变,还是(x+1)×m。

看p(x+1)×m>x×m+r=n,因此此时可以处理一次未处理数据,处理之后就获得n个,即x×m+r个已处理数据,这时一定可以输出m个数据给下游模块。在这种情况下,输出m个已处理数据后,由于增加了m个未处理数据,剩余的已处理和未处理数据之和还是不变,还是(x+1)×m。

根据数学归纳法,从x+3次开始,每次产生m个未处理数据时,均可输出m个已处理数据。

总结下来,m>n时,上游模块产生了第2次数据,即累积了2m个数据时,即可开始让新插入的模块处理数据,且每次上游模块产生m个数据,可输出m个已处理数据供下游模块使用;当m<=n时,设n=x×m+r,其中x、r为整数,且x>=1,0<=rn还是m<=n,当上游模块产生了floor(n/m)+2次数据时,可以开始让新插入的模块处理数据,且每次上游模块产生m个数据,就输出m个已处理数据供下游模块使用。

进一步地,当上游模块产生了floor(n/m)+2次数据时,数据总量为(floor(n/m)+2)×m,一定大于n+m,所以让上游模块输出数据累积超过m+n个数据时,启动让新插入的模块处理数据,只要数据够新插入模块处理就让其处理,并且把处理后的数据缓存起来。从首次让上游累积输出数据超过m+n的这一次起,每次上游模块输出m个数据,就一定可以有m个已处理数据供下游模块使用。

在本发明中,通过以上内容证明了这个结论的充分性,还可说明以上条件的必要性:

m>n时,假设m=x×n+r,其中x、r为整数,且x>=1,0<=r

m<=n时,假设n=x×m+r,其中x、r为整数,且x>=1、0<=rx×m;如果在上游模块产生第x+1次数据时就开始处理,这时能产生x×m+r个已处理数据,剩下m-r个未处理数据,这时输出m个数据,就剩下(x-1)×m+r个已处理数据:假设x=1,已处理数据余下r个;下次上游模块再产生m个数据时,总共有m+m-r个未处理数据,而n=m+r(注意,这里已假设x=1,所以n=m+r),如果m-r

进一步的,上游模块输出数据累积超过m+n个数据时向数据处理模块发起数据处理请求,该条件是充分且必要的。

基于以上缓冲数据处理条件的判断结论,本发明提供的条件判断模块包括P141控量单元和P142控数单元,支持从两个角度进行条件判断:

P141控量单元用于通过容量获取模块获取数据缓存模块中的缓存数据量值S,当缓存数据量值S超过上游模块一次下发数据块的数据量值m与数据处理模块一次能处理的数据容量n的合计时,可以向数据处理模块发起数据处理请求,即:S>m+n时第一次启动数据处理请求;

P142控数单元用于获取上游模块下发数据的次数K,当次数K达到等待次数标准值Ks时,即达到缓冲数据处理条件,向数据处理模块发起数据处理请求;

等待次数标准值Ks是根据缓冲数据处理条件确定的数据处理模块启动数据处理的标准时机,体现为上游模块下发数据的次数,即,在数据处理模块等待上游模块下发数据Ks次后开始处理数据;该时机达到的效果是:下游模块可以按节奏使用数据处理模块处理后的数据,且保证每次使用时的可用数据量。

等待次数标准值Ks的确定,可根据数据传输和处理环境进一步划分为:m>n环境和m<=n环境两种情况:

1)m>n环境:如图2所示:即上游模块每次输出的数据量值m超过所述数据处理模块可处理数据的空间容量n;

即:等待次数标准值Ks=2,当K>=Ks时,可以启动数据处理模块。

2)m<=n环境,如图3所示:即上游模块每次输出的数据量值m小于所述数据处理模块可处理数据的空间容量n时:

根据缓冲数据处理条件得知:根据从上游模块产生x+2次数据下发时可以启动数据处理模块,由于n=x×m+r,x+2=floor(n/m)+2;

即:等待次数标准值Ks=floor(n/m)+2,当K>=Ks时,可以启动数据处理模块,可确保每次上游模块输出数据给新插入的处理模块时,其都可以输出m个已处理数据。

3)如果兼容P141控量单元中控制总量的原则,等待次数标准值Ks=floor(n/m)+2,K>=Ks时,可以启动数据处理模块。

现在以噪声抑制模块为例说明:

假设有一个录音数据处理模块1和模块2,模块1输出的音频数据供模块2播放,即模块1为上游模块,模块2为下游模块。模块1每次输出的音频数据为480个采样,输出时间间隔为10ms,在模块1和模块2之间加入一个噪音抑制模块,记为模块3。设模块3每次处理的数据块大小为128个采样。

结合噪音抑制处理,噪音抑制处理模块需要等模块1输出的数据累积达到或超过480+128=608个采样时再开始给模块3处理。当模块1第一次输出480个采样时,累积数据总量也是480个采样,小于608,所以先不处理。10ms之后,也就是当模块1第二次输出480个采样时,累积数据总量已达到960,已经超过了608,这时便可以把数据拿给模块3处理了。模块3开始处理时有960个采样,可以连续处理7次,得到896个已处理数据,留下64个未处理数据。得到的896个数据拿出480个采样给模块2处理,剩余416个已处理数据。这时剩余的未处理数据64个加剩余的已处理数据416个,刚好是480个,等于模块1输出一次的数据块大小。再过10ms,等模块1第三次输出数据时,总共有480+64=544个未处理数据,这时可以给模块3处理4次,得到512个已处理数据,剩余32个未处理数据。把新得到的512个已处理数据加上之前剩余的416个已处理数据,总共有928个已处理数据。拿出其中的480个已处理数据给模块2处理,剩余448个已处理数据。这时剩余的未处理数据32个加剩余的已处理数据448个,刚好还是480个,还是等于模块1输出一次的数据块大小。之后,每次模块1输出480个采样,加上剩余的未处理数据,一起给模块3处理,得到的新的已处理数据加上之前剩余的已处理数据,一定达到或超过了480个采样,可以给供模块2处理一次。

图4提供了本发明缓冲音频数据的控制方法步骤,如图所示,包括:

S400获取各环节的容量状态,所述各环节的容量状态包括上游模块每次输出的数据量值m、可处理数据的空间容量n;

S410获取来自上游模块下发数据,存储为缓存数据;其中,所述缓存数据包括未处理数据和待处理数据,所述待处理数据用于准备下一步数据处理,未处理数据用于下次下发的数据累积;

S420根据所述各环节的容量状态,判断当前是否达到缓冲数据处理条件,如果已达到缓冲数据处理条件,发起数据处理请求;

判断当前是否达到缓冲数据处理条件包括数据总量条件和下发次数条件;

所述数据总量条件用于通过判断缓存数量的数据量,当数据量超过上游模块一次下发数据块的数据量值为m与数据处理一次时能处理的数据容量n的合计时,可以发起数据处理请求;

所述下发次数条件用于判断上游模块下发数据的次数K,当次数K达到等待次数标准值Ks时向发起数据处理请求,所述等待次数标准值Ks是根据上游模块一次下发数据块的数据量值为m、一次能处理的数据容量n确定启动数据处理的标准时机。

所述等待次数标准值Ks的确定,可根据数据传输和处理环境进一步划分为:m>n环境、m<=n环境和控制总量原则:

所述m>n环境时,等待次数标准值Ks=2;

所述m<=n环境时,等待次数标准值Ks=floor(n/m)+2;

所述控制总量原则时,等待次数标准值Ks=floor(n/m)+2。

S430响应处理指令,获取待处理数据,执行数据处理。

获取待处理数据前,包括数据分离和数据提取;

所述数据分离指:在缓存数据中标注预设大小的数据,将标注的数据定义为待处理数据;

所述数据提取指:提取待处理数据后,将所述待处理数据从缓存数据中删除。

在本发明中,在采用缓冲机制的前提下,将缓冲和等待的时间集中在下游模块处理前,例如进行音频播放的处理之前,以保证下游模块在每次处理时,都有足够的数据进行处理,以保证最终的质量;同时,本发明对缓冲和等待的时机的控制,既考虑了下发数据和处理能力的平衡,实现了在保证处理质量的前提下,使下游模块等待时间最少、缓冲处理资源代价尽量最小。

以上公开的仅为本发明的几个具体实施例,但是,本发明并非局限于此,任何本领域的技术人员能思之的变化都应落入本发明的保护范围。

相关技术
  • 一种音频处理器的控制装置及控制方法
  • 一种音频数据的处理方法、装置及移动终端
  • 一种推送音频数据的方法及装置
  • 一种液罐车侧翻缓冲装置及其控制方法
  • 一种打桩锤体钎杆缓冲控制方法及装置
  • 缓冲控制方法、缓冲控制装置、数据传输装置以及数据传输格式
  • 控制音频流缓冲的方法和装置
技术分类

06120116493076