音频数据处理方法、装置、电子设备及存储介质与流程

文档序号:32389402发布日期:2022-11-30 07:37阅读:84来源:国知局
音频数据处理方法、装置、电子设备及存储介质与流程

1.本公开涉及数据处理技术领域,尤其涉及一种音频数据处理方法、装置、电子设备及存储介质。


背景技术:

2.随着互联网技术和终端技术的快速发展,出现了很多具有k歌功能的应用程序。在使用手机等设备中的应用程序进行k歌时,耳返延迟是影响歌唱者用户体验的重要环节。
3.相关技术中,可以采用java api(application programming interface,应用程序编程接口)实现软件耳返。为了改善软件耳返延时较大的问题,可以实例化一个耳返缓存区,启动一个采集线程将采集到的音频数据存入耳返缓存区,再启动一个播放线程从耳返缓存区中读取音频数据并播放。由于cpu抖动,采集、播放回调不是有序的到来,会存在如下情况需要处理:播放线程需要从耳返缓存区取数据时,耳返缓存区为空,此时,播放线程需要插入静音帧,播放静音数据;采集线程需要将数据放到耳返缓存区时,耳返缓存区已满,此时,可以通过丢弃音频数据解决。
4.但是,上述插入静音帧、丢弃音频数据的策略不可避免的会引入杂音,最终影响用户耳返体验。


技术实现要素:

5.本公开提供一种音频数据处理方法、装置、电子设备及存储介质,以至少解决相关技术中引入耳返杂音的问题。本公开的技术方案如下:
6.根据本公开实施例的第一方面,提供一种音频数据处理方法,包括:
7.获取待处理的第一音频数据,以及耳返缓存区的存储状态,所述耳返缓存区用于缓存音频数据;
8.在所述存储状态满足预设状态的情况下,从已存储的音频数据中获取与所述第一音频数据对应的第二音频数据;
9.根据所述第一音频数据和所述第二音频数据,生成目标音频数据;
10.对所述目标音频数据进行处理。
11.可选的,所述根据所述第一音频数据和所述第二音频数据,生成目标音频数据,包括:
12.将所述第一音频数据和所述第二音频数据进行合并处理,得到所述目标音频数据。
13.可选的,当所述第一音频数据为通过播放线程从所述耳返缓存区中获取的剩余音频数据时,所述将所述第一音频数据和所述第二音频数据进行合并处理,得到所述目标音频数据,包括:
14.对所述第二音频数据进行淡入处理,得到第一中间数据;
15.对所述第一音频数据进行淡出处理,得到第二中间数据;
16.合并所述第一中间数据和所述第二中间数据,得到所述目标音频数据。
17.可选的,当所述第一音频数据为通过采集线程采集到的音频数据时,所述将所述第一音频数据和所述第二音频数据进行合并处理,得到所述目标音频数据,包括:
18.对所述第二音频数据进行淡出处理,得到第三中间数据;
19.对所述第一音频数据进行淡入处理,得到第四中间数据;
20.合并所述第三中间数据和所述第四中间数据,得到所述目标音频数据。
21.可选的,当所述第一音频数据为通过播放线程从所述耳返缓存区中获取的剩余音频数据时,所述预设状态为所述耳返缓存区中所述剩余音频数据的帧数为第一目标帧数;
22.所述在所述存储状态满足预设状态的情况下,从已存储的音频数据中获取与所述第一音频数据对应的第二音频数据,包括:
23.在所述存储状态为所述耳返缓存区中所述剩余音频数据的帧数为所述第一目标帧数的情况下,通过所述播放线程从历史缓存区中获取与所述第一音频数据对应的第二音频数据。
24.可选的,在所述对所述目标音频数据进行处理之后,还包括:
25.通过所述播放线程将所述目标音频数据存储至所述历史缓存区中。
26.可选的,当所述第一音频数据为通过采集线程采集到的音频数据时,所述预设状态为所述耳返缓存区不足以缓存所述采集线程所采集到的所述第一音频数据;
27.所述在所述存储状态满足预设状态的情况下,从已存储的音频数据中获取与所述第一音频数据对应的第二音频数据,包括:在所述存储状态为所述耳返缓存区不足以缓存所述第一音频数据的情况下,通过所述采集线程从所述耳返缓存区中获取与所述第一音频数据对应的第二音频数据;
28.所述对所述目标音频数据进行处理,包括:通过所述采集线程将所述目标音频数据缓存到所述耳返缓存区中所述第二音频数据所在位置。
29.可选的,所述通过所述采集线程从所述耳返缓存区中获取与所述第一音频数据对应的所述第二音频数据,包括:
30.通过所述采集线程从所述耳返缓存区中获取最后缓存的第二目标帧数的音频数据,作为所述第二音频数据。
31.可选的,还包括:
32.在所述存储状态满足所述预设状态,且所述耳返缓存区中所缓存的音频数据的播放时长小于耳返延时阈值的情况下,扩大所述耳返缓存区的容量,其中,扩大容量后的所述耳返缓存区中所缓存的音频数据的播放时长小于或等于所述耳返延时阈值。
33.根据本公开实施例的第二方面,提供一种音频数据处理装置,包括:
34.第一获取模块,被配置为执行获取待处理的第一音频数据,以及耳返缓存区的存储状态,所述耳返缓存区用于缓存音频数据;
35.第二获取模块,被配置为执行在所述存储状态满足预设状态的情况下,从已存储的音频数据中获取与所述第一音频数据对应的第二音频数据;
36.数据生成模块,被配置为执行根据所述第一音频数据和所述第二音频数据,生成目标音频数据;
37.数据处理模块,被配置为执行对所述目标音频数据进行处理。
38.可选的,所述数据生成模块被配置为执行:
39.将所述第一音频数据和所述第二音频数据进行合并处理,得到所述目标音频数据。
40.可选的,当所述第一音频数据为通过播放线程从所述耳返缓存区中获取的剩余音频数据时,所述数据生成模块包括:
41.第一淡入处理单元,被配置为执行对所述第二音频数据进行淡入处理,得到第一中间数据;
42.第一淡出处理单元,被配置为执行对所述第一音频数据进行淡出处理,得到第二中间数据;
43.第一数据合并单元,被配置为执行合并所述第一中间数据和所述第二中间数据,得到所述目标音频数据。
44.可选的,当所述第一音频数据为通过采集线程采集到的音频数据时,所述数据生成模块包括:
45.第二淡出处理单元,被配置为执行对所述第二音频数据进行淡出处理,得到第三中间数据;
46.第二淡入处理单元,被配置为执行对所述第一音频数据进行淡入处理,得到第四中间数据;
47.第二数据合并单元,被配置为执行合并所述第三中间数据和所述第四中间数据,得到所述目标音频数据。
48.可选的,当所述第一音频数据为通过播放线程从所述耳返缓存区中获取的剩余音频数据时,所述预设状态为所述耳返缓存区中所述剩余音频数据的帧数为第一目标帧数;
49.所述第二获取模块被配置为执行:
50.在所述存储状态为所述耳返缓存区中所述剩余音频数据的帧数为所述第一目标帧数的情况下,通过所述播放线程从历史缓存区中获取与所述第一音频数据对应的第二音频数据。
51.可选的,所述装置还包括:
52.目标数据缓存模块,被配置为执行通过所述播放线程将所述目标音频数据存储至所述历史缓存区中。
53.可选的,当所述第一音频数据为通过采集线程采集到的音频数据时,所述预设状态为所述耳返缓存区不足以缓存所述采集线程所采集到的所述第一音频数据;
54.所述第二获取模块被配置为执行:在所述存储状态为所述耳返缓存区不足以缓存所述第一音频数据的情况下,通过所述采集线程从所述耳返缓存区中获取与所述第一音频数据对应的第二音频数据;
55.所述数据处理模块被配置为执行:通过所述采集线程将所述目标音频数据缓存到所述耳返缓存区中所述第二音频数据所在位置。
56.可选的,所述第二获取模块包括:
57.第二数据获取单元,被配置为执行通过所述采集线程从所述耳返缓存区中获取最后缓存的第二目标帧数的音频数据,作为所述第二音频数据。
58.可选的,所述装置还包括:
59.扩容模块,被配置为执行在所述存储状态满足所述预设状态,且所述耳返缓存区中所缓存的音频数据的播放时长小于耳返延时阈值的情况下,扩大所述耳返缓存区的容量,其中,扩大容量后的所述耳返缓存区中所缓存的音频数据的播放时长小于或等于所述耳返延时阈值。
60.根据本公开实施例的第三方面,提供一种电子设备,包括:
61.处理器;
62.用于存储所述处理器可执行指令的存储器;
63.其中,所述处理器被配置为执行所述指令,以实现如第一方面所述的音频数据处理方法。
64.根据本公开实施例的第四方面,提供一种计算机可读存储介质,当所述计算机存储介质中的指令由电子设备的处理器执行时,使得所述电子设备能够执行如第一方面所述的音频数据处理方法。
65.根据本公开实施例的第五方面,提供一种计算机程序产品,包括计算机程序或计算机指令,所述计算机程序或计算机指令被处理器执行时实现第一方面所述的音频数据处理方法。
66.本公开的实施例提供的技术方案至少带来以下有益效果:
67.本公开实施例通过获取待处理的第一音频数据以及耳返缓存区的存储状态,在存储状态满足预设状态的情况下,从已存储的音频数据中获取与第一音频数据对应的第二音频数据,根据第一音频数据和第二音频数据生成目标音频数据,对目标音频数据进行处理,由于在耳返缓存区满足预设状态时基于第一音频数据和第二音频数据生成目标音频数据,进而对目标音频数据进行处理,不需要插入静音帧或者丢弃音频数据,可以避免引入耳返杂音,提升耳返音频效果。
68.应当理解的是,以上的一般描述和后文的细节描述仅是示例性和解释性的,并不能限制本公开。
附图说明
69.此处的附图被并入说明书中并构成本说明书的一部分,示出了符合本公开的实施例,并与说明书一起用于解释本公开的原理,并不构成对本公开的不当限定。
70.图1是根据一示例性实施例示出的一种音频数据处理方法的流程图;
71.图2是根据一示例性实施例示出的一种音频数据处理方法的流程图;
72.图3是根据一示例性实施例示出的一种音频数据处理方法的流程图;
73.图4是根据一示例性实施例示出的一种音频数据处理装置的框图;
74.图5是根据一示例性实施例示出的一种电子设备的框图。
具体实施方式
75.为了使本领域普通人员更好地理解本公开的技术方案,下面将结合附图,对本公开实施例中的技术方案进行清楚、完整地描述。
76.需要说明的是,本公开的说明书和权利要求书及上述附图中的术语“第一”、“第二”等是用于区别类似的对象,而不必用于描述特定的顺序或先后次序。应该理解这样使用
的数据在适当情况下可以互换,以便这里描述的本公开的实施例能够以除了在这里图示或描述的那些以外的顺序实施。以下示例性实施例中所描述的实施方式并不代表与本公开相一致的所有实施方式。相反,它们仅是与如所附权利要求书中所详述的、本公开的一些方面相一致的装置和方法的例子。
77.在解决耳返延迟时,部分厂商会实现硬件耳返并提供自定义的厂商耳返api(application programming interface,应用程序编程接口)。使用厂商耳返api,耳返的延时是厂商针对特定设备优化过后的,延迟相对软件耳返更低,如果设备支持一般优先选用厂商耳返。但是,若设备不支持厂商耳返,则需要通过软件实现耳返效果,也叫软件耳返。软件耳返的实现原理是通过设备中麦克风采集用户发音,并尽快将采集数据播放出去,让用户能及时听到自己的发音并从而调整自己后续发音。
78.相关技术中,可以使用java api实现软件耳返,实现过程中主要使用媒体录制器(media recorder)和媒体播放器(media player)进行音频的采集与播放,但是这种方式耳返延时较大,降低用户体验。为了改善软件耳返时延时较大的问题,可以使用音频开发框架(例如opensl es api、aaudio api、oboe api)来实现软件耳返。这些api在实现软件耳返时,实例化一个耳返缓存区用于存放耳返数据,启动一个采集线程将采集到的音频数据存入耳返缓存区,再启动一个播放线程从耳返缓存区中读取音频数据进行播放。由于cpu抖动,采集、播放回调不是有序的到来,就会导致在极端情况下引入杂音,影响用户体验。为了解决该技术问题,本公开提供了如下技术方案。
79.图1是根据一示例性实施例示出的一种音频数据处理方法的流程图,如图1所示,该音频数据处理方法用于手机、平板电脑等电子设备中,包括以下步骤。
80.在步骤s11中,获取待处理的第一音频数据,以及耳返缓存区的存储状态,耳返缓存区用于缓存音频数据。
81.其中,耳返缓存区用于缓存耳返音频数据,即将采集线程采集到的音频数据缓存到耳返缓存区中,播放线程播放音频数据时从耳返缓存区中获取音频数据并播放。存储状态可以是已存满的状态、即将为空的状态、正常状态,正常状态是有足够空间可以存储采集线程待采集的音频数据,并且有足够的音频数据供播放线程获取。
82.本公开实施例中的音频数据处理方法可以但不限于应用于使用opensl es api、aaudio api、oboe api来实现软件耳返时对音频数据进行处理,以避免在耳返缓存区满、空的极端情况下引入耳返杂音。其中,opensl es是android2.3开始支持,有高性能,低延迟的特性;aaudio是在android o(android8.1)版本中引入的全新api,专为低延迟高性能音频应用设计的;oboe是在android4.1开始支持的,对于android8.1及以上设备oboe会使用aaudio api,对于较低版本的设备oboe会用opensl es做兼容。
83.在实现软件耳返时,待处理的第一音频数据可以是播放线程从耳返缓存区中获取的待进行播放的音频数据,或者,还可以是采集线程刚采集到的需要缓存至耳返缓存区的音频数据。在播放线程需要从耳返缓存区中获取待进行播放的音频数据之前,获取耳返缓存区的存储状态;或者,在采集线程采集到音频数据并需要缓存至耳返缓存区时,获取耳返缓存区的存储状态。
84.在步骤s12中,在存储状态满足预设状态的情况下,从已存储的音频数据中获取与第一音频数据对应的第二音频数据。
85.其中,已存储的音频数据可以是耳返缓存区中存储的音频数据,或者,也可以是历史缓存区中存储的历史播放的音频数据。预设状态可以是存满的状态,或者也可以是即将为空的状态。
86.在耳返缓存区的存储状态为存满的状态时,从耳返缓存区中获取与第一音频数据对应的第二音频数据;在耳返缓存区的存储状态为即将为空的状态时,从历史缓存区中获取与第一音频数据对应的第二音频数据。其中,第二音频数据的帧数和第一音频数据的帧数可以相同。
87.在步骤s13中,根据第一音频数据和第二音频数据,生成目标音频数据。
88.结合第一音频数据和第二音频数据,生成新的音频数据,得到目标音频数据。
89.在一个示例性实施例中,根据第一音频数据和第二音频数据,生成目标音频数据,包括:将第一音频数据和第二音频数据进行合并处理,得到目标音频数据。
90.第一音频数据的帧数可以和第二音频数据的帧数相同,对第一音频数据和第二音频数据进行合并处理,使得合并后得到的目标音频数据的帧数和第一音频数据的帧数以及第二音频数据的帧数分别相同,例如在第一音频数据为一帧、第二音频数据为一帧时,合并后得到的目标音频数据的帧数也为一帧,这样目标音频数据和第一音频数据获取第二音频数据的所占空间相同,并且播放时长相同,这样在耳返缓存区存满的状态下可以覆盖第二音频数据,并且在耳返缓存区即将为空的状态时可以进行播放。还可以在合并的过程中进行交叉淡入淡出处理(crossfade),使得生成的目标音频数据前面可以与前后的音频数据相互衔接,保证了数据的连续性,避免了丢弃音频数据或者插入静音帧,避免了引入杂音。
91.在步骤s14中,对目标音频数据进行处理。
92.在生成目标音频数据后,可以播放目标音频数据,或者,也可以将目标音频数据缓存至耳返缓存区中。
93.在目标音频数据是由播放线程在耳返缓存区的存储状态为即将为空的状态时生成的,播放线程直接播放目标音频数据,并保证耳返缓存区中保留第一音频数据。在目标音频数据是由采集线程在耳返缓存区的存储状态为存满的状态时生成的,采集线程将目标音频数据缓存至耳返缓存区中第二音频数据所在位置,即在耳返缓存区中使用目标音频数据覆盖第二音频数据。
94.本示例性实施例提供的音频数据处理方法,通过获取待处理的第一音频数据以及耳返缓存区的存储状态,在存储状态满足预设状态的情况下,从已存储的音频数据中获取与第一音频数据对应的第二音频数据,根据第一音频数据和第二音频数据生成目标音频数据,对目标音频数据进行处理,由于在耳返缓存区满足预设状态时基于第一音频数据和第二音频数据生成目标音频数据,进而对目标音频数据进行处理,不需要插入静音帧或者丢弃音频数据,可以避免引入耳返杂音,提升耳返音频效果。
95.在一个示例性实施例中,当第一音频数据为通过播放线程从耳返缓存区中获取的剩余音频数据时,预设状态为耳返缓存区中剩余音频数据的帧数为第一目标帧数;
96.在存储状态满足预设状态的情况下,从已存储的音频数据中获取与第一音频数据对应的第二音频数据,包括:在存储状态为耳返缓存区中剩余音频数据的帧数为第一目标帧数的情况下,通过播放线程从历史缓存区中获取与第一音频数据对应的第二音频数据。
97.其中,第一目标帧数是较少的帧数,是大于0并且接近0的整数,也就是预设状态是
耳返缓存区中剩余音频数据的帧数较少,将近为空的状态,第一目标帧数例如可以为1,这样可以避免耳返缓存区出现空的状态。
98.当第一音频数据为通过播放线程从耳返缓存区中获取的剩余音频数据时,在播放线程从耳返缓存区获取到第一音频数据之前,如果耳返缓存区的存储状态为耳返缓存区中剩余音频数据的帧数为第一目标帧数,也就是耳返缓存区即将出现空的情况时,耳返缓存区中当前缓存的音频数据较少,只剩余第一目标帧数的音频数据,这时播放线程在从耳返缓存区中获取到第一音频数据时仍然在耳返缓存区中保留该第一音频数据,并且获取到第一音频数据后不直接播放,而是从历史缓存区中获取与第一音频数据对应的第二音频数据,也就是从历史缓存区中获取第一目标帧数的第二音频数据,并结合第一音频数据和第二音频数据,生成目标音频数据,播放线程可以播放该目标音频数据,并保留耳返缓存区中的第一音频数据,这样可以保证耳返缓存区不会出现空的情况,至少会保留有第一目标帧数的剩余音频数据。
99.耳返缓存区出现空的极端情况一般是由于cpu抖动或采集、播放回调不是有序到来时造成的,是一个短时情况,这时播放线程播放目标音频数据后再从耳返缓存区获取音频数据时,耳返缓存区中一般就不会只剩余第一目标帧数的音频数据了,这时播放线程可以直接从耳返缓存区取出一帧音频数据,并播放取出的这一帧数据。由于生成的目标音频数据是结合了耳返缓存区中的第一音频数据和历史播放的第二音频数据生成的,所以播放的目标音频数据和后续即将播放的耳返缓存区中的第一音频数据可以衔接上,而且和历史上播放的第二音频数据也可以衔接上,从音频数据的频谱上看不出来杂音,并且主观上也听不出来杂音,从而避免了在耳返缓存区出现空的情况下引入杂音的问题。
100.在上述技术方案的基础上,在对目标音频数据进行处理之后,还包括:通过播放线程将目标音频数据存储至历史缓存区中。
101.其中,历史缓存区用于存储历史播放的音频数据,例如可以缓存历史播放的距离当前时间最近的一帧音频数据,以便于与第一音频数据生成目标音频数据。
102.播放线程在生成目标音频数据并播放目标音频数据后,将刚播放的目标音频数据存储至历史缓存区中,以便于后续如果耳返缓存区仍然只有第一目标帧数的第一音频数据时,再次基于历史缓存区中历史播放的音频数据生成新的音频数据,以起到音频过渡的作用。
103.在上述技术方案的基础上,当第一音频数据为通过播放线程从耳返缓存区中获取的剩余音频数据时,将第一音频数据和第二音频数据进行合并处理,得到目标音频数据,包括:对第二音频数据进行淡入处理,得到第一中间数据;对第一音频数据进行淡出处理,得到第二中间数据;合并第一中间数据和第二中间数据,得到目标音频数据。
104.在第一音频数据为通过播放线程从耳返缓存区中获取的剩余音频数据时,对第二音频数据进行淡入处理,即使得第二播放数据的音量从最低音量开始从小到大进行变化,直至音量达到最高,得到第一中间数据;同时对第一音频数据进行淡出处理,即使得第一音频数据的音量从大到小进行变化,直至音量达到最低,得到第二中间数据;合并第一中间数据和第二中间数据,得到目标音频数据。
105.例如,第一目标帧数为一帧,即第一音频数据是耳返缓存区中剩余的一帧音频数据(curr_frame),第二音频数据为当前时间之前刚播放的一帧音频数据(last_frame),这
样根据一帧音频数据的帧大小(frame_cnt),对第二音频数据做淡入效果,对第一音频数据做淡出效果,即对第一音频数据和第二音频数据进行交叉淡入淡出处理,可以通过如下代码实现:
[0106][0107][0108]
在上述代码中,alpha是交叉淡入淡出处理过程中的调整权重,step是调整权重的调整步长,在循环变量小于帧大小(frame_cnt)的情况下,对每一通道(channel)的音频数据,循环对第一音频数据(curr_frame)在目标音频数据中的权重降低,即实现对第一音频数据的淡出处理,并对第二音频数据(last_frame)在目标音频数据中的权重增高,即实现对第二音频数据的淡入处理。
[0109]
通过对第二音频数据进行淡入处理,得到第一中间数据,并对第一音频数据进行淡出处理,得到第二中间数据,合并第一中间数据和第二中间数据,生成目标音频数据,这样生成的第目标音频数据前面可以衔接上第二音频数据,后面可以衔接上耳返缓存区中的第一音频数据,保证了数据的连续性,避免了耳返缓存区出现空的极端情况时使用静音帧导致卡顿而引入杂音的问题。
[0110]
在另一个示例性实施例中,当第一音频数据为通过采集线程采集到的音频数据时,预设状态为耳返缓存区不足以缓存采集线程所采集到的第一音频数据;
[0111]
在存储状态满足预设状态的情况下,从已存储的音频数据中获取与第一音频数据对应的第二音频数据,包括:在存储状态为耳返缓存区不足以缓存第一音频数据的情况下,通过采集线程从耳返缓存区中获取与第一音频数据对应的第二音频数据;
[0112]
对目标音频数据进行处理,包括:通过采集线程将目标音频数据缓存到耳返缓存区中第二音频数据所在位置。
[0113]
在采集线程采集到第一音频数据,并需要将采集到的第一音频数据缓存到耳返缓存区时,如果耳返缓存区的存储空间即将存满或者已存满,不足以缓存下采集到的第一音频数据,这时可以从耳返缓存区中获取与第一音频数据对应的第二音频数据,即从耳返缓存区的尾部获取与第一音频数据的帧数相同的第二音频数据,结合所采集到的第一音频数
据和耳返缓存区中最后缓存的第二音频数据,生成目标音频数据,并将目标音频数据缓存到耳返缓存区中第二音频数据所在位置,即使用目标音频数据覆盖耳返缓存区中第二音频数据。
[0114]
耳返缓存区出现存满的极端情况一般是由于cpu抖动或采集、播放回调不是有序到来时造成的,是一个短时情况,这时采集线程将目标音频数据缓存到耳返缓存区中第二音频数据所在位置后,再需要向耳返缓存区缓存下一帧音频数据时,耳返缓存区中一般就不会继续是存满的情况了,这时采集线程可以直接向耳返缓存区中缓存新采集的一帧音频数据。由于生成的目标音频数据是结合了耳返缓存区中的第二音频数据和第一音频数据生成的,所以目标音频数据和耳返缓存区中第二音频数据之前的音频数据可以衔接上,并可以与第一音频数据之后的音频数据衔接上,从音频数据的频谱上看不出来杂音,并且主观上也听不出来杂音,从而避免了在耳返缓存区出现存满的情况下引入杂音的问题,而且也不需要扩充耳返缓存区,避免了扩充耳返缓存区导致的延时。
[0115]
在上述技术方案的基础上,通过采集线程从耳返缓存区中获取与第一音频数据对应的第二音频数据,包括:通过采集线程从耳返缓存区中获取最后缓存的第二目标帧数的音频数据,作为第二音频数据。
[0116]
其中,第二目标帧数是较少的帧数,例如可以是一帧、两帧等。
[0117]
在采集线程采集到第一音频数据,并需要将采集到的第一音频数据缓存到耳返缓存区时,如果耳返缓存区的存储空间即将存满或者已存满,不足以缓存下采集到的第一音频数据,这时可以从耳返缓存区中获取最后缓存的第二目标帧数的音频数据,作为与第一音频数据对应的第二音频数据,这样便于结合第一音频数据和第二音频数据,生成目标音频数据,并可以将目标音频数据缓存到耳返缓存区中第二音频数据所在位置,而且第二音频数据是耳返缓存区中最后缓存的第二目标帧数的音频数据,是与第一音频数据相邻的音频数据,这时合成的目标音频数据与第二音频数据之前的音频数据可以衔接上,并且与第一音频数据之后采集到的音频数据也可以衔接上,不需要直接丢弃音频数据,避免了引入杂音。
[0118]
在上述技术方案的基础上,方法还包括:
[0119]
在存储状态满足预设状态,且耳返缓存区中所缓存的音频数据的播放时长小于耳返延时阈值的情况下,扩大耳返缓存区的容量,其中,扩大容量后的耳返缓存区中所缓存的音频数据的播放时长小于或等于耳返延时阈值。
[0120]
其中,耳返延时阈值是可容忍的耳返延时大小。
[0121]
在采集线程需要将采集到的第一音频数据缓存至耳返缓存区时,如果耳返缓存区不足以缓存采集到的第一音频数据,这时可以判断耳返缓存区中已缓存的音频数据的播放时长是否小于耳返延时阈值,如果耳返缓存区中缓存的音频数据的播放时长小于耳返延时阈值,这时可以扩大耳返缓存区的容量,但是耳返缓存区的容量不能无限扩大,耳返缓存区扩大容量后所缓存的所有音频数据的播放时长要小于或等于耳返延时阈值,这样可以避免耳返延时过大。
[0122]
在上述技术方案的基础上,当第一音频数据为通过采集线程采集到的音频数据时,将第一音频数据和第二音频数据进行合并处理,得到目标音频数据,包括:对第二音频数据进行淡出处理,得到第三中间数据;对第一音频数据进行淡入处理,得到第四中间数
据;合并第三中间数据和第四中间数据,得到目标音频数据。
[0123]
在第一音频数据为通过采集线程采集到的音频数据时,对第二音频数据进行淡出处理,即使得第二音频数据的音量从大到小进行变化,直至音量达到最低,得到第三中间数据;同时对第一音频数据进行淡入处理,即使得采集到的第一音频数据的音量从最低音量开始从小到大进行变化,直至音量达到最高,得到第四中间数据;合并第三中间数据和第四中间数据,得到目标音频数据。
[0124]
例如,第二目标帧数为一帧,即第二音频数据是从耳返缓存区中取出的最后一帧音频数据(last_frame),第一音频数据是采集线程刚采集到的一种音频数据,这样根据一帧音频数据的帧大小(frame_cnt),对第二音频数据(last_frame)做淡出效果,对第一音频数据(curr_frame)做淡入效果,即对第一音频数据和第二音频数据进行交叉淡入淡出处理,可以通过如下代码实现:
[0125][0126]
在上述代码中,alpha是交叉淡入淡出处理过程中的调整权重,step是调整系数的调整步长,在循环变量小于帧大小(frame_cnt)的情况下,对每一通道(channel)的音频数据,循环对第一音频数据(curr_frame)在目标音频数据中的权重增高,即实现对第一音频数据的淡入处理,并对第二音频数据(last_frame)在目标音频数据中的权重降低,即实现对第二音频数据的淡出处理。
[0127]
通过对耳返缓存区中最后缓存的第二音频数据进行淡出处理,并对采集线程采集到的第一音频数据进行淡入处理,合并处理后得到的第三中间数据和第四中间数据,生成目标音频数据,这样生成的目标音频数据包含第二音频数据和第一音频数据,目标音频数据开始可以与耳返缓存区第二音频数据之前的音频数据衔接上,目标音频数据的末尾可以与采集线程下一次采集到的音频数据衔接上,避免了丢弃其中的音频数据,保证了数据的连续性,避免了耳返缓存区存满的极端情况丢弃音频数据导致引入杂音的问题。
[0128]
图2是根据一示例性实施例示出的一种音频数据处理方法的流程图,如图2所示,该音频数据处理方法主要是播放线程对音频数据进行处理的过程,包括以下步骤。
[0129]
在步骤s21中,通过播放线程从耳返缓存区中获取剩余音频数据时,获取耳返缓存区的存储状态,并将获取的剩余音频数据作为待处理的第一音频数据。
[0130]
在步骤s22中,在存储状态为耳返缓存区中剩余音频数据的帧数为第一目标帧数的情况下,通过播放线程从历史缓存区中获取与第一音频数据对应的第二音频数据。
[0131]
在步骤s23中,对第二音频数据进行淡入处理,得到第一中间数据。
[0132]
在步骤s24中,对第一音频数据进行淡出处理,得到第二中间数据。
[0133]
在步骤s25中,合并第一中间数据和第二中间数据,得到目标音频数据。
[0134]
在步骤s26中,通过播放线程播放目标音频数据。
[0135]
上述各步骤的具体过程可参见上述示例性实施例,这里不再赘述。
[0136]
本示例性实施例提供的音频数据处理方法,通过在播放线程从耳返缓存区中获取第一音频数据时,在耳返缓存区的存储状态为耳返缓存区中剩余音频数据的帧数为第一目标帧数的情况下,则根据第一音频数据和第二音频数据生成目标音频数据,并播放目标音频数据,这样由于目标音频数据结合了耳返缓存区中的剩余音频数据和历史播放的第二音频数据,能够保持数据的连续性,避免了由于耳返缓存区出现空的极端情况插入静音帧引入杂音的问题。
[0137]
图3是根据一示例性实施例示出的一种音频数据处理方法的流程图,如图3所示,该音频数据处理方法主要是采集线程对音频数据进行处理的过程,包括以下步骤。
[0138]
在步骤s31中,通过采集线程采集音频数据,并将采集到的音频数据作为第一音频数据,获取耳返缓存区的存储状态。
[0139]
在步骤s32中,在存储状态为耳返缓存区不足以缓存第一音频数据的情况下,通过采集线程从耳返缓存区中获取与第一音频数据对应的第二音频数据。
[0140]
在步骤s33中,对第二音频数据进行淡出处理,得到第三中间数据。
[0141]
在步骤s34中,对第一音频数据进行淡入处理,得到第四中间数据。
[0142]
在步骤s35中,合并第三中间数据和第四中间数据,得到目标音频数据。
[0143]
在步骤s36中,通过采集线程将目标音频数据缓存到耳返缓存区中第二音频数据所在位置。
[0144]
上述各步骤的具体过程可参见上述示例性实施例,这里不再赘述。
[0145]
本示例性实施例提供的音频数据处理方法,通过在采集线程将采集到的第一音频数据缓存到耳返缓存区时,如果耳返缓存区不足以缓存第一音频数据,则根据第一音频数据和耳返缓存区最后缓存的第二音频数据生成目标音频数据,并将目标音频数据缓存到耳返缓存区中第二音频数据所在位置,这样由于目标音频数据结合了耳返缓存区中的第二音频数据和新采集到的第一音频数据,能够保持数据的连续性,避免了由于耳返缓存区出现存满的极端情况丢弃音频数据引入杂音的问题,并且不需要对耳返缓存区进行扩容,避免了延时较大的问题。
[0146]
图4是根据一示例性实施例示出的一种音频数据处理装置的框图。参照图4,该装置包括第一获取模块41、第二获取模块42、数据生成模块43和数据处理模块44。
[0147]
该第一获取模块41被配置为执行获取待处理的第一音频数据,以及耳返缓存区的存储状态,耳返缓存区用于缓存音频数据;
[0148]
该第二获取模块42被配置为执行在存储状态满足预设状态的情况下,从已存储的
音频数据中获取与第一音频数据对应的第二音频数据;
[0149]
该数据生成模块43被配置为执行根据第一音频数据和第二音频数据,生成目标音频数据;
[0150]
该数据处理模块44被配置为执行对目标音频数据进行处理。
[0151]
可选的,数据生成模块43被配置为执行:
[0152]
将第一音频数据和第二音频数据进行合并处理,得到目标音频数据。
[0153]
可选的,当第一音频数据为通过播放线程从耳返缓存区中获取的剩余音频数据时,数据生成模块43包括:
[0154]
第一淡入处理单元,被配置为执行对第二音频数据进行淡入处理,得到第一中间数据;
[0155]
第一淡出处理单元,被配置为执行对第一音频数据进行淡出处理,得到第二中间数据;
[0156]
第一数据合并单元,被配置为执行合并第一中间数据和第二中间数据,得到目标音频数据。
[0157]
可选的,当第一音频数据为通过采集线程采集到的音频数据时,数据生成模块43包括:
[0158]
第二淡出处理单元,被配置为执行对第二音频数据进行淡出处理,得到第三中间数据;
[0159]
第二淡入处理单元,被配置为执行对第一音频数据进行淡入处理,得到第四中间数据;
[0160]
第二数据合并单元,被配置为执行合并第三中间数据和第四中间数据,得到目标音频数据。
[0161]
可选的,当第一音频数据为通过播放线程从耳返缓存区中获取的剩余音频数据时,预设状态为耳返缓存区中剩余音频数据的帧数为第一目标帧数;
[0162]
第二获取模块42被配置为执行:
[0163]
在存储状态为耳返缓存区中剩余音频数据的帧数为第一目标帧数的情况下,通过播放线程从历史缓存区中获取与第一音频数据对应的第二音频数据。
[0164]
可选的,装置还包括:
[0165]
目标数据缓存模块,被配置为执行通过播放线程将目标音频数据存储至历史缓存区中。
[0166]
可选的,当第一音频数据为通过采集线程采集到的音频数据时,预设状态为耳返缓存区不足以缓存采集线程所采集到的第一音频数据;
[0167]
第二获取模块42被配置为执行:在存储状态为耳返缓存区不足以缓存第一音频数据的情况下,通过采集线程从耳返缓存区中获取与第一音频数据对应的第二音频数据;
[0168]
数据处理模块44被配置为执行:通过采集线程将目标音频数据缓存到耳返缓存区中第二音频数据所在位置。
[0169]
可选的,第二获取模块42包括:
[0170]
第二数据获取单元,被配置为执行通过采集线程从耳返缓存区中获取最后缓存的第二目标帧数的音频数据,作为第二音频数据。
[0171]
可选的,装置还包括:
[0172]
扩容模块,被配置为执行在存储状态满足预设状态,且耳返缓存区中所缓存的音频数据的播放时长小于耳返延时阈值的情况下,扩大耳返缓存区的容量,其中,扩大容量后的耳返缓存区中所缓存的音频数据的播放时长小于或等于耳返延时阈值。
[0173]
关于上述实施例中的装置,其中各个模块执行操作的具体方式已经在有关该方法的实施例中进行了详细描述,此处将不做详细阐述说明。
[0174]
图5是根据一示例性实施例示出的一种电子设备的框图。例如,电子设备500可以是移动电话,计算机,数字广播终端,消息收发设备,游戏控制台,平板设备,医疗设备,健身设备,个人数字助理等。
[0175]
参照图5,电子设备500可以包括以下一个或多个组件:处理组件502,存储器504,电源组件506,多媒体组件508,音频组件510,输入/输出(i/o)的接口512,传感器组件514,以及通信组件516。
[0176]
处理组件502通常控制电子设备500的整体操作,诸如与显示,电话呼叫,数据通信,相机操作和记录操作相关联的操作。处理组件502可以包括一个或多个处理器520来执行指令,以完成上述的方法的全部或部分步骤。此外,处理组件502可以包括一个或多个模块,便于处理组件502和其他组件之间的交互。例如,处理组件502可以包括多媒体模块,以方便多媒体组件508和处理组件502之间的交互。
[0177]
存储器504被配置为存储各种类型的数据以支持在电子设备500的操作。这些数据的示例包括用于在电子设备500上操作的任何应用程序或方法的指令,联系人数据,电话簿数据,消息,图片,视频等。存储器504可以由任何类型的易失性或非易失性存储设备或者它们的组合实现,如静态随机存取存储器(sram),电可擦除可编程只读存储器(eeprom),可擦除可编程只读存储器(eprom),可编程只读存储器(prom),只读存储器(rom),磁存储器,快闪存储器,磁盘或光盘。
[0178]
电源组件506为电子设备500的各种组件提供电力。电源组件506可以包括电源管理系统,一个或多个电源,及其他与为电子设备500生成、管理和分配电力相关联的组件。
[0179]
多媒体组件508包括在所述电子设备500和用户之间的提供一个输出接口的屏幕。在一些实施例中,屏幕可以包括液晶显示器(lcd)和触摸面板(tp)。如果屏幕包括触摸面板,屏幕可以被实现为触摸屏,以接收来自用户的输入信号。触摸面板包括一个或多个触摸传感器以感测触摸、滑动和触摸面板上的手势。所述触摸传感器可以不仅感测触摸或滑动动作的边界,而且还检测与所述触摸或滑动操作相关的持续时间和压力。在一些实施例中,多媒体组件508包括一个前置摄像头和/或后置摄像头。当电子设备500处于操作模式,如拍摄模式或视频模式时,前置摄像头和/或后置摄像头可以接收外部的多媒体数据。每个前置摄像头和后置摄像头可以是一个固定的光学透镜系统或具有焦距和光学变焦能力。
[0180]
音频组件510被配置为输出和/或输入音频信号。例如,音频组件510包括一个麦克风(mic),当电子设备500处于操作模式,如呼叫模式、记录模式和语音识别模式时,麦克风被配置为接收外部音频信号。所接收的音频信号可以被进一步存储在存储器504或经由通信组件516发送。在一些实施例中,音频组件510还包括一个扬声器,用于输出音频信号。
[0181]
i/o接口512为处理组件502和外围接口模块之间提供接口,上述外围接口模块可以是键盘,点击轮,按钮等。这些按钮可包括但不限于:主页按钮、音量按钮、启动按钮和锁
定按钮。
[0182]
传感器组件514包括一个或多个传感器,用于为电子设备500提供各个方面的状态评估。例如,传感器组件514可以检测到电子设备500的打开/关闭状态,组件的相对定位,例如所述组件为电子设备500的显示器和小键盘,传感器组件514还可以检测电子设备500或电子设备500一个组件的位置改变,用户与电子设备500接触的存在或不存在,电子设备500方位或加速/减速和电子设备500的温度变化。传感器组件514可以包括接近传感器,被配置用来在没有任何的物理接触时检测附近物体的存在。传感器组件514还可以包括光传感器,如cmos或ccd图像传感器,用于在成像应用中使用。在一些实施例中,该传感器组件514还可以包括加速度传感器,陀螺仪传感器,磁传感器,压力传感器或温度传感器。
[0183]
通信组件516被配置为便于电子设备500和其他设备之间有线或无线方式的通信。电子设备500可以接入基于通信标准的无线网络,如wifi,运营商网络(如2g、3g、4g或5g),或它们的组合。在一个示例性实施例中,通信组件516经由广播信道接收来自外部广播管理系统的广播信号或广播相关信息。在一个示例性实施例中,所述通信组件516还包括近场通信(nfc)模块,以促进短程通信。例如,在nfc模块可基于射频识别(rfid)技术,红外数据协会(irda)技术,超宽带(uwb)技术,蓝牙(bt)技术和其他技术来实现。
[0184]
在示例性实施例中,电子设备500可以被一个或多个应用专用集成电路(asic)、数字信号处理器(dsp)、数字信号处理设备(dspd)、可编程逻辑器件(pld)、现场可编程门阵列(fpga)、控制器、微控制器、微处理器或其他电子元件实现,用于执行上述音频数据处理方法。
[0185]
在示例性实施例中,还提供了一种包括指令的计算机可读存储介质,例如包括指令的存储器504,上述指令可由电子设备500的处理器520执行以完成上述音频数据处理方法。可选地,计算机可读存储介质可以是rom、随机存取存储器(ram)、cd-rom、磁带、软盘和光数据存储设备等。
[0186]
在示例性实施例中,还提供一种计算机程序产品,包括计算机程序或计算机指令,所述计算机程序或计算机指令被处理器执行时实现上述的音频数据处理方法。
[0187]
本领域技术人员在考虑说明书及实践这里公开的发明后,将容易想到本公开的其它实施方案。本技术旨在涵盖本公开的任何变型、用途或者适应性变化,这些变型、用途或者适应性变化遵循本公开的一般性原理并包括本公开未公开的本技术领域中的公知常识或惯用技术手段。说明书和实施例仅被视为示例性的,本公开的真正范围和精神由下面的权利要求指出。
[0188]
应当理解的是,本发明并不局限于上面已经描述并在附图中示出的精确结构,并且可以在不脱离其范围进行各种修改和改变。本发明的范围仅由所附的权利要求来限制。
当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1