音频数据采集方法、装置、计算机设备及存储介质与流程

文档序号:21777796发布日期:2020-08-07 19:46阅读:326来源:国知局
音频数据采集方法、装置、计算机设备及存储介质与流程

本公开涉及语音识别技术领域,特别涉及一种音频数据采集方法、装置、计算机设备及存储介质。



背景技术:

随着人工智能的不断发展,语音交互成为了诸多人工智能领域中备受重视的领域,在实现语音交互的过程中,音频数据采集的准确性影响着后续语音识别等一系列步骤。

目前通过使用多个麦克风协作以获取多通路的音频数据后输入智能音频处理算法进行分析处理。在相关技术中,为满足远场交互场景下多通路的音频数据的采集需求,在采集传输多通路音频数据时,首先由多个麦克风获取到多通路的音频数据后,通过安卓系统(android)的hal层(hardwareabstractionlayer,硬件抽象层)对多通路的音频数据进行压缩后,经由android框架层原有的audio通路(音频通路)传至android应用层,由应用层对压缩后的多通路音频数据进行解压后供智能语音处理算法进行分析处理。

在上述相关技术中,需要在android系统的hal层对多通路的音频数据进行压缩处理,为实现上述过程,需要对android系统较为底层的hal层的系统源码进行更改,改动系统源码存在一定的技术门槛,不同的android系统需要进行单独适配,且需要对原生android系统进行更改,使得采集多通路音频数据的复杂程度较高,操作难度较大。



技术实现要素:

本公开提供一种音频数据采集方法、装置、计算机设备及存储介质。能够降低采集多通路音频数据的复杂程度和操作难度,所述技术方案如下:

根据本公开实施例的第一方面,提供了一种音频信号处理方法,所述方法包括:

获取多路音频数据,所述多路音频数据是通过多个麦克风获取的音频数据;

将所述多路音频数据输送到linux的音频管理系统;

通过应用层读取输送到所述linux的音频管理系统的所述多路音频数据;

调用jni将读取到的所述多路音频数据输入到所述应用层的java层。

在一种可能的实现方式中,所述获取多路音频数据,包括:

通过调用麦克风驱动驱动多个所述麦克风获取所述多路音频数据。

在一种可能的实现方式中,所述将所述多路音频数据输送到linux的音频管理系统,包括:

通过所述麦克风驱动将所述多路音频数据输送到linux的音频管理系统。

在一种可能的实现方式中,所述通过应用层读取输送到所述linux的音频管理系统的所述多路音频数据,包括:

通过所述应用层从所述linux的音频管理系统的虚拟的设备节点获取节点句柄,所述虚拟的设备节点是所述麦克风驱动的映射;

根据所述节点句柄以文件读写的方式读取输送到所述linux的音频管理系统的所述多路音频数据。

在一种可能的实现方式中,所述linux的音频管理系统为tinyalsa。

在一种可能的实现方式中,所述方法还包括:

通过设置所述linux的音频管理系统的参数对采集所述多路音频数据的参数进行调节;

其中,采集所述多路音频数据的参数包括:所述麦克风通道的数目,采样率,采样位深,采样节点等。

根据本公开实施例的第二方面,提供了一种音频数据采集装置,所述装置包括:

获取模块,用于获取多路音频数据,所述多路音频数据是通过多个麦克风获取的音频数据;

输送模块,用于将所述多路音频数据输送到linux的音频管理系统;

读取模块,用于通过应用层读取输送到所述linux的音频管理系统的所述多路音频数据;

输入模块,用于调用jni将读取到的所述多路音频数据输入到所述应用层的java层。

在一种可能的实现方式中,所述获取模块,用于通过调用麦克风驱动驱动多个所述麦克风获取所述多路音频数据。

在一种可能的实现方式中,所述输送模块,用于通过所述麦克风驱动将所述多路音频数据输送到linux的音频管理系统。

在一种可能的实现方式中,所述读取模块,包括:

获取子模块,用于通过所述应用层从所述linux的音频管理系统的虚拟的设备节点获取节点句柄,所述虚拟的设备节点是所述麦克风驱动的映射;

读取子模块,用于根据所述节点句柄以文件读写的方式读取输送到所述linux的音频管理系统的所述多路音频数据。

在一种可能的实现方式中,所述linux的音频管理系统为tinyalsa。

在一种可能的实现方式中,所述装置还包括:

调节模块,通过设置所述linux的音频管理系统的参数对采集所述多路音频数据的参数进行调节;

其中,采集所述多路音频数据的参数包括:所述麦克风通道的数目,采样率,采样位深,采样节点等。

根据本公开实施例的第三方面,提供了一种音频数据采集装置,所述装置包括:

处理器;

用于存储所述处理器的可执行指令的存储器;

其中,所述处理器被配置为:

获取多路音频数据,所述多路音频数据是通过多个麦克风获取的音频数据;

将所述多路音频数据输送到linux的音频管理系统;

通过应用层读取输送到所述linux的音频管理系统的所述多路音频数据;

调用jni将读取到的所述多路音频数据输入到所述应用层的java层。

根据本公开实施例的第四方面,提供一种设备,所述设备包含处理器和存储器,所述存储器中存储有至少一条指令、至少一段程序、代码集或指令集,所述至少一条指令、所述至少一段程序、所述代码集或指令集由所述处理器加载并执行以实现第一方面的任一可选方案所述的音频数据采集方法。

根据本公开实施例的第五方面,提供一种计算机可读存储介质,所述存储介质中存储有至少一条指令、至少一段程序、代码集或指令集,所述至少一条指令、所述至少一段程序、所述代码集或指令集由处理器加载并执行以实现第一方面的任一可选方案所述的音频数据采集方法。

本公开提供的技术方案可以包括以下有益效果:

通过获取多路音频数据;将所述多路音频数据输送到linux的音频管理系统;通过应用层读取输送到linux的音频管理系统的多路音频数据;调用jni将读取到的所述多路音频数据输入到应用层的java层。使得在多路音频数据采集的过程中,降低了采集多通路音频数据的复杂程度和操作难度,在满足远场语音交互场景的需求的同时,优化音频数据采集的过程。

应当理解的是,以上的一般描述和后文的细节描述仅是示例性的,并不能限制本公开。

附图说明

此处的附图被并入说明书中并构成本说明书的一部分,示出了符合本公开的实施例,并于说明书一起用于解释本公开的原理。

图1示出了本公开一个示例性实施例提供的终端的结构示意图;

图2示出了本公开一示例性实施例示出的android的系统架构示意图;

图3示出了本公开一示例性实施例示出的音频数据采集方法的流程图;

图4示出了本公开一示例性实施例示出的音频数据采集流程架构的示意图;

图5示出了本公开一示例性实施例示出的音频数据采集方法的流程图;

图6示出了本公开一示例性实施例示出的音频数据采集装置的方框图;

图7是根据一示例性实施例示出的计算机设备的结构框图;

图8是根据一示例性实施例示出的计算机设备的结构框图。

具体实施方式

这里将详细地对示例性实施例进行说明,其示例表示在附图中。下面的描述涉及附图时,除非另有表示,不同附图中的相同数字表示相同或相似的要素。以下示例性实施例中所描述的实施方式并不代表与本公开相一致的所有实施方式。相反,它们仅是与如所附权利要求书中所详述的、本公开的一些方面相一致的装置和方法的例子。

应当理解的是,在本文中提及的“若干个”是指一个或者多个,“多个”是指两个或两个以上。“和/或”,描述关联对象的关联关系,表示可以存在三种关系,例如,a和/或b,可以表示:单独存在a,同时存在a和b,单独存在b这三种情况。字符“/”一般表示前后关联对象是一种“或”的关系。

随着人工智能技术研究和进步,人工智能技术在多个领域展开研究和应用,例如常见的智能家居、智能穿戴设备、虚拟助理、智能音箱、智能营销、无人驾驶、自动驾驶、无人机、机器人、智能医疗、智能客服等,相信随着技术的发展,人工智能技术将在更多的领域得到应用,并发挥越来越重要的价值。

本公开涉及智能家居技术领域,特别涉及一种音频信号处理方法。

首先,对本公开涉及的一些名词进行解释。

1)人工智能(artificialintelligence,ai)

人工智能是利用数字计算机或者数字计算机控制的机器模拟、延伸和扩展人的智能,感知环境、获取知识并使用知识获得最佳结果的理论、方法、技术及应用系统。换句话说,人工智能是计算机科学的一个综合技术,它企图了解智能的实质,并生产出一种新的能以人类智能相似的方式做出反应的智能机器。人工智能也就是研究各种智能机器的设计原理与实现方法,使机器具有感知、推理与决策的功能。

人工智能技术是一门综合学科,涉及领域广泛,既有硬件层面的技术也有软件层面的技术。人工智能基础技术一般包括如传感器、专用人工智能芯片、云计算、分布式存储、大数据处理技术、操作/交互系统、机电一体化等技术。人工智能软件技术主要包括计算机视觉技术、语音处理技术、自然语言处理技术以及机器学习/深度学习等几大方向。

2)语音技术(speechtechnology)

语音技术的关键技术有自动语音识别技术(automaticspeechrecognition,asr)和语音合成技术(texttospeech,tts)以及声纹识别技术。让计算机能听、能看、能说、能感觉,是未来人机交互的发展方向,其中语音成为未来最被看好的人机交互方式之一。

3)android(安卓系统)

android是由google公司和开放手机联盟领导并开发的一种基于linux的自由且开放源代码的操作系统,主要使用于计算机设备中,该计算机设备可以是终端,比如智能手机,平板电脑,智能手表等等,也可以是具有语音交互功能的智能设备,比如智能音箱、智能电视、智能电视机顶盒、智能机器人等等。

请参考图1,其示出了本公开一个示例性实施例提供的终端的结构示意图。

如图1所示,该终端包括主板110、外部输出/输入设备120、存储器130、外部接口140、电容触控系统150以及电源160。

其中,主板110中集成有处理器和控制器等处理元件。

外部输出/输入设备120可以包括显示组件(比如显示屏)、声音播放组件(比如扬声器)、声音采集组件(比如麦克风)以及各类按键等。

存储器130中存储有程序代码和数据。

外部接口140可以包括耳机接口、充电接口以及数据接口等。

电容触控系统150可以集成在外部输出/输入设备120的显示组件或者按键中,电容触控系统150用于检测用户在显示组件或者按键上执行的触控操作。

电源160用于对终端中的其它各个部件进行供电。

android的系统架构采用分层的架构,可以分为四个层,请参考图2,其示出了本公开一示例性实施例示出的android的系统架构示意图,如图2所示,android的系统架构有高层到低层分别是应用程序层(application)210,应用程序框架层(applicationframework)220,系统运行库层(androidruntime)230以及linux内核层(libraries)240。其中:

应用程序层210,主要为系统中的应用程序,包含用java语言编写的运行在虚拟机上的程序,android会同一系列核心应用程序包一起发布,该应用程序包可以包括客户端,sms短消息程序,日历,地图,浏览器,联系人管理程序等。

应用程序框架层220中主要提供了构建应用程序时可能用到的各种api(applicationprogramminginterface,应用程序编程接口)。应用程序框架层可以说是一个应用程序的核心,是一个共同使用和遵守的约定,然后再这个约定上共同扩展,但程序保持主体结构的一致,其作用的是让程序保持清晰在满足不同需求的同时又不互相影响。

可以称framework层是java语言实现的层,在这层里定义的api都是用java语言编写。但其又包含了jni的方法,jni用c/c++编写接口,根据函数表查询调用核心库层里的底层方法,最终访问到linux内核。因此framework层的作用可以是:

1、用java语言编写一些规范化的模块封装成框架,供app层开发者调用开发出具有特殊业务的应用程序。

2、用javanativeinterface调用corelib层的本地方法,jni的库是在dalvik虚拟机启动时加载进去的,dalvik会直接去寻址jni方法,然后去调用。

系统运行库层230,android包含一些c/c++库,这些库能被android系统中不同的组件使用。它们通过android应用程序框架为开发者提供服务。比如,系统运行库中可以包含系统c库,媒体库,surfacemanager,libwebcore等等。

linux内核层240,这一层为android设备的各种硬件(如显示,音频,照相机,蓝牙,wifi,电源管理等等)提供了底层的驱动,比如增强显示驱动、键盘驱动、flash内存驱动、照相机驱动、音频驱动、蓝牙驱动、wifi(wirelessfidelity,无线上网)驱动、binderipc驱动、powermanagement(电源管理),包括硬件时钟,内存分配和共享,低内存管理,kernel调试,日志设备,androidipc机制等。

4)hal层(hardwareabstractionlayer,硬件抽象层)

hal主要用于处理不同平台之间的移植兼容性的问题,它可以将系统的其余部分表示为抽象的硬件设备,特别是去除了真正硬件所富含的瑕疵和特质。这些设备表现为操作系统的其它部分和设备可以使用的独立于机器的服务的形式(函数调用和宏)。通过使用hal服务和间接硬件寻址,当移植到新的硬件上时,驱动程序和核心只需做很少的改动。移植hal本身是直接的,因为所有的机器相关代码都集中在一个地方,并且移植的目标是充分定义的,即实现所有的hal服务。

5)alsa(advancedlinuxsoundarchitecture,高级linux声音体系)

alsa是为声卡提供驱动的linux内核组件,以替代原先的oss(开放声音系统),它在linux操作系统上提供了音频和midi(musicalinstrumentdigitalinterface,音乐设备数字化接口)的支持。

6)tinyalsa(tinyadvancedlinuxsoundarchitecture,精简版的高级linux声音体系)

tinyalsa是一个轻量级的库,其封装了内核的alsa接口,用于简化用户空间的alsa编程。

7)jni(javanativeinterface,java本地接口)

jni提供了若干的api,实现了java和其他语言的通信(在android里面主要是c和c++)。

java拥有跨平台的特性,而正是由于其跨平台的特性是的它和本地机器的各种内部联系变得很少,约束了它的功能。解决java对本地操作的一种方法就是jni。java通过jni调用本地方法,而本地方法是以库文件的形式存放的(在windows平台上是dll文件形式,在unix机器上是so文件形式)。通过调用本地的库文件的内部方法,使java可以实现和本地机器的紧密联系,调用系统级的各接口方法。

在语音交互场景中,远场和复杂场景的声音环境中往往存在干扰噪声,影响语音识别的准确度,为更加准确的识别有效音源,需要多个麦克风协作,以提供多位置的语音数据,相应的,装配有多个麦克风的终端获取到多通道的音频数据,并经由智能语音算法进行处理分析以获取多通道的音频数据中的信息,进而远场或复杂场景的语音交互。为了满足多路音频数据的采集需求,终端中传统的单路、双路数据采集已经无法满足当前的远场交互需求。

在相关技术中,终端通过android的hal层压缩多通道音频数据,android的应用层解压多通道音频数据,借用标准androidaudio通路,将数据流通过编解码的方式强行转换成标准通路适配的数据流以满足远场交互需求。该方法表现为,终端使用音频驱动通过麦克风采集到多通路的原始音频数据;改动android较为底层的hal层;将音频驱动采集到的多通路的原始音频数据输入hal层;hal层采用压缩算法,将多通路的原始音频数据压缩成两路;将压缩成两路的音频数据上传至android框架层,通过android框架层原有的audio通路上传至android应用层;android应用层获取到压缩成两路的音频数据后采用对应的解压算法,将压缩成两路的音频数据解压成原始的多通路音频数据,以供远场音频算法去作为原始资料进行处理。

为实现上述相关技术中的方法,开发人员需要对终端的android系统源代码进行修改,其工作量较大,且工作难度较大,具有较高的技术门槛;由于不同的终端中的android系统并不完全一致,因此需要针对各个android系统进行单独的代码适配,无法实现通用;在android系统开发过程中,需要多个团队协作开发,需要较长的开发周期和较高的集成成本;对于上述方法中的应用层而言,为实现解码的功能,需要进行额外的功能设置,使得应用程序复杂度增加;由于上述方法中,需要对原生android系统进行修改,可能会对系统的稳定性造成一定的影响,导致系统稳定性的下降。

为解决相关技术中的问题,本公开提供了一种音频数据采集方法,能够降低采集多通路音频数据的复杂程度和操作难度,在满足远场语音交互场景的需求的同时,优化音频数据采集的过程。请参考图3,其示出了本公开一示例性实施例示出的音频数据采集方法的流程图,该方法可以由计算机设备执行,该计算机设备可以是终端或者具有语音交互功能的智能设备,该终端可以实现为图1所示的终端,该方法包括:

步骤310,获取多路音频数据,该多路音频数据是计算机设备通过多个麦克风获取的音频数据。

其中,多个麦克风可以实现为麦克风组件,多路音频数据的通道个数可以的对应于麦克风组件中所包含的麦克风的个数,比如,若该麦克风组件所包含的麦克风的个数为4个,那么麦克风组件输入该计算机设备的声音即为4通道的声源信号,该声源信号可以是发布语音命令的对象所发出的声音信号。

当该语音交互设备中麦克风阵列在采集到环境中的声音后,会将其发送到麦克风驱动中,由麦克风驱动实现声音到声音信号转变,将声波转换为数字信号。由于输入该语音交互设备的声音为多通道的,那么麦克风驱动对该声音进行处理后,输出的声音信号也为多通道,即多路音频信号。

在android系统中,为android设备的各种硬件提供了底层驱动,其中包括麦克风驱动,也称声卡驱动。麦克风驱动是常用音频输出设备麦克风的专用驱动,使麦克风能够在电脑设备上发挥作用,输出流畅音频,保证音质效果。

步骤320,将多路音频数据输送到linux的音频管理系统。

由于android系统是基于linux的构建的系统,因此android系统中集成了linux的音频管理系统,其中,linux的音频管理系统实现在android系统运行库层。

步骤330,通过应用层读取输送到linux的音频管理系统的多路音频数据。

在本公开实施例中,应用层包括应用程序层和应用程序框架层。

在android系统中,应用层可以以非标准接口的方式对linux的音频管理系统中的数据文件进行调用,从而读取输送到linux的音频管理系统的多路音频数据。

步骤340,调用jni将读取到的多路音频数据输入到应用层的java层。

在android系统中,应用层中的应用程序一般是基于java语言进行编写的,而系统运行库层中所包含的库,是通过c语言或者c++语言进行搭建的,也就是说linux的音频管理系统是通过c语言或者c++语言进行搭建的,为实现应用程序层与linux的音频管理系统之间的调用过渡,可以通过jni实现两者之间的过渡,jni提供了若干的api,在android中实现了java和c和c++语言之间的互通。

因此计算机设备需要通过调用jni将应用层读取到的多路音频数据输入到应用层的java层(android的应用程序)中,以供android应用开发者使用。

请参考图4,其示出了本公开一示例性实施例示出的音频数据采集流程架构的示意图,如图4所示,jni和java层位于计算机设备android系统的应用层中,其中,应用层包含应用程序层和应用框架层,应用层可以将读取的多路音频数据通过调用jni输入到java中,以供android应用开发者使用,其他部分的说明可以参考上述说明,此处不再赘述。

在一种可能的实现方式中,该获取多路音频数据,包括:

通过调用麦克风驱动驱动多个麦克风获取多路音频数据。

在一种可能的实现方式中,将多路音频数据输送到linux的音频管理系统,包括:

通过麦克风驱动将多路音频数据输送到linux的音频管理系统。

在一种可能的实现方式中,通过应用层读取输送到linux的音频管理系统的多路音频数据,包括:

通过应用层从linux的音频管理系统的虚拟的设备节点获取节点句柄,该虚拟的设备节点是麦克风驱动的映射;

以文件读写的方式从节点句柄中读取多路音频数据。

在一种可能的实现方式中,linux的音频管理系统为tinyalsa。

在一种可能的实现方式中,该方法还包括:

通过设置linux的音频管理系统的参数对采集多路音频数据的参数进行调节;

其中,采集多路音频数据的参数包括:麦克风通道的数目,采样率,采样位深,采样节点等。

综上所述,本公开提供的音频数据采集方法,通过获取多路音频数据;将多路音频数据输送到linux的音频管理系统;通过应用层读取输送到linux的音频管理系统的多路音频数据;调用jni将读取到的多路音频数据输入到应用层的java层。使得在多路音频数据采集的过程中,降低了采集多通路音频数据的复杂程度和操作难度,在满足远场语音交互场景的需求的同时,优化音频数据采集的过程。

请参考图5,其示出了本公开一示例性实施例示出的音频数据采集方法的流程图,该方法可以由计算机设备执行,该计算机设备可以是终端或者具有语音交互功能的智能设备,该终端可以实现为图1所示的终端,该方法包括:

步骤510,通过调用麦克风驱动驱动多个麦克风获取多路音频数据。

驱动,即驱动程序,是硬件厂商根据操作系统编写的配置文件,其中包含有关硬件设备的信息,这些信息能够使计算机与相应的设备进行通信。驱动程序是添加到操作系统中的特殊程序,可以说没有驱动程序,计算机中的硬件就无法工作。

麦克风驱动即为是的计算机能够与麦克风进行通信的配置文件,计算机可以通过调用麦克风驱动,实现对麦克风组件的控制,以获取多路音频数据。

步骤520,通过麦克风驱动将多路音频数据输送到linux的音频管理系统。

在一种可能的实现方式中,该linux的音频管理系统为tinyalsa。

tinyalsa是一种基于alsa内核的用户层音频接口,集成在android系统中,可以以非标准接口的方式被应用层调用。

在一种可能的实现方式中,可以通过设置linux的音频管理系统的参数对采集多路音频数据的参数进行调节;

其中,采集多路音频数据的参数包括:麦克风通道的数目,采样率,采样位深,采样节点等。

也就是说,可以通过设置linux的音频管理系统的参数实现对多路音频数据采集方式的改变,比如,可以通过设置linux的音频管理系统的参数录制不同的通道数目的音频数据,调节采样率,调节采样位深以及更改采样节点等等以采集不同的音频数据。

步骤530,通过应用层从linux的音频管理系统的虚拟的设备节点获取节点句柄,该虚拟的设备节点是麦克风驱动的映射。

步骤540,根据节点句柄以文件读写的方式读取输送到linux的音频管理系统的多路音频数据。

设备节点被创建在/dev下,是连接内核与用户层的枢纽,相当于硬盘的inode,记录了硬件设备的位置和信息。在linux中,所有设备都以文件的形式存放在/dev目录下,都是通过文件的方式进行访问,设备节点是linux内核对设备的抽象,一个设备节点就是一个设备。应用程序通过一组标准化的调用执行访问设备,这些调用独立于任何特定的驱动程序。而驱动程序负责将这些标准化的调用映射到实际硬件的特有操作。

其中,虚拟的设备节点相当于一个映射,在本公开实施例中,相当于麦克风驱动的映射,通过这个虚拟的设备节点可以操作麦克风驱动本身,该虚拟的设备节点可以位于tinyalsa中。

节点句柄可以视为是该虚拟的设备节点的设备号或者名称,通过获取节点句柄即可以对应获取到需要操作的对象,比如,应用程序可以通过从tinyalsa的虚拟的设备节点中获取节点句柄,根据该节点句柄对应到麦克风驱动,从而可以实现通过对虚拟的设备节点操作麦克风驱动。

步骤550,调用jni将读取到的多路音频数据输入到应用层的java层。

其中,对步骤550的说明可以参考图3所示实施例中的相关说明,此处不再赘述。

综上所述,本公开提供的音频数据采集方法,通过获取多路音频数据;将多路音频数据输送到linux的音频管理系统;通过应用层读取输送到linux的音频管理系统的多路音频数据;调用jni将读取到的多路音频数据输入到应用层的java层。使得在多路音频数据采集的过程中,降低了采集多通路音频数据的复杂程度和操作难度,在满足远场语音交互场景的需求的同时,优化音频数据采集的过程。

请参考图6,其示出了本公开一示例性实施例示出的音频数据采集装置的方框图,该装置可以应用于计算机设备中,用以执行上述图3以及图4所示任一实施例的方法的全部或部分步骤,该计算机设备可以是终端或者具有语音交互功能的智能设备,该终端可以实现为图1所示的终端,该装置包括:

获取模块610,用于获取多路音频数据,该多路音频数据是计算机设备通过多个麦克风获取的音频数据;

输送模块620,用于将多路音频数据输送到linux的音频管理系统;

读取模块630,用于通过应用层读取输送到linux的音频管理系统的多路音频数据;

输入模块640,用于调用jni将读取到的多路音频数据输入到应用层的java层。

在一种可能的实现方式中,该获取模块610,用于通过调用麦克风驱动驱动多个麦克风获取多路音频数据。

在一种可能的实现方式中,该输送模块620,用于通过麦克风驱动将多路音频数据输送到linux的音频管理系统。

在一种可能的实现方式中,该读取模块630,包括:

获取子模块,用于通过应用层从linux的音频管理系统的虚拟的设备节点获取节点句柄,该虚拟的设备节点是麦克风驱动的映射;

读取子模块,用于根据节点句柄以文件读写的方式读取输送到linux的音频管理系统的多路音频数据。

在一种可能的实现方式中,该linux的音频管理系统为tinyalsa。

在一种可能的实现方式中,该装置还包括:

调节模块,通过设置linux的音频管理系统的参数对采集多路音频数据的参数进行调节;

其中,采集多路音频数据的参数包括:麦克风通道的数目,采样率,采样位深,采样节点等。

综上所述,本公开提供的音频数据采集装置,应用在计算机设备中,通过获取多路音频数据;将多路音频数据输送到linux的音频管理系统;通过应用层读取输送到linux的音频管理系统的多路音频数据;调用jni将读取到的多路音频数据输入到应用层的java层。使得在多路音频数据采集的过程中,降低了采集多通路音频数据的复杂程度和操作难度,在满足远场语音交互场景的需求的同时,优化音频数据采集的过程。

本公开一示例性实施例提供了一种音频信号处理装置,能够实现本公开上述图3以及图5所示任一实施例的方法的全部或部分步骤,该装置用于计算机设备中,该计算机设备可以是终端或者具有语音交互功能的智能设备,该终端可以实现为图1所示的终端,该装置可以包括:

处理器;

用于存储处理器的可执行指令的存储器;

其中,该处理器被配置为:

获取多路音频数据,该多路音频数据是计算机设备通过多个麦克风获取的音频数据;

将多路音频数据输送到linux的音频管理系统;

通过应用层读取输送到linux的音频管理系统的多路音频数据;

调用jni将读取到的多路音频数据输入到应用层的java层。

在一种可能的实现方式中,该获取多路音频数据,包括:

通过调用麦克风驱动驱动多个麦克风获取多路音频数据。

在一种可能的实现方式中,将多路音频数据输送到linux的音频管理系统,包括:

通过麦克风驱动将多路音频数据输送到linux的音频管理系统。

在一种可能的实现方式中,通过应用层读取输送到linux的音频管理系统的多路音频数据,包括:

通过应用层从linux的音频管理系统的虚拟的设备节点获取节点句柄,该虚拟的设备节点是麦克风驱动的映射;

以文件读写的方式从节点句柄中读取多路音频数据。

在一种可能的实现方式中,linux的音频管理系统为tinyalsa。

在一种可能的实现方式中,该方法还包括:

通过设置linux的音频管理系统的参数对采集多路音频数据的参数进行调节;

其中,采集多路音频数据的参数包括:麦克风通道的数目,采样率,采样位深,采样节点等。

综上所述,本公开提供的音频数据采集装置,应用在计算机设备中,通过获取多路音频数据;将多路音频数据输送到linux的音频管理系统;通过应用层读取输送到linux的音频管理系统的多路音频数据;调用jni将读取到的多路音频数据输入到应用层的java层。使得在多路音频数据采集的过程中,降低了采集多通路音频数据的复杂程度和操作难度,在满足远场语音交互场景的需求的同时,优化音频数据采集的过程。

图7是根据一示例性实施例示出的计算机设备700的结构框图。该计算机设备可以实现为本公开上述方案中的具有语音交互功能的智能设备。所述计算机设备700包括中央处理单元(centralprocessingunit,cpu)701、包括随机存取存储器(randomaccessmemory,ram)702和只读存储器(read-onlymemory,rom)703的系统存储器704,以及连接系统存储器704和中央处理单元701的系统总线705。所述计算机设备700还包括帮助计算机内的各个器件之间传输信息的基本输入/输出系统(input/output系统,i/o系统)706,和用于存储操作系统713、应用程序714和其他程序模块715的大容量存储设备707。

所述基本输入/输出系统706包括有用于显示信息的显示器708和用于用户输入信息的诸如鼠标、键盘之类的输入设备709。其中所述显示器708和输入设备709都通过连接到系统总线705的输入输出控制器710连接到中央处理单元701。所述基本输入/输出系统706还可以包括输入输出控制器710以用于接收和处理来自键盘、鼠标、或电子触控笔等多个其他设备的输入。类似地,输入输出控制器710还提供输出到显示屏、打印机或其他类型的输出设备。

所述大容量存储设备707通过连接到系统总线705的大容量存储控制器(未示出)连接到中央处理单元701。所述大容量存储设备707及其相关联的计算机可读介质为计算机设备700提供非易失性存储。也就是说,所述大容量存储设备707可以包括诸如硬盘或者只读光盘(compactdiscread-onlymemory,cd-rom)驱动器之类的计算机可读介质(未示出)。

不失一般性,所述计算机可读介质可以包括计算机存储介质和通信介质。计算机存储介质包括以用于存储诸如计算机可读指令、数据结构、程序模块或其他数据等信息的任何方法或技术实现的易失性和非易失性、可移动和不可移动介质。计算机存储介质包括ram、rom、可擦除可编程只读寄存器(erasableprogrammablereadonlymemory,eprom)、电子抹除式可复写只读存储器(electrically-erasableprogrammableread-onlymemory,eeprom)闪存或其他固态存储其技术,cd-rom、数字多功能光盘(digitalversatiledisc,dvd)或其他光学存储、磁带盒、磁带、磁盘存储或其他磁性存储设备。当然,本领域技术人员可知所述计算机存储介质不局限于上述几种。上述的系统存储器704和大容量存储设备707可以统称为存储器。

根据本公开的各种实施例,所述计算机设备700还可以通过诸如因特网等网络连接到网络上的远程计算机运行。也即计算机设备700可以通过连接在所述系统总线705上的网络接口单元711连接到网络712,或者说,也可以使用网络接口单元711来连接到其他类型的网络或远程计算机系统(未示出)。

所述存储器还包括一个或者一个以上的程序,所述一个或者一个以上程序存储于存储器中,中央处理器701通过执行该一个或一个以上程序来实现图3或图5所示的方法中,由语音交互设备执行的全部或者部分步骤。

本公开实施例还提供了一种计算机可读存储介质,用于储存为上述计算机设备所用的计算机软件指令,其包含用于执行上述音频信号处理方法所设计的程序。例如,该计算机可读存储介质可以是rom、ram、cd-rom、磁带、软盘和光数据存储设备等。

图8是根据一示例性实施例示出的计算机设备800的结构框图。该计算机设备可以实现为本公开上述方案中的终端。比如,该终端可以是如图1所示的终端。

通常,计算机设备800包括有:处理器801和存储器802。

处理器801可以包括一个或多个处理核心,比如4核心处理器、8核心处理器等。处理器801可以采用dsp(digitalsignalprocessing,数字信号处理)、fpga(field-programmablegatearray,现场可编程门阵列)、pla(programmablelogicarray,可编程逻辑阵列)中的至少一种硬件形式来实现。

存储器802可以包括一个或多个计算机可读存储介质,该计算机可读存储介质可以是非暂态的。存储器802还可包括高速随机存取存储器,以及非易失性存储器,比如一个或多个磁盘存储设备、闪存存储设备。在一些实施例中,存储器802中的非暂态的计算机可读存储介质用于存储至少一个指令,该至少一个指令用于被处理器801所执行以实现本公开中方法实施例提供的密钥验证方法。

在一些实施例中,电子设备800还可选包括有:外围设备接口803和至少一个外围设备。处理器801、存储器802和外围设备接口803之间可以通过总线或信号线相连。各个外围设备可以通过总线、信号线或电路板与外围设备接口803相连。具体地,外围设备包括:射频电路804、触摸显示屏805、摄像头806、音频电路807、定位组件808和电源809中的至少一种。

外围设备接口803可被用于将i/o(input/output,输入/输出)相关的至少一个外围设备连接到处理器801和存储器802。在一些实施例中,处理器801、存储器802和外围设备接口803被集成在同一芯片或电路板上;在一些其他实施例中,处理器801、存储器802和外围设备接口803中的任意一个或两个可以在单独的芯片或电路板上实现,本实施例对此不加以限定。

射频电路804用于接收和发射rf(radiofrequency,射频)信号,也称电磁信号。

在一些实施例中,电子设备800还包括有一个或多个传感器810。该一个或多个传感器810包括但不限于:加速度传感器811、陀螺仪传感器812、压力传感器813、指纹传感器814、光学传感器815以及接近传感器816。

本领域技术人员可以理解,图8中示出的结构并不构成对电子设备800的限定,可以包括比图示更多或更少的组件,或者组合某些组件,或者采用不同的组件布置。

所述存储器还包括一个或者一个以上的程序,所述一个或者一个以上程序存储于存储器中,中央处理器801通过执行该一个或一个以上程序来实现图3或图5所示的方法的全部或者部分步骤。

本公开实施例还提供了一种计算机可读存储介质,用于储存为上述计算机设备所用的计算机软件指令,该存储介质中存储有至少一条指令、至少一段程序、代码集或指令集,该至少一条指令、至少一段程序、代码集或指令集由处理器加载并执行以实现上述由计算机设备执行的音频数据采集方法。例如,该计算机可读存储介质可以是rom、随机存取存储器(randomaccessmemory,ram)、只读光盘(compactdiscread-onlymemory,cd-rom)、磁带、软盘和光数据存储设备等。

本公开实施例还提供了一种计算机可读存储介质,该存储介质中存储有至少一条指令、至少一段程序、代码集或指令集,所述至少一条指令、所述至少一段程序、所述代码集或指令集由所述处理器加载并执行以实现如上文介绍的音频数据采集方法中的全部或者部分步骤。

本领域技术人员在考虑说明书及实践这里公开的发明后,将容易想到本公开的其它实施方案。本公开旨在涵盖本公开的任何变型、用途或者适应性变化,这些变型、用途或者适应性变化遵循本公开的一般性原理并包括本公开未公开的本技术领域中的公知常识或惯用技术手段。说明书和实施例仅被视为示例性的,本公开的真正范围和精神由下面的权利要求指出。

应当理解的是,本公开并不局限于上面已经描述并在附图中示出的精确结构,并且可以在不脱离其范围进行各种修改和改变。本公开的范围仅由所附的权利要求来限制。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1