异构系统音频数据交互处理方法、装置及存储介质与流程

    专利查询2022-07-07  164



    1.本发明涉及计算机技术领域,特别涉及一种异构系统音频数据交互处理方法、装置及存储介质。


    背景技术:

    2.目前部分soc芯片设计将外挂dsp芯片集成进同一颗ic中,共用系统总线和内存,这样无需外挂dsp芯片,节省面积和成本,同时放开了soc算力。
    3.目前大部分将集成的dsp只是用于做算力提升,只做了数据的处理,在dsp系统域没有集成codec的adc和dac,以及没有其它数字音频接口来实现播放和录音。


    技术实现要素:

    4.本发明旨在至少解决现有技术中存在的技术问题之一。为此,本发明提出一种异构系统音频数据交互处理方法,能够提高数据的传输效率。
    5.本发明实施例一方面提供一种异构系统音频数据交互处理方法,包括以下步骤:基于alsa音频框架,为linux系统和freertos系统设置核间通信软件接口;所述freertos系统的dsp处理器集成音频外设,并在所述dsp处理器和所述linux系统的arm处理器间设置核间通信硬件接口;设置一个数据结构,所述数据结构包括通信码和数据结构对象共享内存地址;所述通信码用于识别数据结构对象结构,所述数据结构对象包括音频数据参数信息和数据地址;基于所述核间通信软件接口和所述核间通信硬件接口,所述arm处理器与所述dsp处理器进行音频数据交互处理,所述音频数据交互处理包括通过所述数据结构实现所述arm处理器与所述dsp处理器的通信。
    6.根据本发明的一些实施例,所述arm处理器与所述dsp处理器进行音频数据交互处理包括:所述arm处理器将指令及所述数据结构写入共享缓存区,给指定dsp处理器发送中断通知,所述arm处理器上运行的线程进入休眠;所述dsp处理器接收所述中断通知,读取所述共享缓存区的数据并解析所述指令,并根据所述指令执行相应的处理;所述dsp处理器完成所述指令并向所述arm处理器返回所述数据结构。
    7.根据本发明的一些实施例,所述为linux系统和freertos系统设置核间通信软件接口包括:对所述alsa音频框架进行适配,包括:将所述alsa音频框架中dma传递pcm数据的接口,修改为异构跨核接口;在所述linux系统和所述freertos系统中都添加通信框架,实现所述arm处理器与所述dsp处理器之间的通信功能。
    8.根据本发明的一些实施例,所述方法还包括:所述freertos系统对接所述alsa框架实现dsp音频驱动,具体包括:在所述linux系统的内核态,所述alsa音频框架对接音频声卡驱动,所述音频声卡驱动由异构跨核接口实现,所述异构跨核接口用于与dsp处理器端的音频信息服务通信;所述音频信息服务用于解析通信内容,并操作所述音频外设进行录音和/或播放。
    9.根据本发明的一些实施例,所述arm处理器与所述dsp处理器进行音频数据交互处
    理包括:打开音频播放设备并设置参数;所述linux系统写数据到共享内存,所述dsp处理器的音频服务接收到所述共享内存的地址,根据通信指令码调用相关任务接口对所述数据进行处理,然后启动音频设备输出,将所述数据传送到音频播放设备;所述linux系统写数据到共享内存,等待所述dsp处理器处理音频数据完毕并通过中断通知所述linux系统;所述linux系统继续发送所述共享内存的地址给所述dsp处理器。
    10.根据本发明的一些实施例,所述arm处理器与所述dsp处理器进行音频数据交互处理包括:打开音频输入设备并设置参数;所述linux系统发送共享内存的地址给到所述dsp处理器的音频服务,并等待所述音频服务通知;所述音频服务接收到所述共享内存的地址后依据通信指令码再调用相关任务的接口启动设备输入,将输入的数据按照组件顺序一一处理,处理之后写数据到所述共享内存,然后发送信息通知所述linux系统;当所述linux系统读一笔数据后会发送空数据的共享内存的地址给所述dsp处理器的音频服务,等待所述dsp处理器填充完毕,当所述dsp处理器写满一笔数据量后,通过中断通知所述linux系统,更新数据状态,linux继续发送空数据的共享内存地址给所述dsp处理器的音频服务,然后更新内核缓存的数据并等待所述dsp处理器的音频服务通知。
    11.本发明实施例的异构系统音频数据交互处理方法至少具有以下有益效果:针对音频播放流,arm处理器写好命令并通知dsp处理器,在dsp处理器处理完毕就可以直接输出,无需回传arm处理器再输出。针对录音流,在dsp端获取处理完后再回传给arm处理器,无需先经过arm处理器获取后再给dsp处理完后回传给arm处理器。这样减少了中间环节,提高了数据的传输效率,针对linux音频的pcm数据的应程序来说只需要增加初始化设置即可开启功能,无需额外的数据操作适配,沿用以前的alsa库即可使用,简化了应用的运行时操作。
    12.本发明实施例另一方面提供一种异构系统音频数据交互处理装置,包括:第一模块,用于基于alsa音频框架,为linux系统和freertos系统设置核间通信软件接口;第二模块,用于为所述freertos系统的dsp处理器集成音频外设,并在所述dsp处理器和所述linux系统的arm处理器间设置核间通信硬件接口;第三模块,用于设置一个数据结构,所述数据结构包括通信码和数据结构对象共享内存地址;所述通信码用于识别数据结构对象结构,所述数据结构对象包括音频数据参数信息和数据地址;第四模块,用于基于所述核间通信软件接口和所述核间通信硬件接口,所述arm处理器与所述dsp处理器进行音频数据交互处理,所述音频数据交互处理包括通过所述数据结构实现所述arm处理器与所述dsp处理器的通信。
    13.本发明实施例另一方面提供计算机可读存储介质,其上存储有计算机程序,所述计算机程序被处理器执行时实现前文所述的异构系统音频数据交互处理方法。
    14.本发明的附加方面和优点将在下面的描述中部分给出,部分将从下面的描述中变得明显,或通过本发明的实践了解到。
    附图说明
    15.本发明的上述和/或附加的方面和优点从结合下面附图对实施例的描述中将变得明显和容易理解,其中:
    16.图1为相关技术中异构系统处理音频数据的方法的流程示意图;
    17.图2为本发明实施例的方法的流程示意图;
    18.图3为本发明实施例的alsa音频框架示意图;
    19.图4为本发明实施例的alsa框架实现dsp域音频驱动的示意图;
    20.图5为本发明实施例的音频播放流的数据流图;
    21.图6为本发明实施例的音频录音流的数据流图;
    22.图7为本发明实施例的音频算法组件示意图;
    23.图8为本发明实施例的装置的模块示意框图。
    具体实施方式
    24.下面详细描述本发明的实施例,所述实施例的示例在附图中示出,其中自始至终相同或类似的标号表示相同或类似的元件或具有相同或类似功能的元件。下面通过参考附图描述的实施例是示例性的,仅用于解释本发明,而不能理解为对本发明的限制。
    25.在本发明的描述中,若干的含义是一个或者多个,多个的含义是两个及两个以上,大于、小于、超过等理解为不包括本数,以上、以下、以内等理解为包括本数。如果有描述到第一、第二只是用于区分技术特征为目的,而不能理解为指示或暗示相对重要性或者隐含指明所指示的技术特征的数量或者隐含指明所指示的技术特征的先后关系。
    26.alsa是advanced linux sound architecture的缩写,即高级linux声音架构,在linux操作系统上提供了对音频和midi的支持。在linux 2.6的内核版本后,alsa目前已经成为了linux的主流音频体系结构。除了alsa-driver,alsa包含在用户空间的alsa-lib函数库,具有更加友好的编程接口,并且完全兼容于oss,开发者可以通过这些高级api使用驱动,不必直接与内核驱动api进行交互。
    27.user空间:主要由alsa libray api对应用程序提供统一的api接口,各个app应用程序只要调用alsa-lib提供的api接口来实现放音、录音、控制。现在提供了两套基本的库,tinyalsa是一个简化的alsa-lib库,现在android的系统中主要使用它。
    28.alsa core:alsa核心层,向上提供逻辑设备(pcm/ctl/midi/timer/

    )系统调用,向下驱动硬件设备(machine/i2s/dma/codec)。
    29.asoc core:是alsa的标准框架,是alsa-driver的核心部分,提供了各种音频设备驱动的通用方法和数据结构,为audio driver提供alsa driver api。
    30.hardware driver:音频硬件设备驱动,由三大部分组成,分别是machine、platform、codec,提供的alsa driver api和相应音频设备的初始化及工作流程,实现具体的功能组件,这也是驱动开发人员需要具体实现的部分。
    31.rpmsg,全称remote processor messaging,它定义了异构多核处理系统(amp,asymmetric multiprocessing)中核与核之间进行通信时所使用的标准二进制接口。
    32.参照图1,目前相关技术中异构系统处理音频数据的方法如下。
    33.播放通路的整体思路:
    34.linux系统应用将获取的数据通过dsp音频框架调用hifi driver驱动送至共享内存,经过mailbox(邮箱)给到dsp系统,dsp对共享内存做相应数据处理,如解码/eq/混响/环绕音,然后通知linux端在共享内存中将数据取回,应用取回后再通过alsa-lib/tinyalsa库接口调用驱动来播放音频。
    35.录音通路的整体思路:
    36.linux系统应用将通过alsa-lib/tinyalsa库接口调用驱动来录制音频,获取的pcm数据通过dsp音频框架调用hifi driver驱动送至共享内存,经过mailbox给到dsp系统,dsp对共享内存做相应数据处理,如ns/agc/aec,然后通知linux端应用将数据取回。
    37.现有的技术方案是通路上消耗的时长会比较大,现有的技术方案应用只是有用于加速数学运算,提高算法运算速度,ic上并没有连接音频外设。本发明依赖的ic方案上由于连接了外设,那么dsp上可以直接获取数据源,减去了通路上的环节,降低音频录音和播放的延时。
    38.现有的技术方案为,针对录音的音频流,arm核控制音频外设,获得语音数据,然后将音频数据发给dsp核,dsp核做语音前处理,处理之后再返回给arm核,arm核将语音数据保存或者发给云端做识别。针对播放的音频流,arm核发数据给dsp解码为pcm数据并做语音后处理音效,然后返回数据给arm核,arm核将数据传给音频外设,输出音频。
    39.本发明要解决的技术问题是在异构系统中实现音频pcm数据交互处理,并提供了linux(arm) freertos(dsp)异构系统中一种音频系统信息交互的方法,提供一种linux和freertos系统收发音频数据,freertos系统处理音频数据的软件方法,配合上述音频系统信息交互的方法来实现linux(arm)控制freertos(dsp)播放和录音,以及音频控制操作。提供了用于处理音频pcm数据的算法组件机制,可接入第三方语音前、后处理的算法,音频编解码等功能。
    40.本发明需要涉及的技术应用背景有如下:
    41.(1)dsp硬件系统包含音频输入和输出设备;
    42.(2)arm核上的硬件系统和dsp核上的硬件系统之间有消息通信机制实现;
    43.(3)功能应用需要实现音频pcm数据的播放和录音以及对音频数据做算法处理。
    44.本发明在软件系统方面需要适配一套远程处理消息通信的软件框架,对于linux系统已有rpmsg框架,软件驱动实现对接框架即可供其它运行在linux系统上的软件使用;对于freertos系统对应实现一套驱动,供其它运行在freertos系统上的软件使用。其交互设计主要包括以下两种:
    45.(1)异构系统音频消息交互设计主要包括了对共享内存的交互使用和传递信息的数据结构设计;
    46.(2)音频播放和录音流控制设计主要包括了音频流控需要的数据结构设计,linux端的alsa驱动适配设计和rtos系统端的消息收发处理音频流流程设计。
    47.本发明实施例是在arm处理器(android/linux系统),将数据结构包括指令写入共享缓冲区,然后给指定dsp处理器(freertos系统)发送中断通知,arm处理器上运行的线程进入休眠并等待dsp处理器的中断通知来唤醒本线程。dsp处理器接收中断后读取共享缓冲区数据并解析指令,然后dsp处理器完成所述命令功能,完成功能后给arm处理器返回原有的数据结构信息,arm处理器接收中断后,调用的线程退出等待并进行下一步操作。
    48.一方面本发明的dsp处理器使用多任务系统,不同消息由不同任务分别管理,那么linux可以一个线程对应一个流处理命令来实现多个音频流并行处理不同消息和数据,最大效率提高dsp的使用率。应用上只需按需创建对应任务线程处理,无需在linux端做对dsp的调度的相关处理。
    49.另外一方面本发明针对音频播放流,arm处理器写好命令并通知dsp处理器,在dsp
    driver,相关指令在dsp端有实现。
    59.linux端alsa标准音频框架的适配,主要涉及下面几个部分:
    60.1.alsacore:
    61.修改alsa原生接口,添加dsp和arm之间的跨核接口。
    62.2.audio dsp framework:
    63.dsp和arm之间通信的主要框架,实现了两个异构核之间的命令交互、数据传递等功能。
    64.相比于传统alsa音频驱动,本发明实施例将dma传递pcm数据的接口,替换为异构跨核接口,另外在linux/dsp系统中都添加audio dsp framework,实现异构核之间的通信功能。
    65.参照如4,本发明实施例实现对接alsa框架实现dsp域音频驱动,该驱动根据配置将dsp的音频设备注册为声卡。图4左侧表示linux系统,右侧表示dsp的freertos系统。左上角表示用户态,应用层可以使用标准的alsa-lib接口访问声卡,无需作定制化的修改,方便客户使用。左下角是linux内核态,alsa框架下对接了音频声卡驱动,实现dsp域的音频驱动,而该驱动会由rpmsg(跨核接口)实现,它可以和dsp端的audiomsg服务(图4右侧)进行通信,该服务解析得到通信内容后,可以操作硬件设备,进行录音、播放等功能。该设计下,完成了从linux端发起的录音、播放请求,dsp端执行录音、播放动作整套流程。
    66.在一些实施例中,通信结构设计如下:核间通信数据包数据包含两个,一个是32位整型通信码,一个是32位的物理地址(该物理地址内存无需系统预分配出来,而是用时分配)。通信码分三类,这样分别对应了dsp和arm上系统的音频处理对象类型,加上共享内存的数据(包括音频流参数和音频数据)则方便两个系统都可以准确访问相应共享的数据。
    67.参照图5,本发明实施例实现音频流控制系统设计。如图5所示为先从linux用户态将pcm数据拷贝到内核态的缓存中,内核驱动将缓存的地址发给dsp,dsp接收后一一按组件顺序处理缓存中的数据,处理之后将数据传给dsp的音频驱动,将从dac输出到喇叭。以下为运行时的机制。
    68.针对播放流:
    69.1)打开音频输出流。会打开需要的音频设备,并设置参数。参数包括声卡设备,音频通道,采样率,缓冲buffer大小等格式。
    70.2)传输播放流:
    71.linux写数据到共享内存(通过dma接口分配到一个连续内存),dsp的audioserver接收到共享内存的物理地址后依据通信指令码再调用相关任务的接口一一处理数据,然后启动设备输出,送入数据给到设备。
    72.当linux写满数据,等待dsp的音频系统消耗完毕,当dsp的音频系统消耗一个period数据量完成后,通过msgbox的中断通知linux系统,更新数据状态,继续发送数据地址给dsp,然后更新内核buffer的数据并等待dsp的audioserver通知。
    73.3)无数据输出时,关闭音频输出流。释放相关资源。
    74.参照图6,本发明实施例实现音频录音。如图6数据流图所示为先从dsp的音频声卡的adc中获取数据,并按照组件顺序一一处理,然后将pcm数据拷贝到共享内存中,dsp的audioserver将通过msgbox中断通知linux系统,然后更新状态,linux用户态程序获得录音
    的数据。以下为运行时的机制。
    75.针对录音流:
    76.1)打开音频输入流。会打开需要的音频设备,并设置参数。参数包括声卡设备,音频通道,采样率,缓冲buffer等格式。
    77.2)传输播放流:
    78.linux发送共享数据地址(通过dma接口分配到一个连续内存)给到dsp的audioserver并等待dsp的audioserver通知。dsp的audioserver接收到共享内存的物理地址后依据通信指令码再调用相关任务的接口启动设备输入,将输入的数据按照组件顺序一一处理,处理之后写数据到共享内存,然后发送msgbox信息通知linux。
    79.当linux读一笔数据后会发送空数据的共享内存地址给dsp的audioserver,等待dsp系统填充完毕,当dsp写满一个period数据量完成后,通过msgbox的中断通知linux系统,更新数据状态,linux继续发送空数据的共享内存地址给dsp的audioserver,然后更新内核buffer的数据并等待dsp的audioserver通知。
    80.3)无需数输入时,linux主动关闭音频输入流。释放相关资源。
    81.在一些实施例中,本发明实施例还实现音频mixer控制设计。在linux系统端,适配的是alsa的mixer的常见的拓展get和put接口。应用层通过alsa的amixer或者tinyalsa的tinymix设置控件时,将调用到hifi驱动中的mixer部分,再通过msgbox来远程调用dsp的mixer任务中接口,来设置到dsp的rtos中的对应的驱动。设计上,所有声卡的mixer接口调用由一个mixer任务统一管理,同时该接口设计为同步接口。
    82.参照图7,本发明实施例实现音频算法组件设计。在用户空间(linux-app)中,提供了aw-rpaf-lib用于算法组件的配置,算法处理数据的获取等基础接口;而aw-rpaf-alsa插件是基于开源alsa-lib的音频插件,可以更加友好的配置音频流的算法信息;这些控制信息经过kernel的rpaf框架(包括component和alsa)传递到dsp上,当dsp在进行音频流的输入/输出(录音/播放)时,则会遍历执行这些算法,并把处理后数据回传到linux上。
    83.参照图8,本发明实施例的装置包括:第一模块,用于基于alsa音频框架,为linux系统和freertos系统设置核间通信软件接口;第二模块,用于为freertos系统的dsp处理器集成音频外设,并在dsp处理器和linux系统的arm处理器间设置核间通信硬件接口;第三模块,用于设置一个数据结构,数据结构包括通信码和数据结构对象共享内存地址;通信码用于识别数据结构对象结构,数据结构对象包括音频数据参数信息和数据地址;第四模块,用于基于核间通信软件接口和核间通信硬件接口,arm处理器与dsp处理器进行音频数据交互处理,音频数据交互处理包括通过数据结构实现arm处理器与dsp处理器的通信。
    84.尽管本文描述了具体实施方案,但是本领域中的普通技术人员将认识到,许多其它修改或另选的实施方案同样处于本公开的范围内。例如,结合特定设备或组件描述的功能和/或处理能力中的任一项可以由任何其它设备或部件来执行。另外,虽然已根据本公开的实施方案描述了各种例示性具体实施和架构,但是本领域中的普通技术人员将认识到,对本文所述的例示性具体实施和架构的许多其它修改也处于本公开的范围内。
    85.上面结合附图对本发明实施例作了详细说明,但是本发明不限于上述实施例,在所属技术领域普通技术人员所具备的知识范围内,还可以在不脱离本发明宗旨的前提下作出各种变化。
    转载请注明原文地址:https://tc.8miu.com/read-1239.html

    最新回复(0)