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

一种多路音频数据录制混音方法及装置、存储介质与流程

2021-08-03 14:28:00 来源:中国专利 TAG:混音 录制 音频 多路 装置
一种多路音频数据录制混音方法及装置、存储介质与流程

本申请实施例涉及音频录制混音技术,尤其涉及一种多路音频数据录制混音方法及装置、存储介质。



背景技术:

目前电子设备,虽然支持音频数据录制功能,但并不支持对所录制的多路音频的实时混音,即,只能针对多路音频源分别进行录制,并分别处理,并不支持将录制音频数据进行混音的处理。而实际应用时,往往存在针对不同的多路音频源进行合并的需求,而目前并无相关技术能够支持这一需求。在对多路录制的音频数据进行混音时,还需考虑多路录制的音频数据的同步问题。



技术实现要素:

有鉴于此,本申请实施例提供一种多路音频数据录制混音方法及装置、存储介质,能够对多路音频数据源分别进行录制,并对录制后的多路录制音频数据进行混音,以满足用户针对不同音频源的录制需求。

根据本申请的第一方面,提供一种多路音频数据录制混音方法,包括:

对至少两路音频数据源的抓取函数进行初始化,分别对应生成至少两个抓取对象;

为所述至少两个抓取对象分别创建抓取线程,每一抓取线程分别读取与该抓取线程对应的抓取对象抓取的实时音频数据;

获取每一抓取线程读取的音频数据,对所获取的各路音频数据进行混音,生成混音数据。

作为一种实现方式,所述获取每一抓取线程读取的音频数据,对所获取的各路音频数据进行混音,包括:

确定从每一抓取线程均读取了音频数据,判断每一路音频数据的时间戳是否匹配,将时间戳匹配的每一路音频数据进行混音。

作为一种实现方式,所述获取每一抓取线程读取的音频数据,对所获取的各路音频数据进行混音,包括:

确定抓取线程中至少一路抓取线程还未读取录制的音频数据时,对未读取音频数据的至少一路抓取线程进行填静音处理,再与其他路抓取线程读取的当前音频数据进行混音。

作为一种实现方式,所述获取每一抓取线程读取的音频数据,对所获取的各路音频数据进行混音,包括:

确定抓取线程中所有抓取线程均未获取音频数据时,则对所有抓取线程均进行填充静音处理,直到抓取线程能够读取录制的语音数据;

对填充静音处理后的所有抓取线程的每一路音频数据进行混音,。

作为一种实现方式,所述方法还包括:

为每一抓取线程设置音频数据缓存队列,所述缓存队列用于缓存从抓取对象读取的预设数量帧的音频数据,当缓存队列存满且有新读取音频数据时,用新读取音频数据覆盖最早存储的音频数据。

根据本申请的第二方面,提供一种多路音频数据录制混音装置,包括:

生成单元,用于对至少两路音频数据源的抓取函数进行初始化,分别对应生成至少两个抓取对象;

生成单元,用于为所述至少两个抓取对象分别创建抓取线程,每一抓取线程分别读取与该抓取线程对应的抓取对象抓取的实时音频数据;

混音单元,用于获取每一抓取线程读取的音频数据,对所获取的各路音频数据进行混音,生成混音数据。

作为一种实现方式,所述混音单元,还用于:

确定从每一抓取线程均读取了音频数据,判断每一路音频数据的时间戳是否匹配,将时间戳匹配的每一路音频数据进行混音。

作为一种实现方式,所述混音单元,还用于:

确定抓取线程中至少一路抓取线程还未读取录制的音频数据时,对未读取音频数据的至少一路抓取线程进行填静音处理,再与其他路抓取线程读取的当前音频数据进行混音。

作为一种实现方式,所述混音单元,还用于:

确定抓取线程中所有抓取线程均未获取音频数据时,则对所有抓取线程均进行填充静音处理,直到抓取线程能够读取录制的语音数据;

对填充静音处理后的所有抓取线程的每一路音频数据进行混音,。

作为一种实现方式,所述装置还包括:

设置单元,用于为每一抓取线程设置音频数据缓存队列,所述缓存队列用于缓存从抓取对象读取的预设数量帧的音频数据,当缓存队列存满且有新读取音频数据时,用新读取音频数据覆盖最早存储的音频数据。

根据本申请的第三方面,提供一种存储介质,其上存储由可执行程序,所述可执行程序被处理器执行时实现所述的多路音频数据录制混音方法的步骤。

本申请实施例提供的多路音频数据录制混音方法及装置、存储介质,通过对多路待录制音频源分别设置音频数据抓取线程,在进行录制语音数据混音时,根据抓取线程中缓存的音频数据的情况而进行相应的混音处理;当因为卡顿等原因导致某一路抓取线程未接收到音频数据时,对该路抓取线程进行填静音处理,然后再与其他抓取线程读取的音频数据进行混音。本申请实施例为用户提供了基于不同音频源进行音频录制并进行混音的方式,用户可以根据自身的需要对多个音频源进行音频数据录制并进行混音,从而提升了用户体验。

附图说明

图1为本申请实施例提供的多路音频数据录制混音方法流程示意图;

图2为本申请实施例提供的多路音频数据录制混音方法的示例示意图;

图3为本申请实施例提供的多路音频数据录制混音装置的组成结构示意图。

具体实施方式

以下结合示例,详细阐明本申请实施例的技术方案的实质。

图1为本申请实施例提供的多路音频数据录制混音方法流程示意图,如图1所示,本申请实施例的多路音频数据录制混音方法包括以下处理步骤:

步骤101,对至少两路音频数据源的抓取函数进行初始化,分别对应生成至少两个抓取对象。

本申请实施例中,用户可以根据自身的需要,选择两路以上的音频数据源进行录制。作为一种示例,两路以上的音频数据源可以是麦克风音频数据以及系统声音数据。本申请实施例中,如在windows平台下,使用wasapi(windowsaudiosessionapi)相关接口来创建并初始化相关音频设备,本申请实施例将依次打开麦克风设备以及系统声音设备,此时有可能会产生某一路音频设备会存在打开延迟的情况。比如麦克风在时刻10:00:00秒打开了设备,而系统声音在时刻10:00:01打开了设备,此时声音数据就存在差异,后续需要对音频数据做对齐处理。

步骤102,为所述至少两个抓取对象分别创建抓取线程,每一抓取线程分别读取与该抓取线程对应的抓取对象抓取的实时音频数据。

本申请实施例中,还要为抓取对象设置抓取线程,以对抓取对象抓取的音频数据进行缓存,以便进行音频数据混音。具体地,为每一抓取线程设置音频数据缓存队列,所述缓存队列用于缓存从抓取对象读取的预设数量帧的音频数据,当缓存队列存满且有新读取音频数据时,用新读取音频数据覆盖最早存储的音频数据。

本申请实施例中,在创建至少两路音频数据源的抓取对象后,对应每一路音频数据源的抓取对象,都创建一个音频数据抓取线程“capturethread”,每一抓取线程“capturethread”创建后,会不断读取音频数据源设备的实时音频数据并拷贝至内存中,以便后续对录制的音频数据做处理。

本申请实施例中,为每一路“capturethread”都会设置对应的一个缓存队列,该缓存队列用来存放上次读到的音频数据,以备后续抓取线程使用。

步骤103,获取每一抓取线程读取的音频数据,对所获取的各路音频数据进行混音,生成混音数据。

本申请实施例中,所述获取每一抓取线程读取的音频数据,对所获取的各路音频数据进行混音,包括:

确定从每一抓取线程均读取了音频数据,判断每一路音频数据的时间戳是否匹配,将时间戳匹配的每一路音频数据进行混音。

或者,确定抓取线程中至少一路抓取线程还未读取录制的音频数据时,对未读取音频数据的至少一路抓取线程进行填静音处理,再与其他路抓取线程读取的当前音频数据进行混音。

或者,确定抓取线程中所有抓取线程均未获取音频数据时,则对所有抓取线程均进行填充静音处理,直到抓取线程能够读取录制的语音数据;

对填充静音处理后的所有抓取线程的每一路音频数据进行混音。

本申请实施例中,当音频数据录制的“capturethread”都创建完成之后,本申请实施例随即创建一个名为“mixthread”的线程,该“mixthread”线程负责从之前创建的所有“capturethread”中的音频数据缓存队列中读取音频数据,此时读取音频数据会有多种情况:

情况1:如果在某一时刻从多个“capturethread”中都读取到了正常的音频数据,并且音频数据的时间戳匹配,则将多路音频数据进行混音操作,并在“capturethread”的缓存队列中删除之前读取出的音频数据。

情况2:如果在某一时刻从多个“capturethread”中只读到了其中一些路的音频数据,另外一些路的音频数据还未接收到内容时。多路音频数据先后打开的情况下,为了保障声音不丢失并且同步,需要对另外一些未能读取到声音数据的线程进行填静音处理,如麦克风在10:00:00打开了设备,而系统声音在10:00:01秒打开了设备,此时缓存队列会多出10:00:00-10:00:01的麦克风声音数据,所以此时需要在这段时间段内对系统声音数据作填静音处理,再进行混音操作。

情况3:当设备在某一时刻发生异常时,可能导致麦克风以及系统声音都无法正常获得数据,从而多路音频的缓存队列都为空的情况下,此时需要进行特殊处理,全部线程进行填充静音处理,然后再对多路线程读取到的音频数据进行混音,后续音频数据设备恢复正常后继续进行混音操作。

本申请实施例的多路音频数据录制混音方法包括:

音源设备创建:根据用户的选择来创建对应的音频数据源。

声音数据获取:打开音频设备数据源后,开始不断抓取音频数据。

声音数据队列缓存:将上一步抓取的音频数据缓存到本地。

声音数据混音同步:将多路音频数据从缓存队列中取出并进行实时混音操作。

下面结合具体示例,对本申请实施例作进一步详细说明。

图2为本申请实施例提供的多路音频数据录制混音方法的流程示意图,如图2所示,本申请实施例的多路音频数据录制混音方法,具体步骤如下:

首先程序会去初始化音频设备。本申请实施例以同时捕获麦克风数据以及系统声音数据,并进行混音的示例进行说明。在windows平台下,使用wasapi相关接口来创建并初始化相关音频设备,并依次打开麦克风设备以及系统声音设备,此时有可能会产生某一路设备会存在打开延迟的情况。比如麦克风在10:00:00打开了设备,而系统声音在10:00:01秒打开了设备,此时声音数据就存在差异,后续需要对声音做对齐处理。

创建好音频数据源设备之后,每对应一路音频数据源设备,都会创建一个音频抓取线程“capturethread”,每一路“capturethread”在创建后,会不断读取音频数据源设备的实时音频数据,并拷贝至内存中,以便后续对所读取的音频数据做处理。

本申请实施例中,为每一路“capturethread”都设置有对应的一个缓存队列,该缓存队列用来存放上次读到的音频数据,以备后续线程使用。

当“capturethread”都创建完成之后,本申请实施例会随即创建一个名为“mixthread”的线程,该“mixthread”线程负责从之前创建的所有“capturethread”中的音频数据缓存队列中读取音频数据,此时针对所读取的音频数据,会有多种情况,如下:

情况1:如果在某一时刻从多个“capturethread”中都读取到了正常的数据,并且时间戳匹配,则将这两路数据进行混音操作,并在“capturethread”的缓存队列中删除所取出的音频数据。

情况2:如果在某一时刻从多个“capturethread”中只读到了其中一路的数据,另外一路数据还没有内容时。在两路声音数据源先后打开的情况下,会出现此种情况,此时为了保障声音数据不丢失并且同步,需要对另外一路声音做填静音处理,如麦克风在10:00:00打开了设备,而系统声音在10:00:01打开了设备,此时缓存队列会多出10:00:00-10:00:01的麦克风声音数据,所以此时需要在这段时间段内对系统声音数据作填静音处理,再进行混音操作。

情况3:当音频数据源设备在某一时刻发生异常时,可能导致麦克风以及系统声音都无法正常获得数据,从而两路音频数据源的缓存队列均为空的情况下,此时需要作特殊处理,对两路线程的缓存队列全部填充静音包,再继续后续操作即进行混音,后续当音频数据源设备恢复正常后,继续进行前述的两路线程的混音处理。

本申请实施例为用户提供了基于不同音频源进行音频录制并进行混音的方式,用户可以根据自身的需要对多个音频源进行音频数据录制并进行混音,从而提升了用户体验。

图3为本申请实施例提供的多路音频数据录制混音装置的组成结构示意图,如图3所示,本申请实施例的多路音频数据录制混音装置包括:

生成单元30,用于对至少两路音频数据源的抓取函数进行初始化,分别对应生成至少两个抓取对象;

创建单元31,用于为所述至少两个抓取对象分别创建抓取线程,每一抓取线程分别读取与该抓取线程对应的抓取对象抓取的实时音频数据;

混音单元32,用于获取每一抓取线程读取的音频数据,对所获取的各路音频数据进行混音,生成混音数据。

作为一种实现方式,所述混音单元32,还用于:

确定从每一抓取线程均读取了音频数据,判断每一路音频数据的时间戳是否匹配,将时间戳匹配的每一路音频数据进行混音。

作为一种实现方式,所述混音单元32,还用于:

确定抓取线程中至少一路抓取线程还未读取录制的音频数据时,对未读取音频数据的至少一路抓取线程进行填静音处理,再与其他路抓取线程读取的当前音频数据进行混音。

作为一种实现方式,所述混音单元32,还用于:

确定抓取线程中所有抓取线程均未获取音频数据时,则对所有抓取线程均进行填充静音处理,直到抓取线程能够读取录制的语音数据;

对填充静音处理后的所有抓取线程的每一路音频数据进行混音,。

作为一种实现方式,在图3所示的多路音频数据录制混音装置的基础上,本申请实施例的多路音频数据录制混音装置还包括:

设置单元(图3未示出),用于为每一抓取线程设置音频数据缓存队列,所述缓存队列用于缓存从抓取对象读取的预设数量帧的音频数据,当缓存队列存满且有新读取音频数据时,用新读取音频数据覆盖最早存储的音频数据。

在示例性实施例中,本申请实施例的多路音频数据录制混音装置的上述各处理单元可以被一个或多个中央处理器(cpu,centralprocessingunit)、图形处理器(gpu,graphicsprocessingunit)、基带处理器(bp,baseprocessor)、应用专用集成电路(asic,applicationspecificintegratedcircuit)、dsp、可编程逻辑器件(pld,programmablelogicdevice)、复杂可编程逻辑器件(cpld,complexprogrammablelogicdevice)、现场可编程门阵列(fpga,field-programmablegatearray)、通用处理器、控制器、微控制器(mcu,microcontrollerunit)、微处理器(microprocessor)、或其他电子元件实现。

在本公开实施例中,图3示出的多路音频数据录制混音装置中各个处理单元执行操作的具体方式已经在有关该方法的实施例中进行了详细描述,此处将不做详细阐述说明。

本申请实施例还记载了一种存储介质,其上存储由可执行程序,所述可执行程序被处理器执行时,执行以下步骤:

对至少两路音频数据源的抓取函数进行初始化,分别对应生成至少两个抓取对象;

为所述至少两个抓取对象分别创建抓取线程,每一抓取线程分别读取与该抓取线程对应的抓取对象抓取的实时音频数据;

获取每一抓取线程读取的音频数据,对所获取的各路音频数据进行混音,生成混音数据。

可选的,所述获取每一抓取线程读取的音频数据,对所获取的各路音频数据进行混音,包括:

确定从每一抓取线程均读取了音频数据,判断每一路音频数据的时间戳是否匹配,将时间戳匹配的每一路音频数据进行混音。

可选的,所述获取每一抓取线程读取的音频数据,对所获取的各路音频数据进行混音,包括:

确定抓取线程中至少一路抓取线程还未读取录制的音频数据时,对未读取音频数据的至少一路抓取线程进行填静音处理,再与其他路抓取线程读取的当前音频数据进行混音。

可选的,所述获取每一抓取线程读取的音频数据,对所获取的各路音频数据进行混音,包括:

确定抓取线程中所有抓取线程均未获取音频数据时,则对所有抓取线程均进行填充静音处理,直到抓取线程能够读取录制的语音数据;

对填充静音处理后的所有抓取线程的每一路音频数据进行混音,。

可选的,所述方法还包括:

为每一抓取线程设置音频数据缓存队列,所述缓存队列用于缓存从抓取对象读取的预设数量帧的音频数据,当缓存队列存满且有新读取音频数据时,用新读取音频数据覆盖最早存储的音频数据。

本申请实施例为用户提供了基于不同音频源进行音频录制并进行混音的方式,用户可以根据自身的需要对多个音频源进行音频数据录制并进行混音,从而提升了用户体验。

应理解,说明书通篇中提到的“一个实施例”或“一实施例”意味着与实施例有关的特定特征、结构或特性包括在本发明的至少一个实施例中。因此,在整个说明书各处出现的“在一个实施例中”或“在实施例中”未必一定指相同的实施例。此外,这些特定的特征、结构或特性可以任意适合的方式结合在一个或多个实施例中。应理解,在本发明的各种实施例中,上述各过程的序号的大小并不意味着执行顺序的先后,各过程的执行顺序应以其功能和内在逻辑确定,而不应对本发明实施例的实施过程构成任何限定。上述本发明实施例序号仅仅为了描述,不代表实施例的优劣。

需要说明的是,在本文中,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、物品或者装置不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、物品或者装置所固有的要素。在没有更多限制的情况下,由语句“包括一个……”限定的要素,并不排除在包括该要素的过程、方法、物品或者装置中还存在另外的相同要素。

在本申请所提供的几个实施例中,应该理解到,所揭露的设备和方法,可以通过其它的方式实现。以上所描述的设备实施例仅是示意性的,例如,所述单元的划分,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式,如:多个单元或组件可以结合,或可以集成到另一个系统,或一些特征可以忽略,或不执行。另外,所显示或讨论的各组成部分相互之间的耦合、或直接耦合、或通信连接可以是通过一些接口,设备或单元的间接耦合或通信连接,可以是电性的、机械的或其它形式的。

上述作为分离部件说明的单元可以是、或也可以不是物理上分开的,作为单元显示的部件可以是、或也可以不是物理单元;既可以位于一个地方,也可以分布到多个网络单元上;可以根据实际的需要选择其中的部分或全部单元来实现本实施例方案的目的。

另外,在本发明各实施例中的各功能单元可以全部集成在一个处理单元中,也可以是各单元分别单独作为一个单元,也可以两个或两个以上单元集成在一个单元中;上述集成的单元既可以采用硬件的形式实现,也可以采用硬件加软件功能单元的形式实现。

以上所述,仅为本发明的实施方式,但本发明的保护范围并不局限于此,任何熟悉本技术领域的技术人员在本发明揭露的技术范围内,可轻易想到变化或替换,都应涵盖在本发明的保护范围之内。因此,本发明的保护范围应以所述权利要求的保护范围为准。

再多了解一些

本文用于企业家、创业者技术爱好者查询,结果仅供参考。

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

相关文章

  • 日榜
  • 周榜
  • 月榜