10.3. API参考

本章节将依序描述CVI_AUDIO 各模块API使用方式,请注意在使用CVI_ADUDIO时请先确认 CVI_SYS_Init 已被调用,才能确保对应的系统组件初始化,CVI_AUDIO_INIT也必须被调用,才能确保音频模块中的软件已被初始化,使用者注意CVI_AUDIO_INIT仅需呼叫一次。在退出 Audio的使用时,请确认CVI_AUDIO相关模块已做了Disbale,并接着调用 CVI_SYS_Exit。

10.3.1. 模块属性API

10.3.1.1. CVI_AUDIO_INIT

【描述】

初始化audio 模块。

【语法】

CVI_S32 CVI_AUDIO_INIT(void);

【参数】

参数名称

描述

输入/输出

None

无需输入值

【返回值】

参数名称

描述

0

成功。

非 0

失败,其值为 错误码

【需求】

  • 头文件:cvi_comm_aio.h,cvi_audio.h

  • 库文件:libcvi_audio.a

【注意事项】

使用audio模块前,必需透过此API做初始化。否则功能会异常或内存数据错误。

10.3.1.2. CVI_AUDIO_DEINIT

【描述】

初始化audio 模块。

【语法】

CVI_S32 CVI_AUDIO_DEINIT(void);

【参数】

参数名称

描述

输入/输出

None

无需输入值

【返回值】

参数名称

描述

0

成功。

非 0

失败,其值为 错误码

【需求】

  • 头文件:cvi_comm_aio.h,cvi_audio.h

  • 库文件:libcvi_audio.a

【注意事项】

离开audio模块前,必需透过此API做释放模块。否则功能会异常或记忆体数据错误。

10.3.1.3. CVI_AUDIO_SetModParam

【描述】

设置 Audio 模块参数属性。

【语法】

CVI_S32 CVI_AUDIO_SetModParam(const AUDIO_MOD_PARAM_S *pstModParam);

【参数】

参数名称

描述

输入/输出

pstModParam

AUDIO 模块参数属性指针。

输入

【返回值】

参数名称

描述

0

成功。

非 0

失败,其值为 错误码

【需求】

  • 头文件:cvi_comm_aio.h,cvi_audio.h

  • 库文件:libcvi_audio.a

【注意事项】

在各audio 子模块使用前,需通过此API做初始化。

【举例】

无。

10.3.1.4. CVI_AUD_SYS_Bind

【描述】

设置 Audio 模块绑定属性。

【语法】

CVI_S32 CVI_AUD_SYS_Bind(const MMF_CHN_S *pstSrcChn, const MMF_CHN_S *pstDestChn);

【参数】

参数名称

描述

输入/输出

pstSrcChn

Audio 绑定来源指针。

输入

pstDestChn

Audio 绑定目的指针。

输入

【返回值】

参数名称

描述

0

成功。

非 0

失败,其值为 错误码

【需求】

  • 头文件:cvi_comm_aio.h,cvi_audio.h

  • 库文件:libcvi_audio.a

【注意事项】

  1. 支持绑定对象为:

(AudIn -> AudEnc),

(AudDec ->AudOut),

  1. 可参阅 cvi_sample_audio.c 内的 SAMPLE_AUDIO_AiAencSAMPLE_AUDIO_AdecAo 了解绑定用法。

【举例】

无。

10.3.1.5. CVI_AUDIO_GetModParam

【描述】

获取 AUDIO 模块参数属性。

【语法】

CVI_S32 CVI_AUDIO_GetModParam(AUDIO_MOD_PARAM_S *pstModParam);

【参数】

参数名称

描述

输入/输出

pstModParam

AUDIO 模块参数属性指针。

输出

【返回值】

参数名称

描述

0

成功。

非 0

失败,其值为 错误码

【需求】

  • 头文件:cvi_comm_aio.h,cvi_audio.h

  • 库文件:libcvi_audio.a

【注意事项】

在各audio 子模块使用前,需透过此API做初始化。

【举例】

无。

10.3.1.6. CVI_AUDIO_RegisterVQEModule

【描述】

注册VQE模块

【语法】

CVI_S32 CVI_AUDIO_RegisterVQEModule(const AUDIO_VQE_REGISTER_S, *pstVqeRegister);

【参数】

参数名称

描述

输入/输出

pstVqeRegister

VQE相关参数属性指针

输入

【返回值】

参数名称

描述

0

成功。

非 0

失败,其值为 错误码

【需求】

  • 头文件:cvi_comm_aio.h,cvi_audio.h

  • 库文件:libcvi_audio.a,libcvi_vqe.so,libaec.so

【注意事项】

此api已弃用。请使用CVI_AI_SetTalkVqeAttr,CVI_AI_EnableVqe

【举例】

无。

10.3.1.7. CVI_AENC_RegisterExternalEncoder

【描述】

注册音频编码模块

【语法】

CVI_S32 CVI_AENC_RegisterExternalEncoder(CVI_S32 *ps32Handle, const AAC_AENC_ENCODER_S *pstEncoder);

【参数】

参数名称

描述

输入/输出

ps32Handle

参数属性指针

输入

pstEncoder

编码模块函数指针

输入

【返回值】

参数名称

描述

0

成功。

非 0

失败,其值为 错误码

【需求】

  • 头文件:cvi_comm_aio.h,cvi_audio.h,cvi_audio_aac_adp.h

  • 库文件:libcvi_audio.a,libaacenc2.so

【注意事项】

  • 此函数针对AAC音频编码使用。

  • 函数注册前,需确认pstEncoder内的函数指针不为空,否则内部调用时会有错误。

  • 相关范例可搭配SDK内:sample/audio/aac_sample/cvi_audio_aac_adp.c调用参考。

  • 此函数仅支持AAC编码注册,相关G7xx系列编码请使用 CVI_AENC_CreateChn,可参照范例 cvi_sample_audio.cSAMPLE_AUDIO_AiAenc

【举例】

无。

10.3.1.8. CVI_AENC_UnRegisterExternalEncoder

【描述】

注销编码器。

【语法】

CVI_S32 CVI_AENC_UnRegisterExternalEncoder(CVI_S32 s32Handle);

【参数】

参数名称

描述

输入/输出

s32Handle

注册句柄(注册编码器时获得的句柄)

输入

【返回值】

参数名称

描述

0

成功。

非 0

失败,其值为 错误码

【需求】

  • 头文件:cvi_comm_aio.h,cvi_audio.h,cvi_audio_aac_adp.h

  • 库文件:libcvi_audio.a,libaacenc2.so

【注意事项】

  • 此函数针对AAC音频编码使用。

  • 注销编码器前,需要先销毁通过该编码器创建的所有编码通道,未销毁或者销毁过程中调用此接口将返回报错。

【举例】

无。

10.3.1.9. CVI_ADEC_RegisterExternalDecoder

【描述】

注册音频解码模块

【语法】

CVI_S32 CVI_ADEC_RegisterExternalDecoder(CVI_S32 *ps32Handle, const ADEC_DECODER_S *pstDecoder);

【参数】

参数名称

描述

输入/输出

ps32Handle

参数属性指针

输入

pstDecoder

编码模块函数指针

输入

【返回值】

参数名称

描述

0

成功。

非 0

失败,其值为 错误码

【需求】

  • 头文件:cvi_comm_aio.h,cvi_audio.h ,cvi_audio_aac_adp.h

  • 库文件:libcvi_audio.a,libaadec2.so

【注意事项】

  • 此函数针对AAC音频解码使用。

  • 函数注册前,需确认pstDecoder内的函数指真不为空,否则内部调用时会有错误。

  • 相关范例可搭配SDK内:sample/audio/aac_sample/cvi_audio_aac_adp.c调用参考。

  • 此函数仅支持AAC译码注册,相关G7xx系列请使用CVI_ADEC_CreateChn,可参照范例 cvi_sample_audio.cSAMPLE_AUDIO_AdecAo

【举例】

无。

10.3.1.10. CVI_ADEC_UnRegisterExternalDecoder

【描述】

注销音频解码模块

【语法】

CVI_S32 CVI_ADEC_UnRegisterExternalDecoder(CVI_S32 s32Handle);

【参数】

参数名称

描述

输入/输出

s32Handle

注册句柄

输入

【返回值】

参数名称

描述

0

成功。

非 0

失败,其值为 错误码

【需求】

  • 头文件:cvi_comm_aio.h,cvi_audio.h,cvi_audio_aac_adp.h

  • 库文件:libcvi_audio.a,libaadec2.so

【注意事项】

  • 此函数针对AAC音频解码使用。

【举例】

无。

10.3.2. 音频输入

音频输入实现配置及启用设备、获取音频帧数据等功能。

该功能模块提供以下 API:

10.3.2.1. CVI_AI_SetPubAttr

【描述】

设置 Audio Input 设备属性

【语法】

CVI_S32 CVI_AI_SetPubAttr(AUDIO_DEV AiDevId, const AIO_ATTR_S *pstAttr);

【参数】

参数名称

描述

输入/输出

AiDevId

音频设备号

输入

pstAttr

Audio Input设备属性指针

输入

【返回值】

参数名称

描述

0

成功。

非 0

失败,其值为 错误码

【需求】

  • 头文件:cvi_comm_aio.h,cvi_audio.h

  • 库文件:libcvi_audio.a

【注意事项】

  • 音频输入设备的属性决定了输入数据的格式,输入设备属性包括工作模式、采样率、 采样精度、buffer 大小、每帧的采样点数、扩展标志、时钟选择和通道数目。这些属性应与对接 Codec 配置的时序一致,即能成功对接。

  • AiDevId预设为0,如未要求扩增,超过2会返回错误。

  • enBitwidth : 位深度 8bit、16bit 或 24bit,实际应用中采样精度还受Audio Codec 限制。

  • buffer 大小 AIO_ATTR_S 中的 u32FrmNum 项用于配置 Audio Input 中用于接收音频数据的区块的音频。

  • UsrFrmDept : 区块音框,建议需大于等于 5。

  • enSamplerate当音频采样率较高时,建议相应地增加每帧的采样点数目。

  • 如要将这些采集到的 音频数据送编码,则应保证每帧的持续时长不少于 10ms(例如 16K 的采样频率下 每帧的采样点数至少应设置为 160),否则解码后声音可能有异常。

  • enSoundmode : 双声道或单声道语音音框设置

  • u32ChnCnt : 信道数目 信道数目指当前输入设备的 Audio Input 功能的信道数目,需与对接的 Audio Codec 的配置 保持一致;支持 1 路、2 路。

  • u32EXFlag : 扩展标志对 Audio Input 设备无效

  • u32ClkSel : 时钟设置,在此processor CV182x无需特别设置,仅需注意aio attribute 在Audio Input/Audio Output需设定一致。

../_images/image2.png

【举例】

无。

10.3.2.2. CVI_AI_GetPubAttr

【描述】

获取 Audio Input 设备属性

【语法】

CVI_S32 CVI_AI_GetPubAttr(AUDIO_DEV AiDevId, AIO_ATTR_S*pstAttr);

【参数】

参数名称

描述

输入/输出

AiDevId

音频设备号

输入

pstAttr

Audio Input 设备属性指针

输出

【返回值】

参数名称

描述

0

成功。

非 0

失败,其值为 错误码

【需求】

  • 头文件:cvi_comm_aio.h,cvi_audio.h

  • 库文件:libcvi_audio.a

【注意事项】

如未曾初始化或是CVI_AI_SetPubAttr未曾呼叫过,则使用者会拿到内容为0的指针及数值。

AiDevId预设为0,如未要求扩增,超过2会返回错误。

【举例】

无。

10.3.2.3. CVI_AI_Enable

【描述】

启用 Audio Input 设备

【语法】

CVI_S32 CVI_AI_Enable(AUDIO_DEV AiDevId);

【参数】

参数名称

描述

输入/输出

AiDevId

音频设备号。设备号预设为0,在客制化未要求扩充下,设置超过2,返回错误

输入

【返回值】

参数名称

描述

0

成功。

非 0

失败,其值为 错误码

【需求】

  • 头文件:cvi_comm_aio.h,cvi_audio.h

  • 库文件:libcvi_audio.a

【注意事项】

此API为最后使能Audio Input的函数,在调用前请确认相关属性已设定完成。

【举例】

Audio In使用范例:
CVI_S32 i;
CVI_S32 s32Ret;

s32Ret = CVI_AI_SetPubAttr(AiDevId, pstAioAttr);
if (s32Ret) {
  printf("%s: CVI_AI_SetPubAttr(%d) failed with %#x\n"
    , __func__,
    AiDevId,
    s32Ret);
  return s32Ret;
}

s32Ret = CVI_AI_Enable(AiDevId);
if (s32Ret) {
                    printf("%s: CVI_AI_Enable(%d) failed with %#x\n", __func__, AiDevId,
                            s32Ret);
                    return s32Ret;
}
for (i = 0; i < s32AiChnCnt >> pstAioAttr->enSoundmode; i++) {
                    s32Ret = CVI_AI_EnableChn(AiDevId, i / (pstAioAttr->enSoundmode + 1));
                    if (s32Ret) {
                                printf("%s: CVI_AI_EnableChn(%d,%d) failed with %#x\n", __func__,
                                      AiDevId, i, s32Ret);
                                return s32Ret;
                    }

                    if (bResampleEn == CVI_TRUE) {
                    s32Ret = CVI_AI_EnableReSmp(AiDevId, i, enOutSampleRate);
                    if (s32Ret) {
                    printf("%s: CVI_AI_EnableReSmp(%d,%d) failed with %#x\n",
__func__,
                              AiDevId, i,
s32Ret);
                                return s32Ret;
                    }
                    }

                    if (pstAiVqeAttr != NULL) {
                                CVI_BOOL bAiVqe = CVI_TRUE;
                                s32Ret = CVI_AI_SetTalkVqeAttr(
                                          0,
                                          0,
                                          0,
                                          0,
                                          (AI_TALKVQE_CONFIG_S *)pstAiVqeAttr);
                                          break;
                    }

                    if (s32Ret) {
                    printf("%s: SetAiVqe%d(%d,%d) failed with %#x\n",
                            __func__,
u32AiVqeType,
                            AiDevId, i, s32Ret);
                            return s32Ret;
                    }

                    if (bAiVqe) {
                    s32Ret = CVI_AI_EnableVqe(AiDevId, i);
                    if (s32Ret) {
                    printf("%s: CVI_AI_EnableVqe(%d,%d) failed with %#x\n", __func__,
                                                            AiDevId, i, s32Ret);
                    return s32Ret;
                    }
                    }
          }

10.3.2.4. CVI_AI_Disable

【描述】

停用 Audio Input 设备

【语法】

CVI_S32 CVI_AI_Disable(AUDIO_DEV AiDevId);

【参数】

参数名称

描述

输入/输出

AiDevId

音频设备号。设备号预设为0,在客制化未要求扩充下,设置超过2,返回错误。

输入

【返回值】

参数名称

描述

0

成功。

非 0

失败,其值为 错误码

【需求】

  • 头文件:cvi_comm_aio.h,cvi_audio.h

  • 库文件:libcvi_audio.a

【注意事项】

此API为停止Audio Input设备的最后一道程序,禁用 Audio Input 设备前必须先禁用该设备下已启用的所有 Audio Input 通道,如有AENC或Audio Output相接,请先停止与之关联再调用此。

【举例】

无。

10.3.2.5. CVI_AI_EnableChn

【描述】

启用 Audio Input 通道

【语法】

CVI_S32 CVI_AI_EnableChn(AUDIO_DEV AiDevId, AI_CHN AiChn);

【参数】

参数名称

描述

输入/输出

AiDevId

音频设备号。设备号预设为0,在客制化未要求扩充下,设置超过2,返回错误

输入

AiChn

音频输入通道号。与声道模式描述入enSoundmode无关,用户可透过不同AiChn在同AiDevId下获取同设备声源。

输入

【返回值】

参数名称

描述

0

成功。

非 0

失败,其值为 错误码

【需求】

  • 头文件:cvi_comm_aio.h,cvi_audio.h

  • 库文件:libcvi_audio.a

【注意事项】

启用 Audio Input 通道前,必须先启用其所属Audio Input设备。

【举例】

无。

10.3.2.6. CVI_AI_DisableChn

【描述】

禁用 Audio Input 通道。

【语法】

CVI_S32 CVI_AI_DisableChn(AUDIO_DEV AiDevId, AI_CHN AiChn);

【参数】

参数名称

描述

输入/输出

AiDevId

音频设备号。设备号预设为0,在客制化未要求扩充下,设置超过2,返回错误

输入

AiChn

音频输入通道号。与声道模式描述入enSoundmode无关,用户可透过不同AiChn在同AiDevId下获取同设备声源。

输入

【返回值】

参数名称

描述

0

成功。

非 0

失败,其值为 错误码

【需求】

  • 头文件:cvi_comm_aio.h,cvi_audio.h

  • 库文件:libcvi_audio.a

【注意事项】

请在 CVI_AI_Disable 前呼叫此API,避免通道参数残留。

【举例】

无。

10.3.2.7. CVI_AI_GetFrame

【描述】

获取音框

【语法】

CVI_S32 CVI_AI_GetFrame(AUDIO_DEV AiDevId, AI_CHN AiChn, AUDIO_FRAME_S *pstFrm, AEC_FRAME_S *pstAecFrm , CVI_S32 s32MilliSec);

【参数】

参数名称

描述

输入/输出

AiDevId

音频设备号。设备号预设为0,在客制化未要求扩充下,设置超过2,返回错误

输入

AiChn

音频输入通道号。与声道模式描述入enSoundmode无关,用户可透过不同AiChn在同AiDevId下获取同设备声源。

输入

pstFrm

音频帧结构体指针。用户由此结构体指针获得音框。

输出

pstAecFrm

回声抵消参考帧结构体指针。

输出

s32MilliSec

获取数据的超时时间
-1 表示阻塞模式,无数据时一直等待;
0 表示非阻塞模式,无数据时则报错返回;
>0 表示阻塞 s32MilliSec 毫秒,超时则报错返回

输入

【返回值】

参数名称

描述

0

成功。

非 0

失败,其值为 错误码

【需求】

  • 头文件:cvi_comm_aio.h,cvi_audio.h

  • 库文件:libcvi_audio.a

【注意事项】

  • s32MilliSec 的值必须大于等于-1,等于-1 时采用阻塞模式获取数据,等于 0 时采 用非阻塞模式获取数据,大于 0 时,阻塞 s32MilliSec 毫秒后,没有数据则返回超 时并报错。

  • 获取音频帧数据前,必须先使能对应的 Audio Input 通道。

  • 欲获取AEC音框,请先确定VQE内AEC已开启。

【举例】

无。

10.3.2.8. CVI_AI_ReleaseFrame

【描述】

释放音框。

【语法】

CVI_S32 CVI_AI_ReleaseFrame(AUDIO_DEV AiDevId, AI_CHN AiChn, const AUDIO_FRAME_S *pstFrm, const AEC_FRAME_S *pstAecFrm);

【参数】

参数名称

描述

输入/输出

AiDevId

音频设备号。设备号预设为0,在客制化未要求扩充下,设置超过2,返回错误

输入

AiChn

音频输入通道号。与声道模式描述入enSoundmode无关,用户可透过不同AiChn在同AiDevId下获取同设备声源。

输入

pstFrm

音频帧结构体指针。用户由此结构体指针获得音框。

输入

pstAecFrm

回声抵消参考帧结构体指针。

输入

【返回值】

参数名称

描述

0

成功。

非 0

失败,其值为 错误码

【需求】

  • 头文件:cvi_comm_aio.h,cvi_audio.h

  • 库文件:libcvi_audio.a

【注意事项】

如果不需要释放回声抵消参考帧,pstAecFrm 置为 NULL 即可。

【举例】

无。

10.3.2.9. CVI_AI_SetChnParam

【描述】

设置 Audio Input 通道参数。

【语法】

CVI_S32 CVI_AI_SetChnParam(AUDIO_DEV AiDevId, AI_CHN AiChn, const AI_CHN_PARAM_S *pstChnParam);

【参数】

参数名称

描述

输入/输出

AiDevId

音频设备号。设备号预设为0,在客制化未要求扩充下,设置超过2,返回错误

输入

AiChn

音频输入通道号。与声道模式描述入enSoundmode无关,用户可透过不同AiChn在同AiDevId下获取同设备声源。

输入

pstChnParam

音频通道参数

输入

【返回值】

参数名称

描述

0

成功。

非 0

失败,其值为 错误码

【需求】

  • 头文件:cvi_comm_aio.h,cvi_audio.h

  • 库文件:libcvi_audio.a

【注意事项】

通道参数目前只有一个成员变量,用于设置用户获取音频帧的区块深度,

默认深度为0。该成员变量的值不能大于30。

【举例】

无。

10.3.2.10. CVI_AI_GetChnParam

【描述】

获取 Audio Input 通道参数。

【语法】

CVI_S32 CVI_AI_GetChnParam(AUDIO_DEV AiDevId, AI_CHN AiChn, AI_CHN_PARAM_S *pstChnParam);

【参数】

参数名称

描述

输入/输出

AiDevId

音频设备号。设备号预设为0,在客制化未要求扩充下,设置超过2,返回错误

输入

AiChn

音频输入通道号。与声道模式描述入enSoundmode无关,用户可透过不同AiChn在同AiDevId下获取同设备声源。

输入

pstChnParam

音频通道参数

输出

【返回值】

参数名称

描述

0

成功。

非 0

失败,其值为 错误码

【需求】

  • 头文件:cvi_comm_aio.h,cvi_audio.h 此文件提及的音频模块属于Middleware多媒体层接口之一

  • 库文件:libcvi_audio.a

【注意事项】

通道参数目前只有一个成员变量,用于设置用户获取音频帧的区块深度。

【举例】

无。

10.3.2.11. CVI_AI_EnableReSmp

【描述】

启用 Audio Input 重采样。

【语法】

CVI_S32 CVI_AI_EnableReSmp(AUDIO_DEV AiDevId, AI_CHN AiChn, AUDIO_SAMPLE_RATE_E enOutSampleRate);

【参数】

参数名称

描述

输入/输出

AiDevId

音频设备号。设备号预设为0,在客制化未要求扩充下,设置超过2,返回错误

输入

AiChn

音频输入通道号。与声道模式描述入enSoundmode无关,用户可透过不同AiChn在同AiDevId下获取同设备声源。

输入

enOutSampleRat

音频重采样的输出采样率。

输入

【返回值】

参数名称

描述

0

成功。

非 0

失败,其值为 错误码

【需求】

  • 头文件:cvi_comm_aio.h,cvi_audio.h

  • 库文件:libcvi_audio.a,libcvi_vqe.so,libcvi_RES1.so

【注意事项】

在使用 CVI_AUD_SYS_Bind 的状态下,不支持此API

采样率支持程度如下:

typedef enum _AUDIO_SAMPLE_RATE_E {
  AUDIO_SAMPLE_RATE_8000   = 8000,    /* 8K samplerate*/
  AUDIO_SAMPLE_RATE_11025  = 11025,   /* 11.025K samplerate*/
  AUDIO_SAMPLE_RATE_16000  = 16000,   /* 16K samplerate*/
  AUDIO_SAMPLE_RATE_22050  = 22050,   /* 22.050K samplerate*/
  AUDIO_SAMPLE_RATE_24000  = 24000,   /* 24K samplerate*/
  AUDIO_SAMPLE_RATE_32000  = 32000,   /* 32K samplerate*/
  AUDIO_SAMPLE_RATE_44100  = 44100,   /* 44.1K samplerate*/
  AUDIO_SAMPLE_RATE_48000  = 48000,   /* 48K samplerate*/
  AUDIO_SAMPLE_RATE_64000  = 64000,   /* 64K samplerate*/
  AUDIO_SAMPLE_RATE_BUTT,
} AUDIO_SAMPLE_RATE_E;

【举例】

无。

10.3.2.12. CVI_AI_DisableReSmp

【描述】

关闭 Audio Input 重采样功能。

【语法】

CVI_S32 CVI_AI_DisableReSmp(AUDIO_DEV AiDevId, AI_CHN AiChn);

【参数】

参数名称

描述

输入/输出

AiDevId

音频设备号。设备号预设为0,在客制化未要求扩充下,设置超过2,返回错误

输入

AiChn

音频输入通道号。与声道模式描述入enSoundmode无关,用户可透过不同AiChn在同AiDevId下获取同设备声源。

输入

【返回值】

参数名称

描述

0

成功。

非 0

失败,其值为 错误码

【需求】

  • 头文件:cvi_comm_aio.h,cvi_audio.h

  • 库文件:libcvi_audio.a,libcvi_RES1.so,libcvi_vqe.so

【注意事项】

要求在调用此接口之前,先禁用使用该 Audio Input 设备相应通道音频数据的 AENC 信道 和 Audio Output 信道,否则可能导致该接口调用失败。

【举例】

无。

10.3.2.13. CVI_AI_ClrPubAttr

【描述】

清空 Pub 属性。

【语法】

CVI_S32 CVI_AI_ClrPubAttr(AUDIO_DEV AiDevId);

【参数】

参数名称

描述

输入/输出

AiDevId

音频设备号。设备号预设为0,在客制化未要求扩充下,设置超过2,返回错误

输入

【返回值】

参数名称

描述

0

成功。

非 0

失败,其值为 错误码

【需求】

  • 头文件:cvi_comm_aio.h,cvi_audio.h

  • 库文件:libcvi_audio.a

【注意事项】

清除设备属性前,需要先停止设备。

清除设备属性前,建议停止所有内部相连或是user-get mode之动作,避免底层仍在搬移音框而造成行为异常。

【举例】

无。

10.3.2.14. CVI_AI_SaveFile

【描述】

开启音频输入保存文件功能。

【语法】

CVI_S32 CVI_AI_SaveFile(AUDIO_DEV AiDevId, AI_CHN AiChn, const AUDIO_SAVE_FILE_INFO_S *pstSaveFileInfo);

【参数】

参数名称

描述

输入/输出

AiDevId

音频设备号。设备号预设为0,在客制化未要求扩充下,设置超过2,返回错误

输入

AiChn

音频输入通道号。与声道模式描述入enSoundmode无关,用户可透过不同AiChn在同AiDevId下获取同设备声源。

输入

pstSaveFileInfo

音频保存文件属性结构体指针。

输入

【返回值】

参数名称

描述

0

成功。

非 0

失败,其值为 错误码

【需求】

  • 头文件:cvi_comm_aio.h,cvi_audio.h

  • 库文件:libcvi_audio.a

【注意事项】

此接口仅用于 Audio Input-AENC、Audio Input-Audio Output 非系统绑定模式下 dump Audio Input使用。

【举例】

无。

10.3.2.15. CVI_AI_QueryFileStatus

【描述】

查询音频输入通道是否处于存文件的状态。

【语法】

CVI_S32 CVI_AI_QueryFileStatus(AUDIO_DEV AiDevId, AI_CHN AiChn, AUDIO_FILE_STATUS_S* pstFileStatus);

【参数】

参数名称

描述

输入/输出

AiDevId

音频设备号。设备号预设为0,在客制化未要求扩充下,设置超过2,返回错误

输入

AiChn

音频输入通道号。与声道模式描述入enSoundmode无关,用户可透过不同AiChn在同AiDevId下获取同设备声源。

输入

pstFileStatus

档案状态属性结构体指针。

输出

【返回值】

参数名称

描述

0

成功。

非 0

失败,其值为 错误码

【需求】

  • 头文件:cvi_comm_aio.h,cvi_audio.h

  • 库文件:libcvi_audio.a

【注意事项】

  • 此接口主要用于除错,一般流程不会用到。

  • 此接口仅用于 Audio Input-AENC、Audio Input-Audio Output 非系统绑定模式下 dump Audio Input使用。

  • 此接口用于查询音频输入通道是否处于存文件的状态,当用户调用 CVI_AI_SaveFile 存储文件后,可调用此接口查询存储的文件是否达到了指定的大 小,如果 pstFileStatus 的 bSaving 为 CVI_TRUE,说明还没有达到指定大小,为 CVI_FALSE则已经达到指定大小。

【举例】

无。

10.3.2.16. CVI_AI_EnableAecRefFrame

【描述】

在 AEC 不打开的情况下也使用户能获取到 AEC 参考帧。

【语法】

CVI_S32 CVI_AI_EnableAecRefFrame(AUDIO_DEV AiDevId, AI_CHN AiChn, AUDIO_DEV AoDevId, AO_CHN AoChn);

【参数】

参数名称

描述

输入/输出

AiDevId

音频设备号。设备号预设为0,在客制化未要求扩充下,设置超过2,返回错误

输入

AiChn

音频输入通道号。与声道模式描述入enSoundmode无关,用户可透过不同AiChn在同AiDevId下获取同设备声源。

输入

AoDevId

用于获取 AEC 参考帧的 Audio Output 设备号。

输入

AoChn

用于获取 AEC 参考帧的 Audio Output 通道号描述

输入

【返回值】

参数名称

描述

0

成功。

非 0

失败,其值为 错误码

【需求】

  • 头文件:cvi_comm_aio.h,cvi_audio.h

  • 库文件:libcvi_audio.a

【注意事项】

无。

【举例】

无。

10.3.2.17. CVI_AI_DisableAecRefFrame

【描述】

在 AEC 不打开的情况下禁止获取 AEC 参考帧。

【语法】

CVI_S32 CVI_AI_DisableAecRefFrame(AUDIO_DEV AiDevId, AI_CHN AiChn);

【参数】

参数名称

描述

输入/输出

AiDevId

音频设备号。设备号预设为0,在客制化未要求扩充下,设置超过2,返回错误

输入

AiChn

音频输入通道号。与声道模式描述入enSoundmode无关,用户可透过不同AiChn在同AiDevId下获取同设备声源。

输入

【返回值】

参数名称

描述

0

成功。

非 0

失败,其值为 错误码

【需求】

  • 头文件:cvi_comm_aio.h,cvi_audio.h

  • 库文件:libcvi_audio.a

【注意事项】

无。

【举例】

无。

10.3.2.18. CVI_AI_SetVolume

【描述】

设置输入音量。

【语法】

CVI_S32 CVI_AI_SetVolume(AUDIO_DEV AiDevId, CVI_S32 s32VolumeStep);

【参数】

参数名称

描述

输入/输出

AiDevId

音频设备号。设备号预设为0,在客制化未要求扩充下,设置超过2,返回错误

输入

s32VolumeStep

输入音量放大步阶[24-0, 0:mute]。

输入

【返回值】

参数名称

描述

0

成功。

非 0

失败,其值为 错误码

【需求】

  • 头文件:cvi_comm_aio.h,cvi_audio.h

  • 库文件:libcvi_audio.a/libcvi_audio.so

【注意事项】

无。

【举例】

无。

10.3.2.19. CVI_AI_GetVolume

【描述】

获取输入音量。

【语法】

CVI_S32 CVI_AI_GetVolume(AUDIO_DEV AiDevId, CVI_S32 *ps32VolumeStep);

【参数】

参数名称

描述

输入/输出

AiDevId

音频设备号。设备号预设为0,在客制化未要求扩充下,设置超过2,返回错误

输入

ps32VolumeStep

音量步阶指针[24-0, 0:mute]。

输出

【返回值】

参数名称

描述

0

成功。

非 0

失败,其值为 错误码

【需求】

  • 头文件:cvi_comm_aio.h,cvi_audio.h

  • 库文件:libcvi_audio.a/libcvi_audio.so

【注意事项】

无。

【举例】

无。

10.3.3. 语音音质增强API

10.3.3.1. CVI_AI_SetVqeAttr

【描述】

设置 Audio Input 的声音质量增强功能相关属性。

【语法】

CVI_S32 CVI_AI_SetVqeAttr(AUDIO_DEV AiDevId, AI_CHN AiChn, AUDIO_DEV AoDevId, AO_CHN AoChn, AI_VQE_CONFIG_S *pstVqeConfig);

【参数】

参数名称

描述

输入/输出

AiDevId

音频设备号。设备号预设为0,在客制化未要求扩充下,设置超过2,返回错误

输入

AiChn

音频输入通道号。与声道模式描述入enSoundmode无关,用户可透过不同AiChn在同AiDevId下获取同设备声源。

输入

AoDevId

Audio Output设备号,用于回声抵消。

输入

AoChn

用于回声抵消的 Audio Output 通道号。

输入

pstVqeConfig

音频输入声音质量增强配置结构体指针

输入

【返回值】

参数名称

描述

0

成功。

非 0

失败,其值为 错误码

【需求】

  • 头文件:cvi_comm_aio.h,cvi_audio.h

  • 库文件:libcvi_audio.a,libcvi_RES1.so,libcvi_vqe.so,

【注意事项】

启用声音质量增强功能前必须先设置相对应 Audio Input 通道的声音质量增强功能相关属性。

设置 Audio Input 的声音质量增强功能相关属性前,必须先使能对应的 Audio Input 通道。

相同 Audio Input 信道的声音质量增强功能不支持动态设置属性,重新设置 Audio Input 通道的声音 质量增强功能相关属性时,需要先关闭 Audio Input 通道的声音质量功能,再设置 Audio Input 通道的声音质量增强功能相关属性。

【举例】

无。

10.3.3.2. CVI_AI_SetTalkVqeAttr

【描述】

设置 Audio Input 的声音质量增强功能(Talk)相关属性。

【语法】

CVI_S32 CVI_AI_SetTalkVqeAttr(AUDIO_DEV AiDevId, AI_CHN AiChn, AUDIO_DEV AoDevId, AO_CHN AoChn, AI_TALKVQE_CONFIG_S *pstVqeConfig);

【参数】

参数名称

描述

输入/输出

AiDevId

音频设备号。设备号预设为0,在客制化未要求扩充下,设置超过2,返回错误

输入

AiChn

音频输入通道号。与声道模式描述入enSoundmode无关,用户可透过不同AiChn在同AiDevId下获取同设备声源。

输入

AoDevId

Audio Output设备号,用于回声抵消。

输入

AoChn

用于回声抵消的 Audio Output 通道号。

输入

pstVqeConfig

音频输入声音质量增强配置结构体指针

输入

【返回值】

参数名称

描述

0

成功。

非 0

失败,其值为 错误码

【需求】

  • 头文件:cvi_comm_aio.h,cvi_audio.h

  • 库文件:libcvi_audio.a,libcvi_RES1.so,libcvi_vqe.so,libssp.so

【注意事项】

Talk Vqe 主要在 IPC 场景下使用。

相同 Audio Input 信道的声音质量增强功能不支持动态设置属性,重新设置 Audio Input 通道的声音 质量增强功能相关属性时,需要先关闭 Audio Input 通道的声音质量功能,再设置 Audio Input 通道 的声音质量增强功能相关属性。

【举例】

无。

10.3.3.3. CVI_AI_GetTalkVqeAttr

【描述】

获取 Audio Input 的声音质量增强功能(Talk)相关属性

【语法】

CVI_S32 CVI_AI_GetTalkVqeAttr(AUDIO_DEV AiDevId, AI_CHN AiChn, AI_TALKVQE_CONFIG_S *pstVqeConfig);

【参数】

参数名称

描述

输入/输出

AiDevId

音频设备号。设备号预设为0,在客制化未要求扩充下,设置超过2,返回错误

输入

AiChn

音频输入通道号。与声道模式描述入enSoundmode无关,用户可透过不同AiChn在同AiDevId下获取同设备声源。

输入

pstVqeConfig

音频输入声音质量增强配置结构体指针。

输出

【返回值】

参数名称

描述

0

成功。

非 0

失败,其值为 错误码

【需求】

  • 头文件:cvi_comm_aio.h,cvi_audio.h

  • 库文件:libcvi_audio.a,libcvi_RES1.so,libcvi_vqe.so,libssp.so

【注意事项】

获取声音质量增强功能相关属性前必须先设置相对应 Audio Input 通道的声音质量增强功能相关属性。

【举例】

无。

10.3.3.4. CVI_AI_SetRecordVqeAttr

【描述】

设置 Audio Input 的声音质量增强功能(Record)相关属性。

【语法】

CVI_S32 CVI_AI_SetRecordVqeAttr(AUDIO_DEV AiDevId, AI_CHN AiChn, const AI_RECORDVQE_CONFIG_S *pstVqeConfig);

【参数】

参数名称

描述

输入/输出

AiDevId

音频设备号。设备号预设为0,在客制化未要求扩充下,设置超过2,返回错误

输入

AiChn

音频输入通道号。与声道模式描述入enSoundmode无关,用户可透过不同AiChn在同AiDevId下获取同设备声源。

输入

pstVqeConfig

音频输入声音质量增强配置结构体指针

输入

【返回值】

参数名称

描述

0

成功。

非 0

失败,其值为 错误码

【需求】

  • 头文件:cvi_comm_aio.h,cvi_audio.h

  • 库文件:libcvi_audio.a,libcvi_RES1.so,libcvi_vqe.so,libssp.so

【注意事项】

CVI182x目前语音算法主要设定是由 CVI_AI_SetTalkVqeAttr 调用,使用者用此 RecordVqeAttr (CVI_AI_SetRecordVqeAttr/ GetRecordVqeAttr)可能对于算法会不支持或无法设入,因此不建议使用。

【举例】

无。

10.3.3.5. CVI_AI_GetRecordVqeAttr

【描述】

设置 Audio Input 的声音质量增强功能(Record)相关属性。

【语法】

CVI_AI_GetRecordVqeAttr (AUDIO_DEV AiDevId, AI_CHN AiChn, const AI_RECORDVQE_CONFIG_S *pstVqeConfig);

【参数】

参数名称

描述

输入/输出

AiDevId

音频设备号。设备号预设为0,在客制化未要求扩充下,设置超过2,返回错误

输入

AiChn

音频输入通道号。与声道模式描述入enSoundmode无关,用户可透过不同AiChn在同AiDevId下获取同设备声源。

输入

pstVqeConfig

音频输入声音质量增强配置结构体指针。

输出

【返回值】

参数名称

描述

0

成功。

非 0

失败,其值为 错误码

【需求】

  • 头文件:cvi_comm_aio.h,cvi_audio.h

  • 库文件:libcvi_audio.a,libcvi_RES1.so,libcvi_vqe.so,libssp.so

【注意事项】

CVI182x目前语音算法主要设定是由 CVI_AI_GetTalkVqeAttr 调用,使用者用此 RecordVqeAttr (CVI_AI_SetRecordVqeAttr/ GetRecordVqeAttr)可能对于算法会不支持或无法设入,因此不建议使用。

【举例】

无。

10.3.3.6. CVI_AI_EnableVqe

【描述】

启用 Audio Input 的声音质量增强功能。

【语法】

CVI_S32 CVI_AI_EnableVqe(AUDIO_DEV AiDevId, AI_CHN AiChn);

【参数】

参数名称

描述

输入/输出

AiDevId

音频设备号。 设备号预设为0,在客制化 未要求扩充下,设置超过2,返回错误

输入

AiChn

音频输入通道号。与声道模式描述入 en Soundmode无关,用户可透过不同AiChn在同AiDevId下获取同设备声源。

输入

【返回值】

参数名称

描述

0

成功。

非 0

失败,其值为 错误码

【需求】

  • 头文件:cvi_comm_aio.h,cvi_audio.h

  • 库文件:libcvi_audio.a,libcvi_RES1.so,libcvi_vqe.so,libssp.so

【注意事项】

  • 启用声音质量增强功能前必须先启用相对应的 Audio Input 通道。

  • 多次使能相同 Audio Input 通道的声音质量增强功能时,返回成功。

  • 禁用 Audio Input 通道后,如果重新启用 Audio Input 通道,并使用声音质量增强功能,需调用此接 口重新启用声音质量增强功能。

【举例】

无。

10.3.3.7. CVI_AI_DisableVqe

【描述】

禁用 Audio Input 的声音质量增强功能

【语法】

CVI_S32 CVI_AI_DisableVqe(AUDIO_DEV AiDevId, AI_CHN AiChn);

【参数】

参数名称

描述

输入/输出

AiDevId

音频设备号。 设备号预设为0,在客制化 未要求扩充下,设置超过2,返回错误

输入

AiChn

音频输入通道号。与声道模式描述入 en Soundmode无关,用户可透过不同AiChn在同AiDevId下获取同设备声源。

输入

【返回值】

参数名称

描述

0

成功。

非 0

失败,其值为 错误码

【需求】

  • 头文件:cvi_comm_aio.h,cvi_audio.h

  • 库文件:libcvi_audio.a,libcvi_RES1.so,libcvi_vqe.so,libssp.so

【注意事项】

  • 不再使用 Audio Input 声音质量增强功能时,应该调用此接口将其禁用。

【举例】

无。

10.3.3.8. CVI_AI_SetTrackMode

【描述】

设置 Audio Input 声道模式

【语法】

CVI_S32 CVI_AI_SetTrackMode(AUDIO_DEV AiDevId, AUDIO_TRACK_MODE_E enTrackMode);

【参数】

参数名称

描述

输入/输出

AiDevId

音频设备号。 设备号预设为0,在客制化未要求扩充下,设置超过2,返回错误

输入

enTrackMode

typedef enum _AUDIO_TRACK_MODE_E {
  AUDIO_TRACK_NORMAL      = 0,
  AUDIO_TRACK_BOTH_LEFT   = 1,
  AUDIO_TRACK_BOTH_RIGHT  = 2,
  AUDIO_TRACK_EXCHANGE    = 3,
  AUDIO_TRACK_MIX  = 4,
  AUDIO_TRACK_LEFT_MUTE   = 5,
  AUDIO_TRACK_RIGHT_MUTE  = 6,
  AUDIO_TRACK_BOTH_MUTE   = 7,
  AUDIO_TRACK_BUTT
} AUDIO_TRACK_MODE_E;

输入

【返回值】

参数名称

描述

0

成功。

非 0

失败,其值为 错误码

【需求】

  • 头文件:cvi_comm_aio.h,cvi_audio.h

  • 库文件:libcvi_audio.a,libcvi_RES1.so,libcvi_vqe.so,libssp.so

【注意事项】

  • Audio Input 设备工作在 I2S 模式时,支持获取声道模式,PCM 模式下不支持。

  • 在 Audio Input 设备成功启用后再调用此接口。

  • TrackMode能力与audio codec有关,如客户端使用自己的codec,设置可能有所不同。

【举例】

无。

10.3.3.9. CVI_AI_GetTrackMode

【描述】

获取 Audio Input 声道模式

【语法】

CVI_S32 CVI_AI_GetTrackMode(AUDIO_DEV AiDevId, AUDIO_TRACK_MODE_E *penTrackMode);

【参数】

参数名称

描述

输入/输出

AiDevId

音频设备号。 设备号预设为0,在客制化未要求扩充下,设置超过2,返回错误

输入

enTrackMode

typedef enum _AUDIO_TRACK_MODE_E {
  AUDIO_TRACK_NORMAL      = 0,
  AUDIO_TRACK_BOTH_LEFT   = 1,
  AUDIO_TRACK_BOTH_RIGHT  = 2,
  AUDIO_TRACK_EXCHANGE    = 3,
  AUDIO_TRACK_MIX  = 4,
  AUDIO_TRACK_LEFT_MUTE   = 5,
  AUDIO_TRACK_RIGHT_MUTE  = 6,
  AUDIO_TRACK_BOTH_MUTE   = 7,
  AUDIO_TRACK_BUTT
} AUDIO_TRACK_MODE_E;

输出

【返回值】

参数名称

描述

0

成功。

非 0

失败,其值为 错误码

【需求】

  • 头文件:cvi_comm_aio.h,cvi_audio.h

  • 库文件:libcvi_audio.a,libcvi_RES1.so,libcvi_vqe.so,libssp.so

【注意事项】

  • Audio Input 设备工作在 I2S 模式时,支持获取声道模式,PCM 模式下不支持。

  • 在 Audio Input 设备成功启用后再调用此接口。

  • TrackMode能力与audio codec有关,如客户端使用自己的codec,设置可能有所不同。

【举例】

无。

10.3.3.10. CVI_AO_SetVqeAttr

【描述】

设置 Audio Output 的声音质量增强功能相关属性。

【语法】

CVI_S32 CVI_AO_SetVqeAttr(AUDIO_DEV AoDevId, AO_CHN AoChn, AO_VQE_CONFIG_S *pstVqeConfig);

【参数】

参数名称

描述

输入/输出

AoDevId

音频设备号。 设备号预设为0,在客制化未要求扩充下,设置超过2,返回错误。

输入

AoChn

音频输出通道号

输入

pstVqeConfig

音频输出声音质量增强配置结构体指针

输入

【返回值】

参数名称

描述

0

成功。

非 0

失败,其值为 错误码

【需求】

  • 头文件:cvi_comm_aio.h,cvi_audio.h

  • 库文件:libcvi_audio.a、libssp.so、libcvi_RES1.so

【注意事项】

  • 启用声音质量增强功能前必须先设置相对应 Audio Output 通道的声音质量增强功能相关属性。

  • 设置 Audio Output 的声音质量增强功能相关属性前,必须先使能对应的 Audio Output 通道。

【举例】

无。

10.3.3.11. CVI_AO_GetVqeAttr

【描述】

获取 Audio Output 的声音质量增强功能相关属性。

【语法】

CVI_S32 CVI_AO_GetVqeAttr(AUDIO_DEV AoDevId, AO_CHN AoChn, AO_VQE_CONFIG_S *pstVqeConfig);

【参数】

参数名称

描述

输入/输出

AoDevId

音频设备号。 设备号预设为0,在客制化未要求扩充下,设置超过2,返回错误。

输入

AoChn

音频输出通道号

输入

pstVqeConfig

音频输出声音质量增强配置结构体指针

输出

【返回值】

参数名称

描述

0

成功。

非 0

失败,其值为 错误码

【需求】

  • 头文件:cvi_comm_aio.h,cvi_audio.h

  • 库文件:libcvi_audio.a、libssp.so、libcvi_RES1.so、libcvi_vqe.so

【注意事项】

  • 获取声音质量增强功能相关属性前必须先设置相对应 Audio Output 通道的声音质量增强功能相关属性

【举例】

无。

10.3.3.12. CVI_AO_EnableVqe

【描述】

使能 Audio Output 的声音质量增强功能。

【语法】

CVI_S32 CVI_AO_EnableVqe(AUDIO_DEV AoDevId, AO_CHN AoChn);

【参数】

参数名称

描述

输入/输出

AoDevId

音频设备号。设备号预设为0,在客制化未要求扩充下,设置超过2,返回错误。

输入

AoChn

音频输出通道号。

输入

【返回值】

参数名称

描述

0

成功。

非 0

失败,其值为 错误码

【需求】

  • 头文件:cvi_comm_aio.h,cvi_audio.h

  • 库文件:libcvi_audio.a、libssp.so、libcvi_RES1.so、libcvi_vqe.so

【注意事项】

  • 启用声音质量增强功能前必须先启用相对应Audio Output通道。

  • 禁用 Audio Output 通道后,如果重新启用 Audio Output 通道,并使用声音质量增强功能,需调用此 接口重新启用声音质量增强功能。

【举例】

无。

10.3.3.13. CVI_VQE_PathSelect

【描述】

VQE 算法路径设置。

【语法】

CVI_S32 CVI_VQE_PathSelect(E_VQE_ALGO_PATH eVqePath);

【参数】

参数名称

描述

输入/输出

eVqePath

音频设备号。 设备号预设为0,在客制化未要求扩充下,设置超过2,返回错误。

输入

【返回值】

参数名称

描述

0

成功。

非 0

失败,其值为 错误码

【需求】

  • 头文件:cvi_comm_aio.h,cvi_audio.h

  • 库文件:libcvi_audio.so、libssp.so、libcvi_vqe.so

【注意事项】

此API 仅在支持IC下可使用, 使用时需在ENABLE前使能。

【举例】

无。

10.3.4. 音频输出

音频输出(Audio Output)主要实现启用音频输出设备、发送音频帧到输出信道等功能。

下面列举API并附加细部内容:

10.3.4.1. CVI_AO_SetPubAttr

【描述】

设置 Audio Output 设备属性

【语法】

CVI_S32 CVI_AO_SetPubAttr(AUDIO_DEV AoDevId,const AIO_ATTR_S *pstAttr);

【参数】

参数名称

描述

输入/输出

AoDevId

音频设备号。 设备号预设为0,在客制化未要求扩充下,设置超过2,返回错误。

输入

pstAttr

音频输出设备属性。

输入

【返回值】

参数名称

描述

0

成功。

非 0

失败,其值为 错误码

【需求】

  • 头文件:cvi_comm_aio.h,cvi_audio.h

  • 库文件:libcvi_audio.a

【注意事项】

  • 在设置属性之前需要保证 Audio Output 处于禁用状态,如果处于启用状态则需要首 先禁用 Audio Output 设备。

  • Audio Output 必须和 DA 配合起来才能正常工作,用户必须清楚 DA 发送的数据格式和通道的关系才能从正确的通道发送数据。

  • u32ClkSel在CV182x processor下无需配置。

  • Audio Output 设备主模式时,决定 Audio Output 设备输出时钟的关键配置项是采样率、采样精度以及 通道数目,采样精度乘以通道数目即为 Audio Output 设备时序一次采样的位宽。

  • CV182x扩展标志对 Audio Output 设备无效,无需设定。

  • Audio Output 设备属性结构体中其他项请参见 Audio Input 模块中相关接口的描述。

【举例】

无。

10.3.4.2. CVI_AO_GetPubAttr

【描述】

获取 Audio Output 设备属性。

【语法】

CVI_S32 CVI_AO_GetPubAttr(AUDIO_DEV AoDevId, AIO_ATTR_S *pstAttr);

【参数】

参数名称

描述

输入/输出

AoDevId

音频设备号。 设备号预设为0,在客制化未要求扩充下,设置超过2,返回错误。

输入

pstAttr

音频输出设备属性指针。

输出

【返回值】

参数名称

描述

0

成功。

非 0

失败,其值为 错误码

【需求】

  • 头文件:cvi_comm_aio.h,cvi_audio.h

  • 库文件:ibcvi_audio.a

【注意事项】

  • 获取的属性为前一次配置的属性。

  • 如果从未配置过属性,则返回属性未配置的错误。

【举例】

CVI_S32 s32ret;
AUDIO_DEV AoDevId = 0;
AIO_ATTR_S stAttr;

s32ret = CVI_AO_GetPubAttr(AoDevId, &stAttr);
if(s32ret != CVI_SUCCESS) {
printf("get ao %d attr err:0x%x\n", AoDevId,s32ret);
return s32ret; }

10.3.4.3. CVI_AO_Enable

【描述】

使能 Audio Output 设备。

【语法】

CVI_S32 CVI_AO_Enable(AUDIO_DEV AoDevId);

【参数】

参数名称

描述

输入/输出

AoDevId

音频设备号。设备号预设为0,在客制化未要求扩充下,设置超过2,返回错误。

输入

【返回值】

参数名称

描述

0

成功。

非 0

失败,其值为 错误码

【需求】

  • 头文件:cvi_comm_aio.h,cvi_audio.h

  • 库文件:libcvi_audio.a

【注意事项】

  • 要求在启用前配置 Audio Output 设备属性,否则会返回属性未配置的错误。

  • 如果 Audio Output 设备已经启用,则直接返回成功。

【举例】

CVI_S32 i;
CVI_S32 s32Ret;

s32Ret = CVI_AO_SetPubAttr(AoDevId, pstAioAttr);
if (s32Ret != CVI_SUCCESS) {
          printf("%s: CVI_AO_SetPubAttr(%d) failed with %#x!\n", __func__,
                  AoDevId, s32Ret);
          return CVI_FAILURE;
}

s32Ret = CVI_AO_Enable(AoDevId);
if (s32Ret != CVI_SUCCESS) {
          printf("%s: CVI_AO_Enable(%d) failed with %#x!\n", __func__, AoDevId,
                  s32Ret);
          return CVI_FAILURE;
}

for (i = 0; i < s32AoChnCnt; i++) {
          s32Ret = CVI_AO_EnableChn(AoDevId, i / (pstAioAttr->enSoundmode + 1));
          if (s32Ret != CVI_SUCCESS) {
                    printf("%s: CVI_AO_EnableChn(%d) failed with %#x!\n", __func__, i,
                            s32Ret);
                    return CVI_FAILURE;
          }

          if (bResampleEn == CVI_TRUE) {
                    s32Ret = CVI_AO_DisableReSmp(AoDevId, i);
                    s32Ret |= CVI_AO_EnableReSmp(AoDevId, i, enInSampleRate);
                    if (s32Ret != CVI_SUCCESS) {
                                printf("%s: CVI_AO_EnableReSmp(%d,%d) failed with %#x!\n", __func__,
                                      AoDevId, i, s32Ret);
                                return CVI_FAILURE;
                    }
          }

}

s32Ret = CVI_AO_EnableChn(AoDevId, AO_SYSCHN_CHNID);
if (s32Ret != CVI_SUCCESS) {
          printf("%s: CVI_AO_EnableChn(%d) failed with %#x!\n", __func__, i,
                  s32Ret);
          return CVI_FAILURE;
}

10.3.4.4. CVI_AO_Disable

【描述】

停用 Audio Output 设备。

【语法】

CVI_S32 CVI_AO_Disable(AUDIO_DEV AoDevId);

【参数】

参数名称

描述

输入/输出

AoDevId

音频设备号。设备号预设为0,在客制化未要求扩充下,设置超过2,返回错误。

输入

【返回值】

参数名称

描述

0

成功。

非 0

失败,其值为 错误码

【需求】

  • 头文件:cvi_comm_aio.h,cvi_audio.h

  • 库文件:libcvi_audio.a

【注意事项】

禁用 Audio Output 设备前必须先禁用设备下所有 Audio Output 通道。

【举例】

无。

10.3.4.5. CVI_AO_EnableChn

【描述】

启用 Audio Output 通道。

【语法】

CVI_S32 CVI_AO_EnableChn(AUDIO_DEV AoDevId, AO_CHN AoChn);

【参数】

参数名称

描述

输入/输出

AoDevId

音频设备号。设备号预设为0,在客制化未要求扩充下,设置超过2,返回错误。

输入

AoChn

音频输出通道号。 支持的通道范围由 Audio Output 描述入设备属性中的最大通道个数 u32ChnCnt 决定与声道模式 enSoundmode 决定。

输入

【返回值】

参数名称

描述

0

成功。

非 0

失败,其值为 错误码

【需求】

  • 头文件:cvi_comm_aio.h,cvi_audio.h

  • 库文件:libcvi_audio.a

【注意事项】

启用 Audio Output 通道前,必须先启用其所属的 Audio Output 设备,否则返回设备未启动的错误码

【举例】

无。

10.3.4.6. CVI_AO_DisableChn

【描述】

禁用 Audio Output 通道。

【语法】

CVI_S32 CVI_AO_DisableChn(AUDIO_DEV AoDevId, AO_CHN AoChn);

【参数】

参数名称

描述

输入/输出

AoDevId

音频设备号。设备号预设为0,在客制化未要求扩充下,设置超过2,返回错误。

输入

AoChn

音频输出通道号。 支持的通道范围由 Audio Output 描述入设备属性中的最大通道个数 u32ChnCnt 决定与声道模式 enSoundmode 决定。

输入

【返回值】

参数名称

描述

0

成功。

非 0

失败,其值为 错误码

【需求】

  • 头文件:cvi_comm_aio.h,cvi_audio.h

  • 库文件:libcvi_audio.a

【注意事项】

无。

【举例】

无。

10.3.4.7. CVI_AO_SendFrame

【描述】

发送 Audio Output 音框。

【语法】

CVI_S32 _AO_SendFrame(AUDIO_DEV AoDevId, AO_CHN AoChn, const AUDIO_FRAME_S *pstData, CVI_S32 s32MilliSec);

【参数】

参数名称

描述

输入/输出

AoDevId

音频设备号。设备号预设为0,在客制化未要求扩充下,设置超过2,返回错误。

输入

AoChn

音频输出通道号。 支持的通道范围由 Audio Output 描述入设备属性中的最大通道个数u32ChnCnt决定与声道模式 enSoundmode 决定。

输入

pstData

音频帧结构体指针。

输入

s32MilliSec

发送数据的超时时间
-1 表示阻塞模式;
0描述入表示非阻塞模式;
>0 表示阻塞 s32MilliSec 毫秒,超时则报错返回。

输入

【返回值】

参数名称

描述

0

成功。

非 0

失败,其值为 错误码

【需求】

  • 头文件:cvi_comm_aio.h,cvi_audio.h

  • 库文件:libcvi_audio.a

【注意事项】

  • 该接口用于用户主动发送音频帧至 Audio Output 输出。

  • Audio Output 通道已经通过系统绑定 CVI_SYS_Bind)接口与 Audio Input 或 ADEC 绑定,不需要也不建议调此接口。

  • 调用该接口发送音频帧到 Audio Output 输出时,必须先使能对应的 Audio Output 通道。

【举例】

无。

10.3.4.8. CVI_AO_EnableReSmp

【描述】

启用 Audio Output 重采样。

【语法】

CVI_S32 CVI_AO_EnableReSmp(AUDIO_DEV AoDevId, AO_CHN AoChn, AUDIO_SAMPLE_RATE_E enInSampleRate);

【参数】

参数名称

描述

输入/输出

AoDevId

音频设备号。设备号预设为0,在客 制化未要求扩充下,设置超过2,返回错误。

输入

AoChn

音频输出通道号。 支持的通道范围由 Audio Output 描述入设备属性中的最大通道个数 u32ChnCnt决定与声道模式 enSoundmode 决定。

输入

enInSampleRate

音频重采样的输入采样率。

输入

【返回值】

参数名称

描述

0

成功。

非 0

失败,其值为 错误码

【需求】

  • 头文件:cvi_comm_aio.h,cvi_audio.h

  • 库文件:libcvi_audio.a

【注意事项】

  • 在使用CVI_AUD_SYS_Bind的状态下,不支持此API

  • 应该在启用 Audio Output 通道之后,绑定 Audio Output 通道之前,调用此接口启用重采样功能。

  • 允许重复启用重采样功能,但必须保证后配置的重采样输入采样率与之前配置的 重采样输入采样率一样。

  • 在禁用 Audio Output 通道后,如果重新启用 Audio Output 通道,并使用重采样功能,需调用此接口 重新启用重采样。

  • Audio Output 重采样的输入采样率必须与 Audio Output 设备属性配置的采样率不相同。

【举例】

无。

10.3.4.9. CVI_AO_DisableReSmp

【描述】

禁用 Audio Output 重采样。

【语法】

CVI_S32 CVI_AO_DisableReSmp(AUDIO_DEV AoDevId, AO_CHN AoChn);

【参数】

参数名称

描述

输入/输出

AoDevId

音频设备号。 设备号预设为0,在客制化未要求扩充下,设置超过2,返回错误。

输入

AoChn

音频输出通道号。 支持的通道范围由 Audio Output描述入设备属性中的最大通道个数 u32ChnCnt决定与声道模式 enSoundmode决定。

输入

【返回值】

参数名称

描述

0

成功。

非 0

失败,其值为 错误码

【需求】

  • 头文件:cvi_comm_aio.h,cvi_audio.h

  • 库文件:libcvi_audio.a

【注意事项】

不再使用 Audio Output 重采样功能的话,应该调用此接口将其禁用

【举例】

无。

10.3.4.10. CVI_AO_PauseChn

【描述】

暂停 Audio Output 通道。

【语法】

CVI_S32 CVI_AO_PauseChn(AUDIO_DEV AoDevId, AO_CHN AoChn);

【参数】

参数名称

描述

输入/输出

AoDevId

音频设备号。 设备号预设为0,在客制化未要求扩充下,设置超过2,返回错误。

输入

AoChn

音频输出通道号。 支持的通道范围由 Audio Output 设备属性中的最大通道个数 u32ChnCnt决定与声道模式 enSoundmode决定。

输入

【返回值】

参数名称

描述

0

成功。

非 0

失败,其值为 错误码

【需求】

  • 头文件:cvi_comm_aio.h,cvi_audio.h

  • 库文件:libcvi_audio.a

【注意事项】

Audio Output 通道暂停后,如果绑定的 ADEC 信道继续向此信道发送音频帧数据,发送的音频帧数据将会被阻塞;而如果绑定的 Audio Input 信道继续向此信道发送音频帧数据,在 通道缓冲未满的情况下则将音频帧放入缓冲区,在满的情况下则将音频帧丢弃。

Audio Output 通道为禁用状态时,不允许调用此接口暂停 Audio Output 通道。

【举例】

无。

10.3.4.11. CVI_AO_ResumeChn

【描述】

恢复 Audio Output 通道。

【语法】

CVI_S32 CVI_AO_ResumeChn(AUDIO_DEV AoDevId, AO_CHN AoChn);

【参数】

参数名称

描述

输入/输出

AoDevId

音频设备号。 设备号预设为0,在客制化未要求扩充下,设置超过2,返回错误。

输入

AoChn

音频输出通道号。 支持的通道范围由 Audio Output 设备属性中的最大通道个数 u32ChnCnt决定与声道模式 enSoundmode决定。

输入

【返回值】

参数名称

描述

0

成功。

非 0

失败,其值为 错误码

【需求】

  • 头文件:cvi_comm_aio.h,cvi_audio.h

  • 库文件:libcvi_audio.a

【注意事项】

  • Audio Output 通道暂停后可以通过调用此接口重新恢复

  • Audio Output 通道为暂停状态或使能状态下,调用此接口返回成功;否则调用将返回错误

【举例】

无。

10.3.4.12. CVI_AO_ClearChnBuf

【描述】

清除 Audio Output 通道中当前的音频数据区块。

【语法】

CVI_S32 CVI_AO_ClearChnBuf(AUDIO_DEV AoDevId, AO_CHN AoChn);

【参数】

参数名称

描述

输入/输出

AoDevId

音频设备号。设备号预设为0,在客制化未要求扩充下,设置超过2,返回错误。

输入

AoChn

音频输出通道号。 支持的通道范围由 Audio Output 设备属性中的最大通道个数 u32ChnCnt决定与声道模式 enSoundmode 决定。

输入

【返回值】

参数名称

描述

0

成功。

非 0

失败,其值为 错误码

【需求】

  • 头文件:cvi_comm_aio.h,cvi_audio.h

  • 库文件:libcvi_audio.a

【注意事项】

  • 在 Audio Output 通道成功启用后再调用此接口。

  • 为完全清除解码回放通路上所有区块数据,此接口还应该与 CVI_ADEC_ClearChnBuf 接口配合使用。

  • 不推荐使用

【举例】

无。

10.3.4.13. CVI_AO_QueryChnStat

【描述】

查询 Audio Output 通道中当前的音频数据区块状态。

【语法】

CVI_S32 CVI_AO_QueryChnStat(AUDIO_DEV AoDevId, AO_CHN AoChn, AO_CHN_STATE_S *pstStatus);

【参数】

参数名称

描述

输入/输出

AoDevId

音频设备号。设备号预设为0,在客制化未要求扩充下,设置超过2,返回错误。

输入

AoChn

音频输出通道号。 支持的通道范围由 Audio Output 设备属性中的最大通道个数 u32ChnCnt决定与声道模式 enSoundmode 决定。

输入

pstStatus

区块状态结构体指针。

输出

【返回值】

参数名称

描述

0

成功。

非 0

失败,其值为 错误码

【需求】

  • 头文件:cvi_comm_aio.h,cvi_audio.h

  • 库文件:libcvi_audio.a

【注意事项】

在 Audio Output 通道成功启用后再调用此接口。

【举例】

无。

10.3.4.14. CVI_AO_SetTrackMode

【描述】

设置 Audio Output 设备声道模式。

【语法】

CVI_S32 CVI_AO_SetTrackMode(AUDIO_DEV AoDevId, AUDIO_TRACK_MODE_E enTrackMode);

【参数】

参数名称

描述

输入/输出

AoDevId

音频设备号。设备号预设为0,在客制化未要求扩充下,设置超过2,返回错误。

输入

enTrackMode

音频设备声道模式。

输入

【返回值】

参数名称

描述

0

成功。

非 0

失败,其值为 错误码

【需求】

  • 头文件:cvi_comm_aio.h,cvi_audio.h

  • 库文件:libcvi_audio.a

【注意事项】

  • 在 Audio Output 设备成功启用后再调用此接口。

  • Audio Output 设备工作在 I2S 模式时,支持设置声道模式,PCM 模式下不支持。

【举例】

CVO_S32 s32Ret;
AUDIO_DEV AoDev = 0;
AUDIO_TRACK_MODE_E enTrackMode = AUDIO_TRACK_NORMAL;
AUDIO_TRACK_MODE_E temp;

s32Ret = CVI_AO_SetTrackMode(AoDev, enTrackMode);

if (CVI_SUCCESS != s32Ret) {
printf("Ao set track mode failure! AoDev: %d, enTrackMode: %d, s32Ret: 0x%x.\n", AoDev, enTrackMode, s32Ret);
return s32Ret;
}

s32Ret = CVI_AO_GetTrackMode(AoDev, &temp);
if (s32Ret!=CVI_SUCCESS)  {
printf("Ao get track mode failure! AoDev: %d, s32Ret: 0x%x.\n", AoDev, s32Ret);
return s32Ret;
}

10.3.4.15. CVI_AO_GetTrackMode

【描述】

获取 Audio Output 设备声道模式。

【语法】

CVI_S32 CVI_AO_GetTrackMode(AUDIO_DEV AoDevId, AUDIO_TRACK_MODE_E *penTrackMode);

【参数】

参数名称

描述

输入/输出

AoDevId

音频设备号。设备号预设为0,在客制化未要求扩充下,设置超过2,返回错误。

输入

enTrackMode

音频设备声道模式。

输出

【返回值】

参数名称

描述

0

成功。

非 0

失败,其值为 错误码

【需求】

  • 头文件:cvi_comm_aio.h,cvi_audio.h

  • 库文件:libcvi_audio.a

【注意事项】

  • 在 Audio Output 设备成功启用后再调用此接口。

  • Audio Output 设备工作在 I2S 模式时,支持获取声道模式,PCM 模式下不支持。

【举例】

无。

10.3.4.16. CVI_AO_SetVolume

【描述】

设置 Audio Output 设备音量大小。

【语法】

CVI_S32 CVI_AO_SetVolume(AUDIO_DEV AoDevId, CVI_S32 s32VolumeDb);

【参数】

参数名称

描述

输入/输出

AoDevId

音频设备号。设备号预设为0,在客制化未要求扩充下,设置超过2,返回错误。

输入

s32VolumeDb

音量范围为[32~0], 分别对应增益 [0d - 22.5dB], 每一阶降1.5dB。

输入

【返回值】

参数名称

描述

0

成功。

非 0

失败,其值为 错误码

【需求】

  • 头文件:cvi_comm_aio.h,cvi_audio.h

  • 库文件:libcvi_audio.a

【注意事项】

  • 在 Audio Output 设备成功启用后再调用此接口。

【举例】

无。

10.3.4.17. CVI_AO_GetVolume

【描述】

获取 Audio Output 设备音量大小。

【语法】

CVI_S32 CVI_AO_GetVolume(AUDIO_DEV AoDevId, CVI_S32 *ps32VolumeDb);

【参数】

参数名称

描述

输入/输出

AoDevId

音频设备号。设备号预设为0,在客制化未要求扩充下,设置超过2,返回错误。

输入

ps32VolumeDb

音频设备音量大小指针。音量范围为[32~0],分别对应增益 [0dB ~ -22.5dB], 每一阶降1.5dB。

输出

【返回值】

参数名称

描述

0

成功。

非 0

失败,其值为 错误码

【需求】

  • 头文件:cvi_comm_aio.h,cvi_audio.h

  • 库文件:libcvi_audio.a

【注意事项】

在 Audio Output 设备成功启用后再调用此接口。

【举例】

无。

10.3.4.18. CVI_AO_SetMute

【描述】

设置 Audio Output 设备静音状态。

【语法】

CVI_S32 CVI_AO_SetMute(AUDIO_DEV AoDevId, CVI_BOOL bEnable, const AUDIO_FADE_S *pstFade);

【参数】

参数名称

描述

输入/输出

AoDevId

音频设备号。设备号预设为0,在客制化未要求扩充下,设置超过2,返回错误。

输入

bEnable

音频设备是否启用静音。 CVI_TRUE:启用静音功能;CVI_FALSE:关闭静音功能

输入

pstFade

淡入淡出结构体指针。

输入

【返回值】

参数名称

描述

0

成功。

非 0

失败,其值为 错误码

【需求】

  • 头文件:cvi_comm_aio.h,cvi_audio.h

  • 库文件:libcvi_audio.a

【注意事项】

  • 在 Audio Output 设备成功启用后再调用此接口。

【举例】

无。

10.3.4.19. CVI_AO_GetMute

【描述】

获取 Audio Output 设备静音状态。

【语法】

CVI_S32 CVI_AO_GetMute(AUDIO_DEV AoDevId, CVI_BOOL *pbEnable, AUDIO_FADE_S *pstFade);

【参数】

参数名称

描述

输入/输出

AoDevId

音频设备号。设备号预设为0,在客制化未要求扩充下,设置超过2,返回错误。

输入

bEnable

音频设备静音状态指针。

输出

pstFade

淡入淡出结构体指针。

输出

【返回值】

参数名称

描述

0

成功。

非 0

失败,其值为 错误码

【需求】

  • 头文件:cvi_comm_aio.h,cvi_audio.h

  • 库文件:libcvi_audio.a

【注意事项】

  • 在 Audio Output 设备成功启用后再调用此接口。

【举例】

无。

10.3.4.20. CVI_AO_SaveFile

【描述】

目前不支持此功能,用户可透过CVI_AO_SendFrame前存盘。

【语法】

CVI_S32 CVI_AO_SaveFile(AUDIO_DEV AoDevId, AO_CHN AoChn, AUDIO_SAVE_FILE_INFO_S* pstSaveFileInfo);

【参数】

【返回值】

参数名称

描述

0

成功。

非 0

失败,其值为 错误码

【需求】

【注意事项】

【举例】

无。

10.3.4.21. CVI_AO_ClrPubAttr

【描述】

清除 Audio Output 设备属性。

【语法】

CVI_S32 CVI_AO_ClrPubAttr(AUDIO_DEV AoDevId);

【参数】

参数名称

描述

输入/输出

AoDevId

音频设备号。 设备号预设为0,在客制化未要求扩充下,设置超过2,返回错误。

输入

【返回值】

参数名称

描述

0

成功。

非 0

失败,其值为 错误码

【需求】

  • 头文件:cvi_comm_aio.h,cvi_audio.h

  • 库文件:libcvi_audio.a

【注意事项】

  • 清除设备属性前,需要先停止设备。

  • Audio Input 设备及Audio Output 设备时钟无需设定。

【举例】

无。

10.3.5. 音频编码

音频编码主要专责音框数据转换,Cvitek支持G.711、G.726、LDPCM相关编码,编码后的音框数据较小,但语音编码属于有损压缩(lossy compression),音质会有所差异,不同编码使用的bit rate/sample rate亦有所不同,用户需要知道该编码协议的规范并设定对应API,否则函式将回报错误。

Codec

Sampling Rat e(KHZ)

Bandwidth(kbps)

Nominal Bandwidth(kbps)

License

G.711*

8

64

87.2

Open Source

G.726

8

16/24/32/40

47.2/55.2

Open Source

*G.711 包含a-law/mu-law

AENC模块提供以下API:

10.3.5.1. CVI_AENC_CreateChn

【描述】

创建音频编码通道。

【语法】

CVI_S32 CVI_AENC_CreateChn(AENC_CHN AeChn, const AENC_CHN_ATTR_S *pstAttr);

【参数】

参数名称

描述

输入/输出

AeChn

编码设备信道号。取值范围:[0, AENC_MAX_CHN_NUM]

输入

pstAttr

编码通道属性指针

输入

【返回值】

参数名称

描述

0

成功。

非 0

失败,其值为 错误码

【需求】

  • 头文件:cvi_comm_aio.h,cvi_audio.h,cvi_comm_aenc.h

  • 库文件:libcvi_audio.a,libcvi_VoiceEngine.so,libcvi_RES1.so

【注意事项】

  • 目前支持 G711、G726、ADPCM

  • 支持输入pcm 音框,音讯格式(format)支持16 位小端序(S16LE)其余不支持,使用时请同步将Audio Input attribute/AENC attribute 做对应设置,如要在VQE之后使用,请将音框长度设为160的倍数,以符合Cvitek VQE规范。

  • 音频编码的部分属性需要与输入的音频数据属性相匹配,例如采样率、帧长(每 帧采样点数目)等

  • buffer 大小以帧为单位,取值范围是[2, MAX_BUFFERING_DEPTH],建议配置 为 10 以上,过小的 buffer 配置可能导致丢帧等异常。

【举例】

无。

10.3.5.2. CVI_AENC_DestroyChn

【描述】

销毁音频编码通。

【语法】

CVI_S32 CVI_AENC_DestroyChn(AENC_CHN AeChn);

【参数】

参数名称

描述

输入/输出

AeChn

编码设备信道号。取值范围:[0, AENC_MAX_CHN_NUM]

输入

【返回值】

参数名称

描述

0

成功。

非 0

失败,其值为 错误码

【需求】

  • 头文件:cvi_comm_aio.h,cvi_audio.h、cvi_comm_aenc.h

  • 库文件:libcvi_audio.a,libcvi_VoiceEngine.so,libcvi_RES1.so

【注意事项】

  • 通道如未创建,则调用本函式无效。

  • 如果正在获取/释放码流或者发送帧时销毁该通道,则会返回失败,用户同步处理时需要注意。

【举例】

无。

10.3.5.3. CVI_AENC_SendFrame

【描述】

发送音频编码音频帧。

【语法】

CVI_S32 CVI_AENC_SendFrame(AENC_CHN AeChn, const AUDIO_FRAME_S *pstFrm, const AEC_FRAME_S *pstAecFrm);

【参数】

参数名称

描述

输入/输出

AeChn

编码设备信道号。取值范围:[0, AENC_MAX_CHN_NUM]

输入

pstFrm

音频帧结构体指针。

输入

pstAecFrm

回声抵消参考帧结构体指针。

输入

【返回值】

参数名称

描述

0

成功。

非 0

失败,其值为 错误码

【需求】

  • 头文件:cvi_comm_aio.h,cvi_audio.h、cvi_comm_aenc.h

  • 库文件:libcvi_audio.a,libcvi_VoiceEngine.so,libcvi_RES1.so

【注意事项】

  • 通道如未创建,呼叫本函式无效。

  • 如果不需要回声抵消,pstAecFrm 可置为 NULL。

  • 该接口用于用户主动发送音频帧进行编码,如果 AENC 通道已经通过系统绑定接口与 Audio Input 绑定,不需要也不建议调此接口。

【举例】

s32Ret = CVI_AI_GetChnParam(AiDev, AiChn, &stAiChnPara);
if (s32Ret != CVI_SUCCESS) {
          printf("%s: Get ai chn param failed\n", __func__);
          return NULL;
}

stAiChnPara.u32UsrFrmDepth = 10;
s32Ret = CVI_AI_SetChnParam( AiDev,  AiChn, &stAiChnPara);
if (s32Ret != CVI_SUCCESS) {
          printf("%s: set ai chn param failed\n", __func__);
          return NULL;
}

while ( 1) {
          /* get frame from ai chn */
          memset(&stAecFrm, 0, sizeof(AEC_FRAME_S));
          s32Ret = CVI_AI_GetFrame( AiDev,  AiChn, &stFrame,
                                                &stAecFrm, CVI_FALSE);
          if (s32Ret != CVI_SUCCESS) {
                    printf("CVI_AI_GetFrame none!!\n");
                    continue;
          }
          /* send frame to encoder */
          if ( bSendAenc == CVI_TRUE) {
                    s32Ret = CVI_AENC_SendFrame( AencChn, &stFrame, &stAecFrm);
                    if (s32Ret != CVI_SUCCESS) {
                                printf("%s: CVI_AENC_SendFrame(%d), failed with %#x!\n",
                                      __func__,  AencChn, s32Ret);
                                bStart = CVI_FALSE;
                                return NULL;
                    }
          }
          /* send frame to ao */
          /* If owner toggle bSendAenc, do not toggle bSendAo */
          /* You cannot send encode frame to CVI_AO_SendFrame */
          /* It cannot play out encode frame by only AO_SendFrame*/
          if ( bSendAo == CVI_TRUE) {
                    s32Ret = CVI_AO_SendFrame( AoDev,  AoChn, &stFrame, 1000);
                    if (s32Ret != CVI_SUCCESS) {
                                printf("%s: CVI_AO_SendFrame(%d, %d), failed with %#x!\n",
                                      __func__,  AoDev,  AoChn, s32Ret);
                                bStart = CVI_FALSE;
                                return NULL;
                    }
          }

          /* finally you must release the stream */
          s32Ret = CVI_AI_ReleaseFrame( AiDev,  AiChn, &stFrame,
                                                      &stAecFrm);

          if (s32Ret != CVI_SUCCESS) {
                    printf("%s: CVI_AI_ReleaseFrame(%d, %d), failed with %#x!\n",
                                __func__,  AiDev,  AiChn, s32Ret);
                      bStart = CVI_FALSE;
                    return NULL;
          }
}

10.3.5.4. CVI_AENC_GetStream

【描述】

获取编码后码流。

【语法】

CVI_S32 CVI_AENC_GetStream(AENC_CHN AeChn, AUDIO_STREAM_S *pstStream, CVI_S32 s32MilliSec);

【参数】

参数名称

描述

输入/输出

AeChn

编码设备信道号。取值范围:[0, AENC_MAX_CHN_NUM]

输入

pstStream

获取的音频码流。

输出

s32MilliSec

获取数据的超时时间
-1 表示阻塞模式,无数据时一直等待;
0表示非阻塞模式,无数据时则报错返回;
>0 表示阻塞 s32MilliSec 毫秒,超时则报错返回。

输入

【返回值】

参数名称

描述

0

成功。

非 0

失败,其值为 错误码

【需求】

  • 头文件:cvi_comm_aio.h,cvi_audio.h、cvi_comm_aenc.h

  • 库文件:libcvi_audio.a,libcvi_VoiceEngine.so,libcvi_RES1.so

【注意事项】

  • 必须创建通道后才可能获取码流,否则直接返回失败,如果在获取码流过程中销 毁通道则会立刻返回失败。

  • s32MilliSec 的值必须大于等于-1,等于-1 时采用阻塞模式获取数据,等于 0 时采 用非阻塞模式获取数据,大于 0 时,阻塞 s32MilliSec 毫秒后,没有数据则返回超时并报。

【举例】

无。

10.3.5.5. CVI_AENC_ReleaseStream

【描述】

释放从音频编码通道获取的码流。

【语法】

CVI_S32 CVI_AENC_ReleaseStream(AENC_CHN AeChn, const AUDIO_STREAM_S *pstStream);

【参数】

参数名称

描述

输入/输出

AeChn

编码设备信道号。取值范围:[0, AENC_MAX_CHN_NUM]

输入

pstStream

获取的音频码流之指针。

输入

【返回值】

参数名称

描述

0

成功。

非 0

失败,其值为 错误码

【需求】

  • 头文件:cvi_comm_aio.h,cvi_audio.h、cvi_comm_aenc.h

  • 库文件:libcvi_audio.a,libcvi_VoiceEngine.so,libcvi_RES1.so

【注意事项】

  • 码流最好能够在使用完之后立即释放,如果不及时释放,会导致编码过程阻塞。

  • 释放的码流必须是从该通道获取的码流,不得对码流信息结构体进行任何修改,否则会导致码流不能释放,使此码流 buffer 丢失,甚至导致程序异常。

  • 释放码流时必须保证通道已经被创建,否则直接返回失败,如果在释放码流过程 中销毁通道则会立刻返回失败。

【举例】

无。

10.3.5.6. CVI_AENC_SaveFile

【描述】

开启音频编码之前信道存文件功能。

【语法】

CVI_S32 CVI_AENC_SaveFile(AENC_CHN AeChn, const AUDIO_SAVE_FILE_INFO_S *pstSaveFileInfo);

【参数】

参数名称

描述

输入/输出

AeChn

音频编码通道号。 取值范围:[0, AENC_MAX_CHN_NUM]。

输入

pstSaveFileInfo

音频保存文件属性结构体指针。

输入

【返回值】

参数名称

描述

0

成功。

非 0

失败,其值为 错误码

【需求】

  • 头文件:cvi_comm_aio.h,cvi_audio.h、cvi_comm_aenc.h

  • 库文件:libcvi_audio.a,libcvi_VoiceEngine.so,libcvi_RES1.so

【注意事项】

【举例】

无。

10.3.5.7. CVI_AENC_QueryFileStatus

【描述】

查询频编码通道是否处于存文件的状。

【语法】

CVI_S32 CVI_AENC_QueryFileStatus(AENC_CHN AeChn, AUDIO_FILE_STATUS_S* pstFileStatus);

【参数】

参数名称

描述

输入/输出

AeChn

音频编码通道号。 取值范围:[0, AENC_MAX_CHN_NUM]。

输入

pstFileStatus

状态属性结构体指针。

输出

【返回值】

参数名称

描述

0

成功。

非 0

失败,其值为 错误码

【需求】

  • 头文件:cvi_comm_aio.h,cvi_audio.h、cvi_comm_aenc.h

  • 库文件:libcvi_audio.a,libcvi_VoiceEngine.so,libcvi_RES1.so

【注意事项】

【举例】

无。

10.3.5.8. CVI_AENC_GetStreamBufInfo

【描述】

获取音频码流 buffer 相关信息。

【语法】

CVI_S32 CVI_AENC_GetStreamBufInfo(AENC_CHN AeChn, CVI_U32 *pu32PhysAddr, CVI_U32 *pu32Size);

【参数】

参数名称

描述

输入/输出

AeChn

音频编码通道号。 取值范围:[0, AENC_MAX_CHN_NUM]。

输入

pu32PhysAddr

音频码流 buffer 的物理地址。

输出

pu32Size

音频码流 buffer 的长度,以 byte 为单位

输出

【返回值】

参数名称

描述

0

成功。

非 0

失败,其值为 错误码

【需求】

  • 头文件:cvi_comm_aio.h,cvi_audio.h、cvi_comm_aenc.h

  • 库文件:libcvi_audio.a,libcvi_VoiceEngine.so,libcvi_RES1.so

【注意事项】

无。

【举例】

无。

10.3.5.9. CVI_AENC_SetMute

【描述】

设置AENC静音状态

【语法】

CVI_AENC_SetMute (AENC_CHN AeChn, CVI_BOOL bEnable);

【参数】

参数名称

描述

输入/输出

AeChn

编码设备信道号。取值范围:[0, AENC_MAX_CHN_NUM]

输入

bEnable

音频设备是否启用静音。 CVI_TRUE:启用静音功能;CVI_FALSE:关闭静音功能

输入

【返回值】

参数名称

描述

0

成功。

非 0

失败,其值为 错误码

【需求】

  • 头文件:cvi_audio.h

  • 库文件:libcvi_audio.a

【注意事项】

  • 在AENC创建设备信号通道后才能使用

【举例】

无。

10.3.5.10. CVI_AENC_GetMute

【描述】

得到AENC设备静音状态

【语法】

CVI_AENC_GetMute(AENC_CHN AeChn, CVI_BOOL *pbEnable);

【参数】

参数名称

描述

输入/输出

AeChn

编码设备信道号。取值范围:[0, AENC_MAX_CHN_NUM]

输入

pbEnable

音频设备禁音状态指针

输入

【返回值】

参数名称

描述

0

成功。

非 0

失败,其值为 错误码

【需求】

  • 头文件:cvi_audio.h

  • 库文件:libcvi_audio.a

【注意事项】

  • 在AENC创建设备信号通道后才能使用

【举例】

无。

10.3.6. 音频解码

音频解码主要实现创建解码通道、发送音频码流解码及获取解码后音频帧等功能。

下面列出支持的API及细部内容:

10.3.6.1. CVI_ADEC_CreateChn

【描述】

创建音频解码通道。

【语法】

CVI_S32 CVI_ADEC_CreateChn(ADEC_CHN AdChn, const ADEC_CHN_ATTR_S *pstAttr);

【参数】

参数名称

描述

输入/输出

AdChn

通道号。 取值范围:[0, ADEC_MAX_CHN_NUM]。

输入

pstAttr

通道属性指针。

输入

【返回值】

参数名称

描述

0

成功。

非 0

失败,其值为 错误码

【需求】

  • 头文件:cvi_comm_aio.h,cvi_audio.h、cvi_comm_adec.h

  • 库文件:libcvi_audio.a,libcvi_VoiceEngine.so,libcvi_RES1.so

【注意事项】

  • 目前支持 G711、G726、ADPCM。

  • 音频解码的部分属性需要与输出设备属性相匹配,例如采样率、帧长(每帧采样 点数目)等

【举例】

无。

10.3.6.2. CVI_ADEC_DestroyChn

【描述】

销毁音频解码通道。

【语法】

CVI_S32 CVI_ADEC_DestroyChn(ADEC_CHN AdChn);

【参数】

参数名称

描述

输入/输出

AdChn

通道号。 取值范围:[0, ADEC_MAX_CHN_NUM]。

输入

【返回值】

参数名称

描述

0

成功。

非 0

失败,其值为 错误码

【需求】

  • 头文件:cvi_comm_aio.h,cvi_audio.h、cvi_comm_adec.h

  • 库文件:libcvi_audio.a,libcvi_VoiceEngine.so,libcvi_RES1.so

【注意事项】

  • 通道未创建的情况下调用此接口会返回成功。

  • 如果正在获取/释放码流或者发送帧,销毁该通道则这些操作都会立即返回失败。

【举例】

无。

10.3.6.3. CVI_ADEC_SendStream

【描述】

向音频解码通道发送码流。

【语法】

CVI_S32 CVI_ADEC_SendStream(ADEC_CHN AdChn, const AUDIO_STREAM_S *pstStream, CVI_BOOL bBlock);

【参数】

参数名称

描述

输入/输出

AdChn

通道号。 取值范围:[0, ADEC_MAX_CHN_NUM]。

输入

pstStream

音频码流

输入

bBlock

CVI_TRUE:阻塞。 CVI_FALSE:非阻塞。

输入

【返回值】

参数名称

描述

0

成功。

非 0

失败,其值为 错误码

【需求】

  • 头文件:cvi_comm_aio.h,cvi_audio.h、cvi_comm_adec.h

  • 库文件:libcvi_audio.a,libcvi_VoiceEngine.so,libcvi_RES1.so

【注意事项】

  • stream 方式用于不确定码流包为一帧(大于等于一帧)的情况下,效率较低,且可能会有延迟

  • 发送数据时必须保证通道已经被创建,否则直接返回失败,如果在送数据过程中 销毁通道则会立刻返回失败。

  • 确保发送给 ADEC 通道的码流数据的正确性,否则可能引起解码器异常退出。

【举例】

无。

10.3.6.4. CVI_ADEC_ClearChnBuf

【描述】

清除 ADEC 通道中当前的音频数据区块。

【语法】

CVI_S32 CVI_ADEC_ClearChnBuf(ADEC_CHN AdChn);

【参数】

参数名称

描述

输入/输出

AdChn

通道号。 取值范围:[0, ADEC_MAX_CHN_NUM]。

输入

【返回值】

参数名称

描述

0

成功。

非 0

失败,其值为 错误码

【需求】

  • 头文件:cvi_comm_aio.h,cvi_audio.h、cvi_comm_adec.h

  • 库文件:libcvi_audio.a,libcvi_VoiceEngine.so,libcvi_RES1.so

【注意事项】

  • 要求解码通道已经被创建。

  • 使用本接口时,不建议使用 stream 方式解码。使用 stream 方式解码进行清除区块作时,用户需要确保清除完区块后,发送给解码器的数据必须是完整的一帧码流,否则可能导致解码器不能正常工作。

  • 无论是否使用 stream方式解码,都要确保送数据解码的操作和清除区块的操作之间的同步。

【举例】

无。

10.3.6.5. CVI_ADEC_GetFrame

【描述】

获取解碼后音框。

【语法】

CVI_S32 CVI_ADEC_GetFrame(ADEC_CHN AdChn, AUDIO_FRAME_INFO_S *pstFrmInfo, CVI_BOOL bBlock);

【参数】

参数名称

描述

输入/输出

AdChn

音频解码通道。

输入

pstFrmInfo

音频帧数据结构体。

输出

bBlock

是否以阻塞方式获取。

输入

【返回值】

参数名称

描述

0

成功。

非 0

失败,其值为 错误码

【需求】

  • 头文件:cvi_comm_aio.h,cvi_audio.h、cvi_comm_adec.h

  • 库文件:libcvi_audio.a,libcvi_VoiceEngine.so,libcvi_RES1.so

【注意事项】

  • 必须在 ADEC 通道创建之后调用

  • 使用本接口获取解码帧数据时,建议发送码流时按帧发送

  • 使用本接口获取音频数据时,请解除 ADEC 与 Audio Output 的绑定关系,否则获取到的帧 是不连续的。

  • 使用本接口获取音频帧数据时,如果发送码流按流发送,请务必保证获取解码帧 数据的及时性,否则会有异常。

【举例】

无。

10.3.6.6. CVI_ADEC_ReleaseFrame

【描述】

释放获取到的音频解码帧数据。

【语法】

CVI_S32 CVI_ADEC_ReleaseFrame(ADEC_CHN AdChn, AUDIO_FRAME_INFO_S *pstFrmInfo);

【参数】

参数名称

描述

输入/输出

AdChn

音频解码通道。

输入

pstFrmInfo

音频帧数据结构体。

输入

【返回值】

参数名称

描述

0

成功。

非 0

失败,其值为 错误码

【需求】

  • 头文件:cvi_comm_aio.h,cvi_audio.h、cvi_comm_adec.h

  • 库文件:libcvi_audio.a,libcvi_VoiceEngine.so,libcvi_RES1.so

【注意事项】

  • 本接口必须与接口 CVI_ADEC_GetFrame 配合使用。

  • 必须在 ADEC 通道创建之后调用。

【举例】

无。

10.3.6.7. CVI_ADEC_SendEndOfStream

【描述】

向解码器发送码流结束标识符,并清除码流 buffer。

【语法】

CVI_S32 CVI_ADEC_SendEndOfStream (ADEC_CHN AdChn, CVI_BOOL bInstant);

【参数】

参数名称

描述

输入/输出

AdChn

音频解码通道。

输入

bInstant

是否立即清除解码器内部的区块数据。
取值范围:
CVI_FALSE: 延时清除。不会立即清除解码器内部的缓存数据,解码会继续进行,直到剩余buffer 不足一帧数据时进行清除操作。
CVI_TRUE:立即清除解码器内部区块数据。

输入

【返回值】

参数名称

描述

0

成功。

非 0

失败,其值为 错误码

【需求】

  • 头文件:cvi_comm_aio.h,cvi_audio.h、cvi_comm_adec.h

  • 库文件:libcvi_audio.a,libcvi_VoiceEngine.so,libcvi_RES1.so

【注意事项】

无。

【举例】

无。

10.3.7. 内置Codec

内置audio codec主要透过ioctl来对硬体设备做操作。Ioctl调用实现的是对内置audio codec寄存器的读写操作。

内置audio codec标准功能cmd

10.3.7.1. ACODEC_SOFT_RESET_CTRL

【描述】

将 Codec恢复为默认设置。

【语法】

CVI_S32 ioctl (CVI_S32 fd, ACODEC_SOFT_RESET_CTRL);

【参数】

参数名称

描述

输入/输出

fd

Audio Codec 设备文件描述

输入

ACODEC_SOFT_RESET_CTRL

Ioctl号

输入

【返回值】

参数名称

描述

0

成功。

非 0

失败,其值为 错误码

【需求】

  • 头文件:- 头文件:acodec.h

【注意事项】

无。

【举例】

if (ioctl(Acodec_Fd, ACODEC_SOFT_RESET_CTRL))
{
    printf("ioctl reset err!\n");
}

10.3.7.2. ACODEC_SET_INPUT_VOL

【描述】

输入总音量控制。把用户期望设置的增益配置到数字增益控制寄存器。

【语法】

CVI_S32 ioctl (CVI_S32 fd, ACODEC_SET_INPUT_VOL, CVI_U32 *arg);

【参数】

参数名称

描述

输入/输出

fd

Audio Codec 设备文件描述

输入

ACODEC_SET_INPUT_VOL

Ioctl号

输入

arg

无符号整型指针

输入

【返回值】

参数名称

描述

0

成功。

非 0

失败,其值为 错误码

【需求】

  • 头文件:- 头文件:acodec.h

【注意事项】

  • 输入音量范围为[24~0] 。若输入值为0则为静音。

  • 调节时左右声道同时生效。

【举例】

CVI_U32 vol = 20;
if (ioctl(Acodec_Fd, ACODEC_SET_INPUT_VOL, &vol))
{
printf("ioctl err!\n");
}

10.3.7.3. ACODEC_GET_INPUT_VOL

【描述】

获取输入总音量。

【语法】

CVI_S32 ioctl (CVI_S32 fd, ACODEC_GET_INPUT_VOL, CVI_U32 *arg);

【参数】

参数名称

描述

输入/输出

fd

Audio Codec 设备文件描述

输入

ACODEC_GET_INPUT_VOL

Ioctl号

输入

arg

无符号整型指针

输出

【返回值】

参数名称

描述

0

成功。

非 0

失败,其值为 错误码

【需求】

  • 头文件:- 头文件:acodec.h

【注意事项】

  • 输入音量范围为[24~0] , 若输出值0则为静音。

【举例】

CVI_U32 vol;
if (ioctl(Acodec_Fd, ACODEC_SET_INPUT_VOL, &vol))
{
printf("ioctl err!\n");
}

10.3.7.4. ACODEC_SET_OUTPUT_VOL

【描述】

输出总音量控制。把用户期望设置的增益配置到数字增益控制寄存器。

【语法】

CVI_S32 ioctl (CVI_S32 fd, ACODEC_SET_OUTPUT_VOL, CVI_U32 *arg);

【参数】

参数名称

描述

输入/输出

fd

Audio Codec 设备文件描述

输入

ACODEC_SET_OUTPUT_VOL

Ioctl号

输入

arg

无符号整型指针

输入

【返回值】

参数名称

描述

0

成功。

非 0

失败,其值为 错误码

【需求】

  • 头文件:- 头文件:acodec.h

【注意事项】

输出音量范围为[32~0], 调节时左右声道同时生效。

【举例】

CVI_U32 vol = 7;
if (ioctl(Acodec_Fd, ACODEC_SET_OUTPUT_VOL, &vol))
{
printf("ioctl err!\n");
}

10.3.7.5. ACODEC_GET_OUTPUT_VOL

【描述】

获取输出总音量。

【语法】

CVI_S32 ioctl (CVI_S32 fd, ACODEC_GET_OUTPUT_VOL, CVI_U32 *arg);

【参数】

参数名称

描述

输入/输出

fd

Audio Codec 设备文件描述

输入

ACODEC_GET_OUTPUT_VOL

Ioctl号

输入

arg

无符号整型指针

输出

【返回值】

参数名称

描述

0

成功。

非 0

失败,其值为 错误码

【需求】

  • 头文件:acodec.h

【注意事项】

输出音量范围为[32~0]。

【举例】

CVI_U32 vol;
if (ioctl(Acodec_Fd, ACODEC_SET_INPUT_VOL, &vol))
{
printf("ioctl err!\n");
}

10.3.7.6. ACODEC_SET_GAIN_MICL

【描述】

左声道MIC输入的模拟增益控制。

【语法】

CVI_S32 ioctl (CVI_S32 fd, ACODEC_SET_GAIN_MICL, CVI_U32 *arg);

【参数】

参数名称

描述

输入/输出

fd

Audio Codec 设备文件描述

输入

ACODEC_SET_GAIN_MICL

Ioctl号

输入

arg

无符号整型指针描述

输入

【返回值】

参数名称

描述

0

成功。

非 0

失败,其值为 错误码

参数名称

输入/输出

CVI_SUCESS

成功

CVI_FAILURE

失败

【需求】

  • 头文件:acodec.h

【注意事项】

  • 在使用无源音频信号输入时,需适当的增大模拟增益。

  • 输入音量范围为[24~0], 若输入值为0则表示静音。

【举例】

CVI_U32 gain_mic;
gain_mic = 5;
if (ioctl(Acodec_Fd, ACODEC_SET_GAIN_MICL, &gain_mic))
{
printf("ioctl err!\n");
}

10.3.7.7. ACODEC_SET_GAIN_MICR

【描述】

右声道MIC输入的模拟增益控制。

【语法】

CVI_S32 ioctl (CVI_S32 fd, ACODEC_SET_GAIN_MICR, CVI_U32 *arg);

【参数】

参数名称

描述

输入/输出

fd

Audio Codec 设备文件描述

输入

ACODEC_SET_GAIN_MICR

Ioctl号

输入

arg

无符号整型指针

输入

【返回值】

参数名称

描述

0

成功。

非 0

失败,其值为 错误码

【需求】

  • 头文件:acodec.h

【注意事项】

  • 在使用无源音频信号输入时,需适当的增大模拟增益。

  • 输入音量范围为[24~0], 若输入值为0则表示静音。

【举例】

CVI_U32 gain_mic;
gain_mic = 5;
if (ioctl(Acodec_Fd, ACODEC_SET_GAIN_MICR, &gain_mic))
{
printf("ioctl err!\n");
}

10.3.7.8. ACODEC_SET_DACL_VOL

【描述】

左声道输出音量控制。

【语法】

CVI_S32 ioctl (CVI_S32 fd, ACODEC_SET_DACL_VOL, struct cvi_vol_ctrl *arg);

【参数】

参数名称

描述

输入/输出

fd

Audio Codec 设备文件描述

输入

ACODEC_SET_DACL_VOL

Ioctl号

输入

arg

cvi_vol_ctrl结构体指针描述

输入

【返回值】

参数名称

描述

0

成功。

非 0

失败,其值为 错误码

【需求】

  • 头文件:acodec.h

【注意事项】

输出音量范围为[32~0]。若输入值vol_ctrl.vol_ctrl_mute为1则变成静音,vol_ctrl.vol_ctrl_mute为0则为撤销静音。

【举例】

struct cvi_vol_ctrl vol_ctrl;
vol_ctrl.vol_ctrl_mute = 0x0;
vol_ctrl.vol_ctrl = 0x05;
if (ioctl(Acodec_Fd, ACODEC_SET_DACL_VOL, &vol_ctrl))
{
printf("ioctl err!\n");
}

10.3.7.9. ACODEC_SET_DACR_VOL

【描述】

右声道输出音量控制。

【语法】

CVI_S32 ioctl (CVI_S32 fd, ACODEC_SET_DACR_VOL, struct cvi_vol_ctrl *arg);

【参数】

参数名称

描述

输入/输出

fd

Audio Codec 设备文件描述

输入

ACODEC_SET_DACR_VOL

Ioctl号

输入

arg

cvi_vol_ctrl结构体指针描述

输入

【返回值】

参数名称

描述

0

成功。

非 0

失败,其值为 错误码

【需求】

  • 头文件:acodec.h

【注意事项】

输出音量范围为[32~0]。若输入值vol_ctrl.vol_ctrl_mute为1则变成静音,vol_ctrl.vol_ctrl_mute为0则为撤销静音。

【举例】

struct cvi_vol_ctrl vol_ctrl;
vol_ctrl.vol_ctrl_mute = 0x0;
vol_ctrl.vol_ctrl = 0x05;
if (ioctl(Acodec_Fd, ACODEC_SET_DACR_VOL, &vol_ctrl))
{
printf("ioctl err!\n");
}

10.3.7.10. ACODEC_SET_ADCL_VOL

【描述】

左声道输入音量控制。

【语法】

CVI_S32 ioctl (CVI_S32 fd, ACODEC_SET_ADCL_VOL, struct cvi_vol_ctrl *arg);

【参数】

参数名称

描述

输入/输出

fd

Audio Codec 设备文件描述

输入

ACODEC_SET_ADCL_VOL

Ioctl号

输入

arg

cvi_vol_ctrl结构体指针描述

输入

【返回值】

参数名称

描述

0

成功。

非 0

失败,其值为 错误码

【需求】

  • 头文件:acodec.h

【注意事项】

  • Input 配置为MIC in时, 输入音量范围为[24~0]。若输入值vol_ctrl.vol_ctrl_mute为1则变成静音,vol_ctrl.vol_ctrl_mute为0则为撤销静音

【举例】

struct cvi_vol_ctrl vol_ctrl;
vol_ctrl.vol_ctrl_mute = 0x0;
vol_ctrl.vol_ctrl = 0x05;
if (ioctl(Acodec_Fd, ACODEC_SET_ADCL_VOL, &vol_ctrl))
{
printf("ioctl err!\n");
}

10.3.7.11. ACODEC_SET_ADCR_VOL

【描述】

右声道输入音量控制。

【语法】

CVI_S32 ioctl (CVI_S32 fd, ACODEC_SET_ADCR_VOL, struct cvi_vol_ctrl *arg);

【参数】

参数名称

描述

输入/输出

fd

Audio Codec 设备文件描述

输入

ACODEC_SET_ADCR_VOL

Ioctl号

输入

arg

cvi_vol_ctrl结构体指针描述

输入

【返回值】

参数名称

描述

0

成功。

非 0

失败,其值为 错误码

【需求】

  • 头文件:acodec.h

【注意事项】

  • Input 配置为MIC in时, 输入音量范围为[24~0]。若输入值vol_ctrl.vol_ctrl_mute为1则变成静音,vol_ctrl.vol_ctrl_mute为0则为撤销静音

【举例】

struct cvi_vol_ctrl vol_ctrl;
vol_ctrl.vol_ctrl_mute = 0x0;
vol_ctrl.vol_ctrl = 0x05;
if (ioctl(Acodec_Fd, ACODEC_SET_ADCR_VOL, &vol_ctrl))
{
printf("ioctl err!\n");
}

10.3.7.12. ACODEC_SET_MICL_MUTE

【描述】

左声道MIC输入静音控制。

【语法】

CVI_S32 ioctl (CVI_S32 fd, ACODEC_SET_MICL_MUTE, CVI_U32 *arg);

【参数】

参数名称

描述

输入/输出

fd

Audio Codec 设备文件描述

输入

ACODEC_SET_MICL_MUTE

Ioctl号

输入

arg

无符号整型指针

输入

【返回值】

参数名称

描述

0

成功。

非 0

失败,其值为 错误码

【需求】

  • 头文件:acodec.h

【注意事项】

arg参数范围[0, 1],0表示撤销静音,1表示静音。

【举例】

CVI_U32 mic_mute;
mic_mute = 0;
if (ioctl(Acodec_Fd, ACODEC_SET_MICL_MUTE, &mic_mute))
{
printf("ioctl err!\n");
}

10.3.7.13. ACODEC_SET_MICR_MUTE

【描述】

右声道MIC输入静音控制。

【语法】

CVI_S32 ioctl (CVI_S32 fd, ACODEC_SET_MICR_MUTE, CVI_U32 *arg);

【参数】

参数名称

描述

输入/输出

fd

Audio Codec 设备文件描述

输入

ACODEC_SET_MICR_MUTE

Ioctl号

输入

arg

无符号整型指针

输入

【返回值】

参数名称

描述

0

成功。

非 0

失败,其值为 错误码

【需求】

  • 头文件:acodec.h

【注意事项】

arg参数范围[0, 1],0表示撤销静音,1表示静音。

【举例】

CVI_U32 mic_mute;
mic_mute = 0;
if (ioctl(Acodec_Fd, ACODEC_SET_MICR_MUTE, &mic_mute))
{
printf("ioctl err!\n");
}

10.3.7.14. ACODEC_SET_DACL_MUTE

【描述】

左声道输出静音控制。

【语法】

CVI_S32 ioctl (CVI_S32 fd, ACODEC_SET_DACL_MUTE, CVI_U32 *arg);

【参数】

参数名称

描述

输入/输出

fd

Audio Codec 设备文件描述

输入

ACODEC_SET_DACL_MUTE

Ioctl号

输入

arg

无符号整型指针

输入

【返回值】

参数名称

描述

0

成功。

非 0

失败,其值为 错误码

【需求】

  • 头文件:acodec.h

【注意事项】

arg参数范围[0, 1],0表示撤销静音,1表示静音。

【举例】

CVI_U32 mute;
mute = 0;
if (ioctl(Acodec_Fd, ACODEC_SET_DACL_MUTE, &mute))
{
printf("ioctl err!\n");
}

10.3.7.15. ACODEC_SET_DACR_MUTE

【描述】

右声道输出静音控制。

【语法】

CVI_S32 ioctl (CVI_S32 fd, ACODEC_SET_DACR_MUTE, CVI_U32 *arg);

【参数】

参数名称

描述

输入/输出

fd

Audio Codec 设备文件描述

输入

ACODEC_SET_DACR_MUTE

Ioctl号

输入

arg

无符号整型指针

输入

【返回值】

参数名称

描述

0

成功。

非 0

失败,其值为 错误码

【需求】

  • 头文件:acodec.h

【注意事项】

arg参数范围[0, 1],0表示撤销静音,1表示静音。

【举例】

CVI_U32 mute;
mute = 0;
if (ioctl(Acodec_Fd, ACODEC_SET_DACR_MUTE, &mute))
{
printf("ioctl err!\n");
}

10.3.7.16. ACODEC_GET_GAIN_MICL

【描述】

获取模拟左声道MIC输入的增益。

【语法】

CVI_S32 ioctl (CVI_S32 fd, ACODEC_GET_GAIN_MICL, CVI_U32 *arg);

【参数】

参数名称

描述

输入/输出

fd

Audio Codec 设备文件描述

输入

ACODEC_GET_GAIN_MICL

Ioctl号

输入

arg

无符号整型指针

输出

【返回值】

参数名称

描述

0

成功。

非 0

失败,其值为 错误码

【需求】

  • 头文件:acodec.h

【注意事项】

无。

【举例】

CVI_U32 gain_mic;
mute = 0;
if (ioctl(Acodec_Fd, ACODEC_GET_GAIN_MICL, &gain_mic))
{
  printf("ioctl err!\n");
}

10.3.7.17. ACODEC_GET_GAIN_MICR

【描述】

获取模拟右声道MIC输入的增益。

【语法】

CVI_S32 ioctl (CVI_S32 fd, ACODEC_GET_GAIN_MICR, CVI_U32 *arg);

【参数】

参数名称

描述

输入/输出

fd

Audio Codec 设备文件描述

输入

ACODEC_GET_GAIN_MICR

Ioctl号

输入

arg

无符号整型指针

输出

【返回值】

参数名称

描述

0

成功。

非 0

失败,其值为 错误码

【需求】

  • 头文件:acodec.h

【注意事项】

无。

【举例】

CVI_U32 gain_mic;
mute = 0;
if (ioctl(Acodec_Fd, ACODEC_GET_GAIN_MICR, &gain_mic))
{
printf("ioctl err!\n");
}

10.3.7.18. ACODEC_GET_DACL_VOL

【描述】

获取左声道输出的音量控制。

【语法】

CVI_S32 ioctl (CVI_S32 fd, ACODEC_GET_DACL_VOL, struct cvi_vol_ctrl *arg);

【参数】

参数名称

描述

输入/输出

fd

Audio Codec 设备文件描述

输入

ACODEC_GET_DACL_VOL

Ioctl号

输入

arg

cvi_vol_ctrl结构体指针描述

输出

【返回值】

参数名称

描述

0

成功。

非 0

失败,其值为 错误码

【需求】

  • 头文件:acodec.h

【注意事项】

无。

【举例】

struct cvi_vol_ctrl vol_ctrl;
if (ioctl(Acodec_Fd, ACODEC_GET_DACL_VOL, & vol_ctrl))
{
printf("ioctl err!\n");
}

10.3.7.19. ACODEC_GET_DACR_VOL

【描述】

获取右声道输出的音量控制。

【语法】

CVI_S32 ioctl (CVI_S32 fd, ACODEC_GET_DACR_VOL, struct cvi_vol_ctrl *arg);

【参数】

参数名称

描述

输入/输出

fd

Audio Codec 设备文件描述

输入

ACODEC_GET_DACR_VOL

Ioctl号

输入

arg

cvi_vol_ctrl结构体指针描述

输出

【返回值】

参数名称

描述

0

成功。

非 0

失败,其值为 错误码

【需求】

  • 头文件:acodec.h

【注意事项】

无。

【举例】

struct cvi_vol_ctrl vol_ctrl;
if (ioctl(Acodec_Fd, ACODEC_GET_DACR_VOL, & vol_ctrl))
{
printf("ioctl err!\n");
}

10.3.7.20. ACODEC_GET_ADCL_VOL

【描述】

获取左声道输入的音量控制。

【语法】

CVI_S32 ioctl (CVI_S32 fd, ACODEC_GET_ADCL_VOL, struct cvi_vol_ctrl *arg);

【参数】

参数名称

描述

输入/输出

fd

Audio Codec 设备文件描述

输入

ACODEC_GET_ADCL_VOL

Ioctl号

输入

arg

cvi_vol_ctrl结构体指针描述

输出

【返回值】

参数名称

描述

0

成功。

非 0

失败,其值为 错误码

【需求】

  • 头文件:acodec.h

【注意事项】

无。

【举例】

struct cvi_vol_ctrl vol_ctrl;
if (ioctl(Acodec_Fd, ACODEC_GET_ADCL_VOL, & vol_ctrl))
{
printf("ioctl err!\n");
}

10.3.7.21. ACODEC_GET_ADCR_VOL

【描述】

获取右声道输入的音量控制。

【语法】

CVI_S32 ioctl (CVI_S32 fd, ACODEC_GET_ADCR_VOL, struct cvi_vol_ctrl *arg);

【参数】

参数名称

描述

输入/输出

fd

Audio Codec 设备文件描述

输入

ACODEC_GET_ADCR_VOL

Ioctl号

输入

arg

cvi_vol_ctrl结构体指针描述

输出

【返回值】

参数名称

描述

0

成功。

非 0

失败,其值为 错误码

【需求】

  • 头文件:acodec.h

【注意事项】

无。

【举例】

struct cvi_vol_ctrl vol_ctrl;
if (ioctl(Acodec_Fd, ACODEC_GET_ADCR_VOL, & vol_ctrl))
{
printf("ioctl err!\n");
}

10.3.7.22. ACODEC_SET_PD_DACL

【描述】

左声道输出的下电控制。

【语法】

CVI_S32 ioctl (CVI_S32 fd, ACODEC_SET_PD_DACL, CVI_U32 *arg);

【参数】

参数名称

描述

输入/输出

fd

Audio Codec 设备文件描述

输入

ACODEC_SET_PD_DACL

Ioctl号

输入

arg

无符号整型指针

输入

【返回值】

参数名称

描述

0

成功。

非 0

失败,其值为 错误码

【需求】

  • 头文件:acodec.h

【注意事项】

不使用DACL时, 可以调用此接口,将DACL下电。arg参数范围[0, 1]。0 表示上电,1表示下电。

【举例】

CVI_U32 pd_ctrl;
pd_ctrl = 0x1;
if (ioctl(Acodec_Fd, ACODEC_SET_PD_DACL, &pd_ctrl))
{
printf("ioctl err!\n");
}

10.3.7.23. ACODEC_SET_PD_DACR

【描述】

右声道输出的下电控制。

【语法】

CVI_S32 ioctl (CVI_S32 fd, ACODEC_SET_PD_DACR, CVI_U32 *arg);

【参数】

参数名称

描述

输入/输出

fd

Audio Codec 设备文件描述

输入

ACODEC_SET_PD_DACR

Ioctl号

输入

arg

无符号整型指针描述

输入

【返回值】

参数名称

描述

0

成功。

非 0

失败,其值为 错误码

【需求】

  • 头文件:acodec.h

【注意事项】

不使用DACR时, 可以调用此接口,将DACR下电。arg参数范围[0, 1]。0 表示上电,1表示下电。

【举例】

CVI_U32 pd_ctrl;
pd_ctrl = 0x1;
if (ioctl(Acodec_Fd, ACODEC_SET_PD_DACR, &pd_ctrl))
{
printf("ioctl err!\n");
}

10.3.7.24. ACODEC_SET_PD_ADCL

【描述】

左声道输入的下电控制。

【语法】

CVI_S32 ioctl (CVI_S32 fd, ACODEC_SET_PD_ADCL, CVI_U32 *arg);

【参数】

参数名称

描述

输入/输出

fd

Audio Codec 设备文件描述

输入

ACODEC_SET_PD_ADCL

Ioctl号

输入

arg

无符号整型指针

输入

【返回值】

参数名称

描述

0

成功。

非 0

失败,其值为 错误码

【需求】

  • 头文件:acodec.h

【注意事项】

不使用ADCL时, 可以调用此接口,将ADCL下电。arg参数范围[0, 1]。0 表示上电,1表示下电。

【举例】

CVI_U32 pd_ctrl;
pd_ctrl = 0x1;
if (ioctl(Acodec_Fd, ACODEC_SET_PD_ADCL, &pd_ctrl))
{
printf("ioctl err!\n");
}

10.3.7.25. ACODEC_SET_PD_ADCR

【描述】

右声道输入的下电控制。

【语法】

CVI_S32 ioctl (CVI_S32 fd, ACODEC_SET_PD_ADCR, CVI_U32 *arg);

【参数】

参数名称

描述

输入/输出

fd

Audio Codec 设备文件描述

输入

ACODEC_SET_PD_ADCR

Ioctl号

输入

arg

无符号整型指针描述

输入

【返回值】

参数名称

描述

0

成功。

非 0

失败,其值为 错误码

【需求】

  • 头文件:acodec.h

【注意事项】

不使用ADCR时, 可以调用此接口,将ADCR下电。arg参数范围[0, 1]。0 表示上电,1表示下电。

【举例】

CVI_U32 pd_ctrl;
pd_ctrl = 0x1;
if (ioctl(Acodec_Fd, ACODEC_SET_PD_ADCR, &pd_ctrl))
{
printf("ioctl err!\n");
}

10.3.7.26. ACODEC_SET_PD_LINEINL

【描述】

左声道LINEIN输入的下电控制。

【语法】

CVI_S32 ioctl (CVI_S32 fd, ACODEC_SET_PD_LINEINL, CVI_U32 *arg);

【参数】

参数名称

描述

输入/输出

fd

Audio Codec 设备文件描述

输入

ACODEC_SET_PD_LINEINL

Ioctl号

输入

arg

无符号整型指针

输入

【返回值】

参数名称

描述

0

成功。

非 0

失败,其值为 错误码

【需求】

  • 头文件:acodec.h

【注意事项】

不使用LINEINL时, 可以调用此接口,将LINEINL下电。arg参数范围[0, 1]。0 表示上电,1表示下电。

【举例】

CVI_U32 pd_ctrl;
pd_ctrl = 0x1;
if (ioctl(Acodec_Fd, ACODEC_SET_PD_LINEINL, &pd_ctrl))
{
printf("ioctl err!\n");
}

10.3.7.27. ACODEC_SET_PD_LINEINR

【描述】

右声道LINEIN输入的下电控制。

【语法】

CVI_S32 ioctl (CVI_S32 fd, ACODEC_SET_PD_LINEINR, CVI_U32 *arg);

【参数】

参数名称

描述

输入/输出

fd

Audio Codec 设备文件描述

输入

ACODEC_SET_PD_LINEINR

Ioctl号

输入

arg

无符号整型指针

输入

【返回值】

参数名称

描述

0

成功。

非 0

失败,其值为 错误码

【需求】

  • 头文件:acodec.h

【注意事项】

不使用LINEINR时, 可以调用此接口,将LINEINR下电。arg参数范围[0, 1]。0 表示上电,1表示下电。

【举例】

CVI_U32 pd_ctrl;
pd_ctrl = 0x1;
if (ioctl(Acodec_Fd, ACODEC_SET_PD_LINEINR, &pd_ctrl))
{
printf("ioctl err!\n");
}

10.3.8. 重采样

Resampler 模块提供单独的重采样处理。当客户需要在上层对数据重采样时,可以使用该模块。

以下为相关API及细部说明:

10.3.8.1. CVI_Resampler_Create

【描述】

创建一个重采样模块。

【语法】

CVI_VOID* CVI_Resampler_Create(CVI_S32 s32Inrate, CVI_S32 s32Outrate, CVI_S32 s32Chans);

【参数】

参数名称

描述

输入/输出

s32Inrate

输入采样率。 取值范围:8000, 11025, 12000, 16000, 22050, 24000, 32000, 44100, 48000, 64000。

输入

s32Outrate

输出采样率。 取值范围:8000, 11025, 12000, 16000, 22050, 24000, 32000, 44100, 48000, 64000。

输入

s32Chans

处理声道数(目前Cvitek支持单声道)

输入

【返回值】

参数名称

描述

0

成功。

非 0

失败,其值为 错误码

【需求】

  • 头文件:cvi_comm_aio.h,cvi_audio.h、cvi_resample_api.h

  • 库文件:libcvi_audio.a,libcvi_RES1.so

【注意事项】

输入采样率和输出采样率需保证不一致。

【举例】

无。

10.3.8.2. CVI_Resampler_Process

【描述】

处理一帧重采样数据。

【语法】

CVI_S32 CVI_Resampler_Process(CVI_VOID* inst, CVI_S16* s16Inbuf, CVI_S32 s32Insamps, CVI_S16* s16Outbuf);

【参数】

参数名称

描述

输入/输出

inst

重采样模块句柄。

输入

s16Inbuf

输入数据 buf 指针。

输入

s32Insamps

输入数据采样点数。 取值范围:[0, 2048]

输入

s16Outbuf

输出数据 buf 指针

输出

【返回值】

参数名称

描述

0

成功。

非 0

失败,其值为 错误码

【需求】

  • 头文件:cvi_comm_aio.h,cvi_audio.h、cvi_resample_api.h

  • 库文件:libcvi_audio.a,libcvi_RES1.so

【注意事项】

最大输入采样点数需小于 2048。

【举例】

无。

10.3.8.3. CVI_Resampler_Destroy

【描述】

销毁一个重采样模块实例。

【语法】

CVI_VOID CVI_Resampler_Destroy(CVI_VOID* inst);

【参数】

参数名称

描述

输入/输出

inst

重采样模块句柄。

输入

【返回值】

参数名称

描述

0

成功。

非 0

失败,其值为 错误码

【需求】

  • 头文件:cvi_comm_aio.h,cvi_audio.h、cvi_resample_api.h

  • 库文件:libcvi_audio.a,libcvi_RES1.so

【注意事项】

无。

【举例】

无。

10.3.8.4. CVI_Resampler_GetMaxOutputNum

【描述】

获取最大输出采样点数(每一声道)。

【语法】

CVI_S32 CVI_Resampler_GetMaxOutputNum(CVI_VOID* inst, CVI_S32 s32Insamps);

【参数】

参数名称

描述

输入/输出

inst

重采样模块句柄。

输入

s32Insamps

每一声道输入采样点数。

输入

【返回值】

参数名称

描述

0

成功。

非 0

失败,其值为 错误码

【需求】

  • 头文件:cvi_comm_aio.h,cvi_audio.h、cvi_resample_api.h

  • 库文件:libcvi_audio.a,libcvi_RES1.so

【注意事项】

无。

【举例】

无。