文档管理中心
您当前正在浏览新版开发者文档中心,目录分类和层级有所调整。点击左侧当前文档分类名称前的“☰”图标,可切换文档分类。 了解新版目录
指南与API参考指南媒体Audio Kit(音频服务)音频编创音频编创开发概述(C/C++)

音频编创开发概述(C/C++)

从API version 22开始,支持音频编创(OHAudioSuite)功能。音频编创是一款提供专业级音频效果处理的开发接口,旨在帮助开发者高效构建各种音频创作应用。该套件提供高品质、低延迟、智能化的音频处理能力,集成了降噪、均衡器、人声分离等丰富音效功能。开发者可以根据具体的应用场景,轻松地将所需音频功能集成到应用中。

音频编创主要包含引擎、管线和节点,具体介绍如下。

图1:音频编创实现原理图

引擎

OHAudioSuite中的引擎是一个统一管理音频管线、控制离线编辑(C/C++)和实时预览(C/C++)的对象,开发者可以根据自身的需求搭建音频处理链。调用方式如上图所示,由应用发起,先调用OHAudioSuite的接口依次创建引擎、管线、节点,再把创建的节点在管线内连接起来,用于传输PCM(Pulse Code Modulation)音频数据,使对应的效果节点实现音效处理能力。当管线停止时,开发者可以有限制地(具体规则请参考管线的使用规则)连接、断开和移除节点,通过调节节点编排实现复杂的音效处理。

引擎最多支持创建10条管线。在API版本26.0.0之前,实时预览管线最多创建1条;在API版本26.0.0及以后,不再对实时预览管线的数量做单独限制,但管线的总数仍不得超过10条。

节点

节点的介绍

节点是音频渲染的最小单元,根据节点功能提供对应的音效处理能力,节点本身无法单独调用,必须依附管线和引擎才能使用。

OHAudioSuite支持三种节点类型,分别是输入节点、输出节点、效果节点。

展开
节点类型 说明
输入节点 支持输入各种格式的PCM音频数据。
效果节点

提供音频效果处理功能。

当前支持的效果节点及详细说明请参考音频效果(C/C++)。

输出节点 支持设置输出音频的PCM格式。

节点完整类型详见OH_AudioNode_Type。

节点的作用

管线

管线是一个统一管理音频节点连接、配置的对象,支持两种工作模式,分别是离线编辑(C/C++)和实时预览(C/C++)。

管线的数据处理采用反向驱动机制。由OH_AudioSuiteEngine_RenderFrame()或者OH_AudioSuiteEngine_MultiRenderFrame()发起,输出节点逐级向连接的上游节点请求数据,最终由输入节点的OH_InputNode_RequestDataCallback()回调函数向开发者请求需要处理的音频数据。

图2:管线运行状态图

状态的功能如下表所示。

展开
状态名 功能
stopped

初始状态,或者工作状态经过OH_AudioSuiteEngine_StopPipeline()命令进入该状态。

切换到stopped状态后,各节点将释放缓存。

running

工作状态,或者初始状态执行OH_AudioSuiteEngine_StartPipeline()命令进入该状态。

该函数会对管线进行完整性检查,包含是否有有效连接、节点是否存在连接错误等。

管线的作用

  • 管线是OHAudioSuite中支持应用渲染PCM音频数据的音效链路。管线支持节点之间的灵活组网,给开发者提供更丰富、更灵活的音频编创体验。

  • 管线使用的场景如下:

    创建一个输入节点、一个效果节点(如均衡器节点EFFECT_NODE_TYPE_EQUALIZER)和一个输出节点,按节点连接顺序(输入节点 -> 效果节点 -> 输出节点)连接组成管线,实现均衡器功能(具体代码用例参考基础离线编辑)。同时,管线也支持多输入场景(具体代码用例参考混音与级联),各路输入的PCM数据经过各自的效果节点,在进行混音处理后输出。

管线的使用规则

管线由节点编排组成,管线创建节点规则如下所示。

管线中节点的编排规则如下所示。

  • 管线中节点连接顺序为:输入节点 -> 效果节点 -> 输出节点。

  • 音源分离效果节点EFFECT_MULTII_OUTPUT_NODE_TYPE_AUDIO_SEPARATION后面只能连接输出节点,其余效果类节点则没有这个限制。

  • 混音效果节点EFFECT_NODE_TYPE_AUDIO_MIXER支持多路输入连接,其余类型节点则不支持。

  • 节点的连接是单向的,不支持后序节点反向连接到前序节点。输入节点是每条管线的首节点,输出节点是每条管线的尾节点。

完整示例代码