跳到主要内容
版本:2.8.1

音频输入与输出 (AI&AO)

概述

AIO 模块,即音频输入输出模块,通过对音频接口的控制实现音频输入输出功能。

  • 音频输入模块负责从外部设备(如麦克风)接收音频信号,并将其转换为数字信号供后续处理。
  • 音频输出模块则将处理后的数字音频信号转换回模拟信号,通过扬声器或其他音频输出设备播放出来。

功能描述

音频输入输出接口

音频输入输出接口简称为AIO(Audio Input/Output)接口,用于对接音频框架Alsa(Linux平台),完成声音的录制和播放。

AIO 接口分为两种类型:只支持输入或只支持输出。

  • 当为输入类型时,又称为 AI(Audio Input)。
  • 当为输出类型时,又称为 AO(Audio Output)。

AIO 接口如下图所示,箭头方向为数据流动方向。

AIO接口


AIO 设备

软件中负责抽象音频接口输入功能的,称之为 AI 设备;负责抽象音频接口输出功能的单元,称之为 AO 设备。对每个输入输出接口,软件根据该接口支持的功能,分别与 AI 设备和 AO 设备建立映射关系。例如:AI0 只支持音频输入,则 AI0 映射为 AiDev0;AO0 只支持音频输出,则 AO0 映射为 AoDev0。

AIO 设备号是抽象的软件层概念,设备号从 0 开始编号,如 AoDev0、AoDev1...、AiDev0、AiDev1...。通常情况下,一个 AIO 设备号对应一个音频驱动的声卡,客户实际挂载的声卡可能不同。


AIO 通道

AIO 通道指 AIO 设备上输入/输出的音频流,一个音频流对应一个通道。

  • 对 AO,暂不支持多通道混音。
  • 对 AI,一个设备只支持一个通道。

AIO 重采样

重采样是指对音频数据的采样率(samplerate),声道数(channels)和格式(format)进行转换。AIO 模块支持对音频数据实施重采样。

如果启用 AI 重采样功能,AI 内部按照重采样设置,进行重采样处理,应用可通过调用 ZH_MPI_AI_GetFrame 接口获取处理的数据。同理,如果启用了 AO 重采样功能,则用户通过 ZH_MPI_AO_SendFrame 将音频数据送给 AO,AO 内部会对数据进行重采样处理,并将处理后的数据通过声卡播放出来。

  • AO 重采样主要是将输入数据重采成声卡支持的数据。如下图,AO 接收到的数据为(8kHz,1ch),而声卡只支持(48kHz,2ch)数据,此时可开启 AO 重采样,将(8kHz,1ch)的数据转换成声卡支持的(48kHz,2ch)数据。
  • AI 重采样主要是将声卡采集到的数据转换成应用所需要获取数据。如下图,录音声卡只支持(16kHz,2ch)的参数,而应用需要(8khz,1ch)的数据,此时可开启 AI 重采样,会重采样成用户需要的数据。
  • AIO 模块对输入/输出的每帧数据的采样率、声道数、格式等均有判断,对于经过 AIO 重采样处理的数据,若输入数据参数与重采样设置参数相同,则不会进入重采样处理,直接输出给后级处理。以 AO 为例,AO 接收到的(48kHz,2ch)数据,AO 重采样开启,且设置重采后参数为(48kHz,2ch),当(48kHz,2ch)数据流经重采样处理时,数据不进行重采处理,而直接送入重采后的下一级处理。因此即使开启 AO 重采处理,在条件满足时(即重采后参数与输入数据参数相等),也不会因重采开启而浪费 CPU 资源。建议始终开启 AIO 重采样功能。

AIO 重采样


音频输入输出设备和内置 codec

不同客户需要的产品形态不同,需要的声卡驱动不同,需要实际调整,配置主从模式和声卡配置需要修改内核 dts。实际开发的时候联系驱动音频⼯程师进行指导。


API 参考

音频输入

该功能模块为用户提供以下API:


ZH_MPI_AI_SetPubAttr

描述

设置 AI 设备属性。

语法

ZH_S32 ZH_MPI_AI_SetPubAttr(AUDIO_DEV AiDevId, const AIO_ATTR_S *pstAttr);

参数

参数名数据类型描述输入/输出
AiDevIdAUDIO_DEV音频设备号。
取值范围:[0, AI_DEV_MAX_NUM)。
输入
pstAttrconst AIO_ATTR_S*AI设备属性指针。输入

返回值

返回值描述
0成功。
非 0失败,其值为 AUDIO 错误码

注意事项

音频输入的属性包括输出数据的属性和输入设备(声卡)属性:采样率、声道数、采样精度、buffer 大小、每帧的采样点数等。

  • 在设置声卡设备属性之前需要保证 AiDevId 对应的 AI 处于禁用状态,如果处于启用状态则需要首先禁用 AI 声卡设备。
  • 采样率:指一秒钟的采样点数。设置声卡设备的采样率,要确认声卡设备是否支持所需要设定的采样率。
  • 通道数目:指当前输入设备的 AI 功能的通道数目。需要与对接的 Audio Codec 的配置保持一致。

ZH_MPI_AI_GetPubAttr

描述

获取 AI 设备属性。

语法

ZH_S32 ZH_MPI_AI_GetPubAttr(AUDIO_DEV AiDevId, AIO_ATTR_S *pstAttr);

参数

参数名数据类型描述输入/输出
AiDevIdAUDIO_DEV音频设备号。
取值范围:[0, AI_DEV_MAX_NUM)。
输入
pstAttrAIO_ATTR_S*AI 设备属性指针。输出

返回值

返回值描述
0成功。
非 0失败,其值为 AUDIO 错误码

注意事项

  • 获取的属性为前一次配置的属性。
  • 如果从未配置过属性,则返回属性未配置的错误。

ZH_MPI_AI_Enable

描述

启用 AI 设备。

语法

ZH_S32 ZH_MPI_AI_Enable(AUDIO_DEV AiDevId);

参数

参数名数据类型描述输入/输出
AiDevIdAUDIO_DEV音频设备号。
取值范围:[0, AI_DEV_MAX_NUM)。
输入

返回值

返回值描述
0成功。
非 0失败,其值为 AUDIO 错误码

注意事项

  • 要求在启用前配置 AI 设备属性,否则会返回属性未配置的错误。
  • 如果 AI 设备已经启用,重复启用,则返回正在使用中的错误。

ZH_MPI_AI_Disable

描述

禁用 AI 设备。

语法

ZH_S32 ZH_MPI_AI_Disable(AUDIO_DEV AiDevId);

参数

参数名数据类型描述输入/输出
AiDevIdAUDIO_DEV音频设备号。
取值范围:[0, AI_DEV_MAX_NUM)。
输入

返回值

返回值描述
0成功。
非 0失败,其值为 AUDIO 错误码

注意事项

  • 如果 AI 设备未启用,则返回未启用的 AUDIO 错误码。
  • 禁用 AI 设备前必须先禁用设备下所有 AI 通道。
  • 声卡设备使用完成后,必须关闭声卡设备。

ZH_MPI_AI_EnableChn

描述

启用 AI 通道。

语法

ZH_S32 ZH_MPI_AI_EnableChn(AUDIO_DEV AiDevId, AI_CHN AiChn);

参数

参数名数据类型描述输入/输出
AiDevIdAUDIO_DEV音频设备号。
取值范围:[0, AI_DEV_MAX_NUM)。
输入
AiChnAI_CHN音频输入通道号。
取值范围:[0, AI_MAX_CHN_NUM)。
输入

返回值

返回值描述
0成功。
非 0失败,其值为 AUDIO 错误码

注意事项

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


ZH_MPI_AI_DisableChn

描述

禁用 AI 通道。

语法

ZH_S32 ZH_MPI_AI_DisableChn(AUDIO_DEV AiDevId, AI_CHN AiChn);

参数

参数名数据类型描述输入/输出
AiDevIdAUDIO_DEV音频设备号。
取值范围:[0, AI_DEV_MAX_NUM)。
输入
AiChnAI_CHN音频输入通道号。
取值范围:[0, AI_MAX_CHN_NUM)。
输入

返回值

返回值描述
0成功。
非 0失败,其值为 AUDIO 错误码

注意事项

通道使用完成后,必须调用关闭 AI 通道。


ZH_MPI_AI_EnableDataRead

描述

启用 AI 读数据模式。

语法

ZH_S32 ZH_MPI_AI_EnableDataRead(AUDIO_DEV AiDevId, AI_CHN AiChn);

参数

参数名数据类型描述输入/输出
AiDevIdAUDIO_DEV音频设备号。
取值范围:[0, AI_DEV_MAX_NUM)。
输入
AiChnAI_CHN音频输入通道号。
取值范围:[0, AI_MAX_CHN_NUM)。
输入

返回值

返回值描述
0成功。
非 0失败,其值为 AUDIO 错误码

注意事项

启用 AI 读数据模式前,必须先启用其所属的 AI 设备,否则返回设备未启动的 AUDIO 错误码。


ZH_MPI_AI_DisableDataRead

描述

禁用 AI 读数据模式。

语法

ZH_S32 ZH_MPI_AI_DisableDataRead(AUDIO_DEV AiDevId, AI_CHN AiChn);

参数

参数名数据类型描述输入/输出
AiDevIdAUDIO_DEV音频设备号。
取值范围:[0, AI_DEV_MAX_NUM)。
输入
AiChnAI_CHN音频输入通道号。
取值范围:[0, AI_MAX_CHN_NUM)。
输入

返回值

返回值描述
0成功。
非 0失败,其值为 AUDIO 错误码

注意事项

读数据模式使用完成后,必须调用关闭 AI 读数据模式。


ZH_MPI_AI_SendFrame

描述

发送音频帧。

语法

ZH_S32 ZH_MPI_AI_SendFrame(AUDIO_DEV AiDevId, Ai_CHN AiChn, const AUDIO_FRAME_S *pstFrm, ZH_S32 s32MilliSec);

参数

参数名数据类型描述输入/输出
AiDevIdAUDIO_DEV音频设备号。
取值范围:[0, AI_DEV_MAX_NUM)。
输入
AiChnAi_CHN音频输入通道号。
取值范围:[0, AI_MAX_CHN_NUM)。
输入
pstFrmconst AUDIO_FRAME_S*音频帧结构体指针。输出
s32MilliSecZH_S32获取数据的超时时间:
-1:阻塞模式
≥0:非阻塞模式,设置读取数据的超时时间(单位:毫秒)
输入

返回值

返回值描述
0成功。
非 0失败,其值为 AUDIO 错误码

注意事项

  • s32MilliSec 等于 -1 时,表示采用阻塞模式发送数据,该接口会被阻塞直到数据被成功送入;大于等于 0 时,表示非阻塞模式发送数据的超时时间(毫秒)。如在超时时间内完成数据的发送,则返回成功,否则返回超时并报错。
  • 发送音频帧数据前,必须先开启对应的 AI 通道和声卡设备。

ZH_MPI_AI_GetFrame

描述

获取音频帧。

语法

ZH_S32 ZH_MPI_AI_GetFrame(AUDIO_DEV AiDevId, AI_CHN AiChn, AUDIO_FRAME_S *pstFrm, AEC_FRAME_S *pstAecFrm , ZH_S32 s32MilliSec);

参数

参数名数据类型描述输入/输出
AiDevIdAUDIO_DEV音频设备号。
取值范围:[0, AI_DEV_MAX_NUM)。
输入
AiChnAI_CHN音频输入通道号。
取值范围:[0, AI_MAX_CHN_NUM)。
输入
pstFrmAUDIO_FRAME_S*音频帧结构体指针。输出
pstAecFrmAEC_FRAME_S回声抵消参考帧结构体指针。默认 ZH_NULL输出
s32MilliSecZH_S32获取数据的超时时间:
-1:阻塞模式
≥0:非阻塞模式,设置读取数据的超时时间(单位:毫秒)
输入

返回值

返回值描述
0成功。
非 0失败,其值为 AUDIO 错误码

注意事项

  • 目前 pstAecFrm 未使用,置为空。
  • s32MilliSec 等于 -1 表示采用阻塞模式读取数据,该接口会⼀直阻塞直到成功读取到数据或当前通道退出/禁用为止;大于等于 0,表示以非阻塞模式读取数据的超时时间(毫秒),如在 s32MilliSec 毫秒内没有读取到数据,则返回超时并报错。
  • 获取音频帧数据前,必须先开启对应的 AI 通道和声卡设备。

ZH_MPI_AI_ReleaseFrame

描述

释放音频帧。

语法

ZH_S32 ZH_MPI_AI_ReleaseFrame(AUDIO_DEV AiDevId, AI_CHN AiChn, const AUDIO_FRAME_S *pstFrm, const AEC_FRAME_S *pstAecFrm);

参数

参数名数据类型描述输入/输出
AiDevIdAUDIO_DEV音频设备号。
取值范围:[0, AI_DEV_MAX_NUM)。
输入
AiChnAI_CHN音频输入通道号。
取值范围:[0, AI_MAX_CHN_NUM)。
输入
pstFrmconst AUDIO_FRAME_S*音频帧结构体指针。输入
pstAecFrmconst AEC_FRAME_S*回声抵消参考帧结构体指针。默认 ZH_NULL输入

返回值

返回值描述
0成功。
非 0失败,其值为 AUDIO 错误码

注意事项

目前不需要释放回声抵消参考帧,pstAecFrm 置为 ZH_NULL 即可。


ZH_MPI_AI_SetChnParam

描述

设置 AI 通道参数。

语法

ZH_S32 ZH_MPI_AI_SetChnParam(AUDIO_DEV AiDevId, AI_CHN AiChn, const AI_CHN_PARAM_S *pstChnParam);

参数

参数名数据类型描述输入/输出
AiDevIdAUDIO_DEV音频设备号。
取值范围:[0, AI_DEV_MAX_NUM)。
输入
AiChnAI_CHN音频输入通道号。
取值范围:[0, AI_MAX_CHN_NUM)。
输入
pstChnParamconst AI_CHN_PARAM_S*音频通道参数。输入

返回值

返回值描述
0成功。
非 0失败,其值为 AUDIO 错误码

注意事项

通道参数目前只有一个成员变量,用于设置用户获取音频帧的缓存个数。默认为 4 个。


ZH_MPI_AI_GetChnParam

描述

设置 AI 通道参数。

语法

ZH_S32 ZH_MPI_AI_GetChnParam(AUDIO_DEV AiDevId, AI_CHN AiChn, AI_CHN_PARAM_S *pstChnParam);

参数

参数名数据类型描述输入/输出
AiDevIdAUDIO_DEV音频设备号。
取值范围:[0, AI_DEV_MAX_NUM)。
输入
AiChnAI_CHN音频输入通道号。
取值范围:[0, AI_MAX_CHN_NUM)。
输入
pstChnParamAI_CHN_PARAM_S*音频通道参数。输入

返回值

返回值描述
0成功。
非 0失败,其值为 AUDIO 错误码

ZH_MPI_AI_EnableReSmp

描述

启用 AI 重采样。

语法

ZH_S32 ZH_MPI_AI_EnableReSmp(AUDIO_DEV AiDevId, AI_CHN AiChn, AUDIO_SAMPLE_RATE_E enOutSampleRate);

参数

参数名数据类型描述输入/输出
AiDevIdAUDIO_DEV音频设备号。
取值范围:[0, AI_DEV_MAX_NUM)。
输入
AiChnAI_CHN音频输入通道号。
取值范围:[0, AI_MAX_CHN_NUM)。
输入
enOutSampleRateAUDIO_SAMPLE_RATE_E音频重采样的输出采样率。输入

返回值

返回值描述
0成功。
非 0失败,其值为 AUDIO 错误码

注意事项

  • 在启用 AI 通道之后,调用此接口启用重采样功能。
  • 允许重复启用重采样功能,但必须保证后配置的重采样输入采样率与之前配置的重采样输入采样率不⼀样。
  • 在禁用 AI 通道后,如果重新启用 AI 通道,并使用重采样功能,需调用此接口重新启用重采样。
  • AI 重采样的输入采样率为读取数据的采样率。
  • 强烈建议启用此接口,内部插件会有参数判断,参数⼀致时数据会直接 bypass。

示例代码

以 AI 从录制 32K 到 8K 的重采样为例,配置如下:

/* dev attr of ai */
aiAttr.soundCard.channels = 2;
aiAttr.soundCard.sampleRate = 32000;
aiAttr.soundCard.bitWidth = AUDIO_BIT_WIDTH_16;

aiAttr.enBitwidth = AUDIO_BIT_WIDTH_16;
aiAttr.enSamplerate = AUDIO_SAMPLE_RATE_8000;
aiAttr.enSoundmode = AUDIO_SOUND_MODE_STEREO;
aiAttr.u32FrmNum = 4;
aiAttr.u32PtNumPerFrm = 1024;
ZH_MPI_AI_EnableReSmp(AiDev, AiChn, AUDIO_SAMPLE_RATE_8000);

ZH_MPI_AI_DisableReSmp

描述

禁用 AI 重采样。

语法

ZH_S32 ZH_MPI_AI_DisableReSmp(AUDIO_DEV AiDevId, AI_CHN AiChn);

参数

参数名数据类型描述输入/输出
AiDevIdAUDIO_DEV音频设备号。
取值范围:[0, AI_DEV_MAX_NUM)。
输入
AiChnAI_CHN音频输入通道号。
取值范围:[0, AI_MAX_CHN_NUM)。
输入

返回值

返回值描述
0成功。
非 0失败,其值为 AUDIO 错误码

注意事项

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


ZH_MPI_AI_SetVolume

描述

设置 AI 设备音量大小。

语法

ZH_S32 ZH_MPI_AI_SetVolume(AUDIO_DEV AiDevId, ZH_S32 s32VolumeDb);

参数

参数名数据类型描述输入/输出
AiDevIdAUDIO_DEV音频设备号。
取值范围:[0, AI_DEV_MAX_NUM)。
输入
s32VolumeDbZH_S32音频设备音量大小百分比。
取值范围:[0, 100]。
输入

返回值

返回值描述
0成功。
非 0失败,其值为 AUDIO 错误码

注意事项

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


ZH_MPI_AI_GetVolume

描述

获取 AI 设备音量大小。

语法

ZH_S32 ZH_MPI_AI_GetVolume(AUDIO_DEV AiDevId, ZH_S32 *ps32VolumeDb);

参数

参数名数据类型描述输入/输出
AiDevIdAUDIO_DEV音频设备号。
取值范围:[0, AI_DEV_MAX_NUM)。
输入
ps32VolumeDbZH_S32*音频设备音量大小指针。输出

返回值

返回值描述
0成功。
非 0失败,其值为 AUDIO 错误码

注意事项

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


ZH_MPI_AI_SetMute

描述

设置 AI 设备静音状态。

语法

ZH_S32 ZH_MPI_AI_SetMute(AUDIO_DEV AiDevId, ZH_BOOL bEnable, const AUDIO_FADE_S *pstFade);

参数

参数名数据类型描述输入/输出
AiDevIdAUDIO_DEV音频设备号。
取值范围:[0, AI_DEV_MAX_NUM)。
输入
bEnableZH_BOOL音频设备是否启用静音。
- ZH_TRUE:开启静音
- ZH_FALSE:关闭静音
输入
pstFadeconst AUDIO_FADE_S*音频淡入淡出结构体指针。输入

返回值

返回值描述
0成功。
非 0失败,其值为 AUDIO 错误码

注意事项

  • 在 AI 设备成功启用后再调用此接口。
  • 调用此接口时,用户可以选择是否使用淡入淡出功能,如果不使用淡入淡出则将结构体指针赋为空即可。

ZH_MPI_AI_GetMute

描述

获取 AI 设备静音状态。

语法

ZH_S32 ZH_MPI_AI_GetMute(AUDIO_DEV AiDevId, ZH_BOOL *pbEnable, AUDIO_FADE_S *pstFade);

参数

参数名数据类型描述输入/输出
AiDevIdAUDIO_DEV音频设备号。
取值范围:[0, AI_DEV_MAX_NUM)。
输入
pbEnableZH_BOOL*音频设备静音状态指针。输出
pstFadeAUDIO_FADE_S*音频淡入淡出结构体指针。输出

返回值

返回值描述
0成功。
非 0失败,其值为 AUDIO 错误码

注意事项

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


ZH_MPI_AI_SetTrackMode

描述

设置 AI 通道模式。

语法

ZH_S32 ZH_MPI_AI_SetTrackMode(AUDIO_DEV AiDevId, AUDIO_TRACK_MODE_E enTrackMode);

参数

参数名数据类型描述输入/输出
AiDevIdAUDIO_DEV音频设备号。
取值范围:[0, AI_DEV_MAX_NUM)。
输入
enTrackModeAUDIO_TRACK_MODE_E音频声道模式。输入

返回值

返回值描述
0成功。
非 0失败,其值为 AUDIO 错误码

注意事项

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


ZH_MPI_AI_GetTrackMode

描述

设置 AI 通道模式。

语法

ZH_S32 ZH_MPI_AI_GetTrackMode(AUDIO_DEV AiDevId, AUDIO_TRACK_MODE_E *penTrackMode);

参数

参数名数据类型描述输入/输出
AiDevIdAUDIO_DEV音频设备号。
取值范围:[0, AI_DEV_MAX_NUM)。
输入
penTrackModeAUDIO_TRACK_MODE_E*音频输入声道模式指针。输出

返回值

返回值描述
0成功。
非 0失败,其值为 AUDIO 错误码

注意事项

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


ZH_MPI_AI_ClrPubAttr

描述

清空 Pub 属性。

语法

ZH_S32 ZH_MPI_AI_ClrPubAttr(AUDIO_DEV AiDevId);

参数

参数名数据类型描述输入/输出
AiDevIdAUDIO_DEV音频设备号。
取值范围:[0, AI_DEV_MAX_NUM)。
输入

返回值

返回值描述
0成功。
非 0失败,其值为 AUDIO 错误码

注意事项

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


ZH_MPI_AI_SaveFile

描述

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

语法

ZH_S32 ZH_MPI_AI_SaveFile(AUDIO_DEV AiDevId, AI_CHN AiChn, const AUDIO_SAVE_FILE_INFO_S *pstSaveFileInfo);

参数

参数名数据类型描述输入/输出
AiDevIdAUDIO_DEV音频设备号。
取值范围:[0, AI_DEV_MAX_NUM)。
输入
AiChnAI_CHN音频输入通道号。
取值范围:[0, AI_MAX_CHN_NUM)。
输入
pstSaveFileInfoconst AUDIO_SAVE_FILE_INFO_S*音频保存文件属性结构体指针。输入

返回值

返回值描述
0成功。
非 0失败,其值为 AUDIO 错误码

注意事项

此接口仅用于 AI 非绑定模式下保存 AI 从声卡录制的 PCM 文件。


ZH_MPI_AI_QueryFileStatus

描述

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

语法

ZH_S32 ZH_MPI_AI_QueryFileStatus(AUDIO_DEV AiDevId, AI_CHN AiChn, AUDIO_FILE_STATUS_S *pstFileStatus);

参数

参数名数据类型描述输入/输出
AiDevIdAUDIO_DEV音频设备号。
取值范围:[0, AI_DEV_MAX_NUM)。
输入
AiChnAI_CHN音频输入通道号。
取值范围:[0, AI_MAX_CHN_NUM)。
输入
pstFileStatusAUDIO_FILE_STATUS_S*状态属性结构体指针。输出

返回值

返回值描述
0成功。
非 0失败,其值为 AUDIO 错误码

注意事项

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


音频输出

该功能模块为用户提供以下 API:


ZH_MPI_AO_SetPubAttr

描述

设置 AO 设备(声卡)参数。

语法

ZH_S32 ZH_MPI_AO_SetPubAttr(AUDIO_DEV AoDevId, const AIO_ATTR_S *pstAttr);

参数

参数名数据类型描述输入/输出
AoDevIdAUDIO_DEV音频设备号。
取值范围:[0, AO_DEV_MAX_NUM)。
输入
pstAttrconst AIO_ATTR_S*音频输出设备属性。输入

返回值

返回值描述
0成功。
非 0失败,其值为 AUDIO 错误码

注意事项

  • 在设置 AO 属性之前,需要确保 AO 处于禁用状态,如果处于启用状态则需要首先禁用 AO 声卡设备。
  • 必须设置声卡设备的支持的采样率,声道数。其他参数可选配置(没有设置则采用默认值),参见 AIO_ATTR_S 结构体。
  • linux 平台声卡驱动配置参见 /etc/asound.conf 文件。

ZH_MPI_AO_GetPubAttr

描述

获取 AO 设备属性。

语法

ZH_S32 ZH_MPI_AO_GetPubAttr(AUDIO_DEV AoDevId, AIO_ATTR_S *pstAttr);

参数

参数名数据类型描述输入/输出
AoDevIdAUDIO_DEV音频设备号。
取值范围:[0, AO_DEV_MAX_NUM)。
输入
pstAttrAIO_ATTR_S*音频输出设备属性。输出

返回值

返回值描述
0成功。
非 0失败,其值为 AUDIO 错误码

注意事项

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

ZH_MPI_AO_Enable

描述

启用 AO 设备。

语法

ZH_S32 ZH_MPI_AO_Enable(AUDIO_DEV AoDevId);

参数

参数名数据类型描述输入/输出
AoDevIdAUDIO_DEV音频设备号。
取值范围:[0, AO_DEV_MAX_NUM)。
输入

返回值

返回值描述
0成功。
非0失败,其值为AUDIO 错误码

注意事项

  • 要求在启用前配置 AO 设备属性,否则会返回属性未配置的错误。
  • 如果 AO 设备已经启用,重复启用,则返回正在使用中的错误。

ZH_MPI_AO_Disable

描述

禁用 AO 设备。

语法

ZH_S32 ZH_MPI_AO_Disable(AUDIO_DEV AoDevId);

参数

参数名数据类型描述输入/输出
AoDevIdAUDIO_DEV音频设备号。
取值范围:[0, AO_DEV_MAX_NUM)。
输入

返回值

返回值描述
0成功。
非 0失败,其值为AUDIO 错误码

注意事项

  • 如果 AO 设备未启用,则返回未启用的 AUDIO 错误码。
  • 禁用 AO 设备前必须先禁用设备下所有 AO 通道。

ZH_MPI_AO_EnableChn

描述

启用 AO 通道。

语法

ZH_S32 ZH_MPI_AO_EnableChn(AUDIO_DEV AoDevId, AO_CHN AoChn);

参数

参数名数据类型描述输入/输出
AoDevIdAUDIO_DEV音频设备号。
取值范围:[0, AO_DEV_MAX_NUM)。
输入
AoChnAO_CHN音频输出通道号。
取值范围:[0, AO_MAX_CHN_NUM)。
输入

返回值

返回值描述
0成功。
非 0失败,其值为 AUDIO 错误码

注意事项

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


ZH_MPI_AO_DisableChn

描述

禁用 AO 通道。

语法

ZH_S32 ZH_MPI_AO_DisableChn(AUDIO_DEV AoDevId, AO_CHN AoChn);

参数

参数名数据类型描述输入/输出
AoDevIdAUDIO_DEV音频设备号。
取值范围:[0, AO_DEV_MAX_NUM)。
输入
AoChnAO_CHN音频输出通道号。
取值范围:[0, AO_MAX_CHN_NUM)。
输入

返回值

返回值描述
0成功。
非 0失败,其值为 AUDIO 错误码

注意事项

通道使用完成后,必须调用此函数关闭 AO 通道。


ZH_MPI_AO_SendFrame

描述

发送 AO 音频帧。

语法

ZH_S32 ZH_MPI_AO_SendFrame(AUDIO_DEV AoDevId, AO_CHN AoChn, const AUDIO_FRAME_S *pstData, ZH_S32 s32MilliSec);

参数

参数名数据类型描述输入/输出
AoDevIdAUDIO_DEV音频设备号。
取值范围:[0, AO_DEV_MAX_NUM)。
输入
AoChnAO_CHN音频输出通道号。
取值范围:[0, AO_MAX_CHN_NUM)。
输入
pstDataconst AUDIO_FRAME_S*音频帧结构体指针。输入
s32MilliSecZH_S32发送数据的超时时间:
-1:阻塞模式
≥0:非阻塞模式,设置发送数据的超时时间。
输入

返回值

返回值描述
0成功。
非 0失败,其值为 AUDIO 错误码

注意事项

  • 该接口用于用户发送音频帧至 AO 输出。
  • s32MilliSec 等于 -1 时,表示采用阻塞模式发送数据,该接口会被阻塞直到数据被成功送入;大于等于 0 时,表示非阻塞模式发送数据的超时时间(毫秒)。如在超时时间内完成数据的发送,则返回成功,否则返回超时并报错。
  • 调用该接口发送音频帧到 AO 输出时,必须先开启对应的 AO 通道和声卡设备。
  • 音频申请内存的方式建议尽量使用 malloc 方式申请。

ZH_MPI_AO_EnableReSmp

描述

启用 AO 重采样。

语法

ZH_S32 ZH_MPI_AO_EnableReSmp(AUDIO_DEV AoDevId, AO_CHN AoChn, AUDIO_SAMPLE_RATE_E enInSampleRate);

参数

参数名数据类型描述输入/输出
AoDevIdAUDIO_DEV音频设备号。
取值范围:[0, AO_DEV_MAX_NUM)。
输入
AoChnAO_CHN音频输出通道号。
取值范围:[0, AO_MAX_CHN_NUM)。
输入
enInSampleRateAUDIO_SAMPLE_RATE_E音频重采样的输入采样率。输入

返回值

返回值描述
0成功。
非 0失败,其值为 AUDIO 错误码

注意事项

  • 应该在启用 AO 通道之后,绑定 AO 通道之前,调用此接口启用重采样功能。
  • 允许重复启用重采样功能,但必须保证后配置的重采样输入采样率与之前配置的重采样输入采样率不一样。
  • 在禁用 AO 通道后,如果重新启用 AO 通道,并使用重采样功能,需调用此接口重新启用重采样。
  • AO 重采样接口设置的采样率为发送数据的采样率。
  • 就算不做重采样,也建议启用此接口,内部插件会有参数判断,参数一致时数据会直接 bypass。

示例代码

以 AO 从回放 8K 到 32K 的重采样为例,配置如下:

/* dev attr of ao */
AIO_ATTR_S aoAttr;
/* dev attr of ao */
aoAttr.soundCard.channels = 2;
aoAttr.soundCard.sampleRate = 32000;
aoAttr.soundCard.bitWidth = AUDIO_BIT_WIDTH_16;

aoAttr.enBitwidth = AUDIO_BIT_WIDTH_16;
aoAttr.enSamplerate = AUDIO_SAMPLE_RATE_8000;
aoAttr.enSoundmode = AUDIO_SOUND_MODE_MONO;

ZH_MPI_AO_SetPubAttr(aoDevId, &aoAttr);
ZH_MPI_AO_EnableReSmp(AoDev, AoChn, AUDIO_SAMPLE_RATE_8000);

ZH_MPI_AO_DisableReSmp

描述

禁用 AO 重采样。

语法

ZH_S32 ZH_MPI_AO_DisableReSmp(AUDIO_DEV AoDevId, AO_CHN AoChn);

参数

参数名数据类型描述输入/输出
AoDevIdAUDIO_DEV音频设备号。
取值范围:[0, AO_DEV_MAX_NUM)。
输入
AoChnAO_CHN音频输出通道号。
取值范围:[0, AO_MAX_CHN_NUM)。
输入

返回值

返回值描述
0成功。
非 0失败,其值为 AUDIO 错误码

注意事项

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


ZH_MPI_AO_PauseChn

描述

暂停 AO 通道。

语法

ZH_S32 ZH_MPI_AO_PauseChn(AUDIO_DEV AoDevId, AO_CHN AoChn);

参数

参数名数据类型描述输入/输出
AoDevIdAUDIO_DEV音频设备号。
取值范围:[0, AO_DEV_MAX_NUM)。
输入
AoChnAO_CHN音频输出通道号。
取值范围:[0, AO_MAX_CHN_NUM)。
输入

返回值

返回值描述
0成功。
非 0失败,其值为 AUDIO 错误码

注意事项

  • AO 通道暂停后,如果绑定的 ADEC 通道继续向此通道发送音频帧数据,发送的音频帧数据将会被阻塞。而如果绑定的 AI 通道继续向此通道发送音频帧数据,在通道缓冲未满的情况下则将音频帧放入缓冲区,在满的情况下则将音频帧丢弃。
  • AO 通道为禁用状态时,不允许调用此接口暂停 AO 通道。

ZH_MPI_AO_ResumeChn

描述

恢复 AO 通道。

语法

ZH_S32 ZH_MPI_AO_ResumeChn(AUDIO_DEV AoDevId, AO_CHN AoChn);

参数

参数名数据类型描述输入/输出
AoDevIdAUDIO_DEV音频设备号。
取值范围:[0, AO_DEV_MAX_NUM)。
输入
AoChnAO_CHN音频输出通道号。
取值范围:[0, AO_MAX_CHN_NUM)。
输入

返回值

返回值描述
0成功。
非 0失败,其值为 AUDIO 错误码

注意事项

  • AO 通道暂停后可以通过调用此接口重新恢复。
  • AO 通道为暂停状态或使能状态下,调用此接口返回成功;否则调用将返回错误。

ZH_MPI_AO_ClearChnBuf

描述

清除 AO 通道中当前的音频数据缓存。

语法

ZH_S32 ZH_MPI_AO_ClearChnBuf(AUDIO_DEV AoDevId, AO_CHN AoChn);

参数

参数名数据类型描述输入/输出
AoDevIdAUDIO_DEV音频设备号。
取值范围:[0, AO_DEV_MAX_NUM)。
输入
AoChnAO_CHN音频输出通道号。
取值范围:[0, AO_MAX_CHN_NUM)。
输入

返回值

返回值描述
0成功。
非 0失败,其值为 AUDIO 错误码

注意事项

  • 在 AO 通道成功启用后再调用此接口。
  • 如果绑定 ADEC 通道,为完全清除解码回放通路上所有缓存数据,此接⼝还应该与 ZH_MPI_ADEC_ClearChnBuf 接口配合使用。

ZH_MPI_AO_QueryChnStat

描述

查询 AO 通道中当前的音频数据缓存状态。

语法

ZH_S32 ZH_MPI_AO_QueryChnStat(AUDIO_DEV AoDevId, AO_CHN AoChn, AO_CHN_STATE_S *pstStatus);

参数

参数名数据类型描述输入/输出
AoDevIdAUDIO_DEV音频设备号。
取值范围:[0, AO_DEV_MAX_NUM)。
输入
AoChnAO_CHN音频输出通道号。
取值范围:[0, AO_MAX_CHN_NUM)。
输入
pstStatusAO_CHN_STATE_S*缓存状态结构体指针。输出

返回值

返回值描述
0成功。
非 0失败,其值为 AUDIO 错误码

注意事项

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


ZH_MPI_AO_SetTrackMode

描述

设置 AO 设备声道模式。

语法

ZH_S32 ZH_MPI_AO_SetTrackMode(AUDIO_DEV AoDevId, AUDIO_TRACK_MODE_E enTrackMode);

参数

参数名数据类型描述输入/输出
AoDevIdAUDIO_DEV音频设备号。
取值范围:[0, AO_DEV_MAX_NUM)。
输入
enTrackModeAUDIO_TRACK_MODE_E音频设备声道模式。输入

返回值

返回值描述
0成功。
非 0失败,其值为 AUDIO 错误码

注意事项

  • AUDIO_TRACK_MODE_E 定义参见 ZH_comm_aio.h
  • 在 AO 通道成功启用后再调用此接口。

ZH_MPI_AO_GetTrackMode

描述

获取 AO 设备声道模式。

语法

ZH_S32 ZH_MPI_AO_GetTrackMode(AUDIO_DEV AoDevId, AUDIO_TRACK_MODE_E *penTrackMode);

参数

参数名数据类型描述输入/输出
AoDevIdAUDIO_DEV音频设备号。
取值范围:[0, AO_DEV_MAX_NUM)。
输入
penTrackModeAUDIO_TRACK_MODE_E*音频设备声道模式指针。输出

返回值

返回值描述
0成功。
非 0失败,其值为 AUDIO 错误码

注意事项

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


ZH_MPI_AO_SetVolume

描述

设置 AO 设备音量大小。

语法

ZH_S32 ZH_MPI_AO_SetVolume(AUDIO_DEV AoDevId, ZH_S32 s32VolumeDb);

参数

参数名数据类型描述输入/输出
AoDevIdAUDIO_DEV音频设备号。
取值范围:[0, AO_DEV_MAX_NUM)。
输入
s32VolumeDbZH_S32音频设备音量大小百分比。
取值范围:[0, 100]。
输入

返回值

返回值描述
0成功。
非 0失败,其值为 AUDIO 错误码

注意事项

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


ZH_MPI_AO_GetVolume

描述

获取 AO 设备音量大小。

语法

ZH_S32 ZH_MPI_AO_GetVolume(AUDIO_DEV AoDevId, ZH_S32 *ps32VolumeDb);

参数

参数名数据类型描述输入/输出
AoDevIdAUDIO_DEV音频设备号。
取值范围:[0, AO_DEV_MAX_NUM)。
输入
ps32VolumeDbZH_S32*音频设备音量大小指针。输出

返回值

返回值描述
0成功。
非 0失败,其值为 AUDIO 错误码

注意事项

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


ZH_MPI_AO_SetChnParams

描述

设置 AO 通道参数。

语法

ZH_S32 ZH_MPI_AO_SetChnParams(AUDIO_DEV AoDevId, AO_CHN AoChn, const AO_CHN_PARAM_S *pstParams);

参数

参数名数据类型描述输入/输出
AoDevIdAUDIO_DEV音频设备号。
取值范围:[0, AO_DEV_MAX_NUM)。
输入
AoChnAO_CHN音频输出通道号。
取值范围:[0, AO_MAX_CHN_NUM)。
输入
pstParamsconst AO_CHN_PARAM_S*通道参数。输入

返回值

返回值描述
0成功。
非 0失败,其值为 AUDIO 错误码

注意事项

必须在 AO 通道启用前调用此接口。

示例代码

配置 AO 通道 0 数据输出到左声道,配置如下:

AUDIO_DEV aoDevId = 0;
AO_CHN aoChn0 = 0;
AIO_ATTR_S aoAttr;
memset(&aoAttr, 0, sizeof(AIO_ATTR_S));

aoAttr.soundCard.channels = 2;
aoAttr.soundCard.sampleRate = 48000;
aoAttr.soundCard.bitWidth = AUDIO_BIT_WIDTH_16;
aoAttr.enBitwidth = AUDIO_BIT_WIDTH_16;
aoAttr.enSamplerate = AUDIO_SAMPLE_RATE_8000;
aoAttr.enSoundmode = AUDIO_SOUND_MODE_MONO;
aoAttr.u32FrmNum = 4;
aoAttr.u32PtNumPerFrm = 1024;
aoAttr.u32EXFlag = 0;
aoAttr.u32ChnCnt = 2;

ZH_MPI_AO_SetPubAttr(aoDevId, &aoAttr);
ZH_MPI_AO_Enable(aoDevId);

AO_CHN_PARAM_S pstParams;
memset(&pstParams, 0, sizeof(AO_CHN_PARAM_S));
pstParams.enMode = AUDIO_CHN_MODE_LEFT;
ZH_MPI_AO_SetChnParams(aoDevId, aoChn0, &pstParams);

ZH_MPI_AO_EnableChn(aoDevId, aoChn0);

ZH_MPI_AO_GetChnParams

描述

获取 AO 通道参数。

语法

ZH_S32 ZH_MPI_AO_GetChnParams(AUDIO_DEV AoDevId, AO_CHN AoChn, AO_CHN_PARAM_S *pstParams);

参数

参数名数据类型描述输入/输出
AoDevIdAUDIO_DEV音频设备号。
取值范围:[0, AO_DEV_MAX_NUM)。
输入
AoChnAO_CHN音频输出通道号。
取值范围:[0, AO_MAX_CHN_NUM)。
输入
pstParamsAO_CHN_PARAM_S*通道参数。输出

返回值

返回值描述
0成功。
非 0失败,其值为 AUDIO 错误码

ZH_MPI_AO_SetMute

描述

设置 AO 设备静音状态。

语法

ZH_S32 ZH_MPI_AO_SetMute(AUDIO_DEV AoDevId, ZH_BOOL bEnable, const AUDIO_FADE_S *pstFade);

参数

参数名数据类型描述输入/输出
AoDevIdAUDIO_DEV音频设备号。
取值范围:[0, AO_DEV_MAX_NUM)。
输入
bEnableZH_BOOL音频设备是否启用静音。
- ZH_TRUE:开启静音
- ZH_FALSE:关闭静音
输入
pstFadeconst AUDIO_FADE_S*音频淡入淡出结构体指针。输入

返回值

返回值描述
0成功。
非 0失败,其值为 AUDIO 错误码

注意事项

  • 在 AO 通道成功启用后再调用此接口。
  • 调用此接口时,用户可以选择是否使用淡入淡出功能,如果不使用淡入淡出则将结构体指针赋为空即可。

ZH_MPI_AO_GetMute

描述

获取 AO 设备静音状态。

语法

ZH_S32 ZH_MPI_AO_GetMute(AUDIO_DEV AoDevId, ZH_BOOL *pbEnable, AUDIO_FADE_S *pstFade);

参数

参数名数据类型描述输入/输出
AoDevIdAUDIO_DEV音频设备号。
取值范围:[0, AO_DEV_MAX_NUM)。
输入
pbEnableZH_BOOL*音频设备静音状态指针。输出
pstFadeAUDIO_FADE_S*音频淡入淡出结构体指针。输出

返回值

返回值描述
0成功。
非 0失败,其值为 AUDIO 错误码

注意事项

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


ZH_MPI_AO_SaveFile

描述

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

语法

ZH_S32 ZH_MPI_AO_SaveFile(AUDIO_DEV AoDevId, AO_CHN AoChn, AUDIO_SAVE_FILE_INFO_S *pstSaveFileInfo);

参数

参数名数据类型描述输入/输出
AoDevIdAUDIO_DEV音频设备号。
取值范围:[0, AO_DEV_MAX_NUM)。
输入
AoChnAO_CHN音频输出通道号。
取值范围:[0, AO_MAX_CHN_NUM)。
输入
pstSaveFileInfoAUDIO_SAVE_FILE_INFO_S*音频保存文件属性结构体指针。输入

返回值

返回值描述
0成功。
非 0失败,其值为 AUDIO 错误码

注意事项

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


ZH_MPI_AO_QueryFileStatus

描述

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

语法

ZH_S32 ZH_MPI_AO_QueryFileStatus(AUDIO_DEV AoDevId, AO_CHN AoChn, AUDIO_FILE_STATUS_S *pstFileStatus);

参数

参数名数据类型描述输入/输出
AoDevIdAUDIO_DEV音频设备号。
取值范围:[0, AO_DEV_MAX_NUM)。
输入
AoChnAO_CHN音频输出通道号。
取值范围:[0, AO_MAX_CHN_NUM)。
输入
pstFileStatusAUDIO_FILE_STATUS_S*状态属性结构体指针。输出

返回值

返回值描述
0成功。
非 0失败,其值为 AUDIO 错误码

注意事项

此接口用于查询音频输出通道是否处于存文件的状态。


ZH_MPI_AO_ClrPubAttr

描述

清除 AO 设备属性。

语法

ZH_S32 ZH_MPI_AO_ClrPubAttr(AUDIO_DEV AoDevId);

参数

参数名数据类型描述输入/输出
AoDevIdAUDIO_DEV音频设备号。
取值范围:[0, AO_DEV_MAX_NUM)。
输入

返回值

返回值描述
0成功。
非 0失败,其值为 AUDIO 错误码

注意事项

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


ZH_MPI_AO_WaitEos

描述

等待指定设备和通道播放完成。

语法

ZH_S32 ZH_MPI_AO_WaitEos(AUDIO_DEV AoDevId, AO_CHN AoChn, ZH_S32 s32MilliSec);

参数

参数名数据类型描述输入/输出
AoDevIdAUDIO_DEV音频设备号。
取值范围:[0, AO_DEV_MAX_NUM)。
输入
AoChnAO_CHN音频输出通道号。
取值范围:[0, AO_MAX_CHN_NUM)。
输入
s32MilliSecZH_S32等待超时时间。
-1:阻塞模式
≥ 0:非阻塞模式,超时时间(单位:毫秒)
输入

返回值

返回值描述
0成功。
非 0失败,其值为 AUDIO 错误码

注意事项

  • 在 AO 通道成功启用后再调用此接口。
  • 当在 ADEC 绑定 AO 之后,建议调用此接口使用阻塞模式,等待播放完成。
  • s32MilliSec 的值等于 -1 时表示阻塞模式等待播放完成;大于等于 0 表示等待 s32MilliSec 毫秒后,查询播放结束的结果,如果超过等待时间内没有等到播放完毕,则返回超时并报错。

数据类型

音频输入输出相关数据类型、数据结构定义如下:


AUDIO_DEV

说明

定义 AO 设备句柄。

定义

typedef ZH_S32 AUDIO_DEV;

AO_CHN

说明

定义 AO 通道。

定义

typedef ZH_S32 AO_CHN;

AO_MAX_CHN_NUM

说明

定义音频输出通道的最大个数。

定义

#define AO_MAX_CHN_NUM 3

AO_DEV_MAX_NUM

说明

定义音频输出设备的最大个数。

定义

#define AO_DEV_MAX_NUM 2

AO_CHN_STATE_S

说明

音频输出通道的数据缓存状态结构体。

定义

typedef struct zhAO_CHN_STATE_S {
ZH_U32 u32ChnTotalNum; /* total number of channel buffer */
ZH_U32 u32ChnFreeNum; /* free number of channel buffer */
ZH_U32 u32ChnBusyNum; /* busy number of channel buffer */
} AO_CHN_STATE_S;

成员

成员名称数据类型描述
u32ChnTotalNumZH_U32输出通道总的缓存块数。
u32ChnFreeNumZH_U32可用的空闲缓存块数。
u32ChnBusyNumZH_U32被占用缓存块数。

AI_CHN

说明

定义 AI 通道。

定义

typedef ZH_S32 AI_CHN;

AI_MAX_CHN_NUM

说明

定义音频输入通道的最大个数。

定义

#define AI_MAX_CHN_NUM 1

AI_DEV_MAX_NUM

说明

定义音频输入设备的最大个数。

定义

#define AI_DEV_MAX_NUM 1

AI_CHN_PARAM_S

说明

定义通道参数结构体。

定义

typedef struct zhAI_CHN_PARAM_S {
ZH_S32 s32UsrFrmDepth;
ZH_S32 s32UsrFrmCount;
AUDIO_LOOPBACK_MODE_E enLoopbackMode;
ZH_U32 u32MapPtNumPerFrm;
AUDIO_SAMPLE_RATE_E enSamplerate;
ZH_S32 s32SedQueLen;
} AI_CHN_PARAM_S;

成员

成员名称数据类型描述
s32UsrFrmDepthZH_S32音频帧缓存深度。
s32UsrFrmCountZH_S32音频帧缓存个数。
enLoopbackModeAUDIO_LOOPBACK_MODE_E音频回环模式。
u32MapPtNumPerFrmZH_U32音频帧中每个采样点的字节数。
enSamplerateAUDIO_SAMPLE_RATE_E音频采样率。
s32SedQueLenZH_S32SED模块线程队列的大小,默认为3。

MAX_AUDIO_FILE_PATH_LEN

说明

音频保存文件的路径的最大长度限制。

定义

#define MAX_AUDIO_FILE_PATH_LEN 256

MAX_AUDIO_FILE_NAME_LEN

说明

音频保存文件的名称的最大长度限制。

定义

#define MAX_AUDIO_FILE_NAME_LEN 256

AIO_ATTR_S

说明

定义音频输入输出设备属性结构体。

定义

typedef struct zhAIO_ATTR_S {
// params of sound card
AIO_SOUND_CARD soundCard;
// input data sample rate
AUDIO_SAMPLE_RATE_E enSamplerate;
// bitwidth
AUDIO_BIT_WIDTH_E enBitwidth;
// momo or steror
AUDIO_SOUND_MODE_E enSoundmode;
/* expand 8bit to 16bit,use AI_EXPAND(only valid for AI 8bit),
* use AI_CUT(only valid for extern Codec for 24bit)
*/
ZH_U32 u32EXFlag;
/* frame num in buf[2,MAX_AUDIO_FRAME_NUM] */
ZH_U32 u32FrmNum;
/*
* point num per frame (80/160/240/320/480/1024/2048)
* (ADPCM IMA should add 1 point, AMR only support 160)
*/
ZH_U32 u32PtNumPerFrm;
ZH_U32 u32ChnCnt; /* channle number on FS, valid value:1/2/4/8 */
/*
* name of sound card, if it is setted, we will
* using it to open sound card, otherwise, use
* the index of device to open sound card
*/
ZH_U8 u8CardName[64];
ZH_U8 u8MapOutChns[AI_MAX_CHN_NUM];
ZH_U8 u8MapChns[AI_MAX_CHN_NUM][MAX_SOUND_CARD_CHANNEL];
ZH_BOOL bBypassFlag;
ZH_S32 s32DevQueLen;
} AIO_ATTR_S;

成员

成员名称数据类型描述
soundCardAIO_SOUND_CARD打开声卡时配置的参数。
需要设置声卡驱动支持的采样率,声道数和采样精度。必须配置。
enSamplerateAUDIO_SAMPLE_RATE_E音频采样率。必须配置。
  • 对于 AI,表示用户获取数据的采样率,比如打开声卡 16K,需要读取 8K 的数据,此时配置 enSamplerate 为 8K,需要调用 ZH_MPI_AI_EnableReSmp 使能重采样,把 16k 数据转换成 8k 读取。
  • 对于 AO,表示发送数据的采样率,比如用户发送 16k 采样率的数据,设置 enSamplerate 为 16k,此时声卡只支持打开 48k,需要调用 ZH_MPI_AI_EnableReSmp 使能重采样,把 16k 数据转换成 48k 送去播放。
enBitwidthAUDIO_BIT_WIDTH_E音频采样精度。原理同 enSamplerate,设置数据的采样精度。必须配置。
enSoundmodeAUDIO_SOUND_MODE_E音频声道模式。原理同 enSamplerate,设置数据的声道数。必须配置。
u32EXFlagZH_U32设置默认为 0。
u32FrmNumZH_U32缓冲个数。
每次 DMA 运输处理音频数据的帧数。如果周期大小设定得较大,则单次处理的数据较多,这意味着单位时间内硬件中断的次数较少,CPU 也就有更多时间处理其他任务,功耗也更低,但这样也带来⼀个显著的弊端⸺数据处理的时延会增大。
u32PtNumPerFrmZH_U32ai: 表示应用取帧的长度(byte)。ao: 表示应用送帧的长度(byte)。
u32ChnCntZH_U32支持的声道数目。
u8CardNameZH_U8声音名字。外部可配需要打开的声卡,代码内部有默认配置。
u8MapOutChnsZH_U8输出通道映射关系。
u8MapChnsZH_U8映射通道数目。
bBypassFlagZH_BOOL音频设备是否使用 bypass 模式。
s32DevQueLenZH_S32设备驱动线程的队列大小,默认为 4。

AUDIO_FRAME_S

说明

定义音频帧数据结构体。

定义

typedef struct zhAUDIO_FRAME_S {
MB_BLK pMbBlk;
AUDIO_BIT_WIDTH_E enBitWidth; /*audio frame bitwidth*/
AUDIO_SOUND_MODE_E enSoundMode; /*audio frame momo or stereo mode*/
ZH_U64 u64TimeStamp; /*audio frame timestamp*/
ZH_U32 u32Seq; /*audio frame seq*/
ZH_U32 u32Len; /*data lenth per channel in frame, u32Len <= 0 mean eos*/
ZH_BOOL bBypassMbBlk; /* FALSE: copy, TRUE: MbBlock owned by internal */
ZH_S32 s32SampleRate; /*audio frame sampleRate*/
} AUDIO_FRAME_S;

成员

成员名称数据类型描述
pMbBlkMB_BLK缓存块句柄。
enBitWidthAUDIO_BIT_WIDTH_E音频采样精度。
enSoundModeAUDIO_SOUND_MODE_E音频声道模式。
u64TimeStampZH_U64音频帧时间戳。以 µs 为单位。
u32SeqZH_U32音频帧序号。
u32LenZH_U32音频帧长度。以 byte 为单位。
bBypassMbBlkZH_BOOL否需要拷贝外部定义的MB_BLK到内部。
- FALSE: 需要拷贝
- TRUE: 不需要拷贝
s32SampleRateZH_S32音频采样率。

注意事项

AUDIO_FRAME_S 的数据存储在 pMbBlk 中,输入输出均需要外部申请合理合法的缓存块。


AUDIO_SOUND_MODE_E

说明

定义音频声道模式。

定义

typedef enum zhAIO_SOUND_MODE_E {
AUDIO_SOUND_MODE_MONO = 0, /*mono*/
AUDIO_SOUND_MODE_STEREO = 1, /*stereo*/
AUDIO_SOUND_MODE_4_CHN = 4,
AUDIO_SOUND_MODE_6_CHN = 6,
AUDIO_SOUND_MODE_8_CHN = 8,
AUDIO_SOUND_MODE_BUTT
} AUDIO_SOUND_MODE_E;

成员

成员名称描述
AUDIO_SOUND_MODE_MONO单声道。
AUDIO_SOUND_MODE_STEREO双声道。
AUDIO_SOUND_MODE_4_CHN4 声道。
AUDIO_SOUND_MODE_6_CHN6 声道。
AUDIO_SOUND_MODE_8_CHN8 声道。

AUDIO_BIT_WIDTH_E

说明

定义音频采样精度。

定义

typedef enum zhAUDIO_BIT_WIDTH_E {
AUDIO_BIT_WIDTH_8 = 0, /* 8bit width */
AUDIO_BIT_WIDTH_16 = 1, /* 16bit width */
AUDIO_BIT_WIDTH_24 = 2, /* 24bit width */
AUDIO_BIT_WIDTH_32 = 3, /* 32bit width */
AUDIO_BIT_WIDTH_FLT = 4, /* float, 32bit width */
AUDIO_BIT_WIDTH_BUTT,
} AUDIO_BIT_WIDTH_E;

成员

成员名称描述
AUDIO_BIT_WIDTH_8采样精度为 8bit 位宽。
AUDIO_BIT_WIDTH_16采样精度为 16bit 位宽。
AUDIO_BIT_WIDTH_24采样精度为 24bit 位宽。
AUDIO_BIT_WIDTH_32采样精度为 32bit 位宽。
AUDIO_BIT_WIDTH_FLT采样精度为 32bit 位宽。浮点类型。

AIO_SOUND_CARD

说明

定义音频声卡。

定义

typedef struct zhAIO_SOUND_CARD {
ZH_U32 channels;
ZH_U32 sampleRate;
AUDIO_BIT_WIDTH_E bitWidth;
} AIO_SOUND_CARD;

成员

成员名称数据类型描述
channelsZH_U32打开声卡声道数。
sampleRateZH_U32打开声卡采样率。
bitWidthAUDIO_BIT_WIDTH_E打开声卡采样位深。

AUDIO_STREAM_S

说明

定义音频码流结构体。

定义

typedef struct zhAUDIO_STREAM_S {
MB_BLK pMbBlk;
ZH_U32 u32Len; /* stream lenth, by bytes */
ZH_U64 u64TimeStamp; /* frame time stamp*/
ZH_U32 u32Seq; /* frame seq,if stream is not a valid frame, u32Seq is 0*/
ZH_BOOL bBypassMbBlk; /* FALSE: copy, TRUE: MbBlock owned by internal */
} AUDIO_STREAM_S;

成员

成员名称数据类型描述
pMbBlkMB_BLK缓存块句柄。
u32LenZH_U32音频码流长度。
u64TimeStampZH_U64音频码流时间戳。
u32SeqZH_U32音频码流序号。
bBypassMbBlkZH_BOOL是否需要拷贝外部定义的 MB_BLK 到内部。
- FALSE: 需要拷贝。
- TRUE:不需要拷贝。

AUDIO_SAMPLE_RATE_E

说明

定义音频采样率。

定义

typedef enum zhAUDIO_SAMPLE_RATE_E {
AUDIO_SAMPLE_RATE_DISABLE = 0,
AUDIO_SAMPLE_RATE_8000 = 8000, /* 8K samplerate*/
AUDIO_SAMPLE_RATE_12000 = 12000, /* 12K 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_96000 = 96000, /* 96K samplerate*/
AUDIO_SAMPLE_RATE_BUTT,
} AUDIO_SAMPLE_RATE_E;

AUDIO_TRACK_MODE_E

说明

音频设备声道模式类型。

定义

typedef enum zhAUDIO_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_FRONT_LEFT = 8,
AUDIO_TRACK_FRONT_RIGHT = 9,
AUDIO_TRACK_OUT_STEREO = 10,
AUDIO_TRACK_BUTT
} AUDIO_TRACK_MODE_E;

成员

成员名称描述
AUDIO_TRACK_NORMAL正常模式(默认),不做处理。
AUDIO_TRACK_BOTH_LEFT两个声道全部为左声道声音。
AUDIO_TRACK_BOTH_RIGHT两个声道全部为右声道声音。
AUDIO_TRACK_EXCHANGE左右声道数据互换,左声道为右声道声音,右声道为左声道声音。
AUDIO_TRACK_MIX左右两个声道输出为左右声道相加(混音)。
AUDIO_TRACK_LEFT_MUTE左声道静音,右声道播放原右声道声音。
AUDIO_TRACK_RIGHT_MUTE右声道静音,左声道播放原左声道声音。
AUDIO_TRACK_BOTH_MUTE左右声道均静音。
AUDIO_TRACK_FRONT_LEFT等同 AUDIO_TRACK_BOTH_LEFT。
AUDIO_TRACK_FRONT_RIGHT等同 AUDIO_TRACK_BOTH_RIGHT。
AUDIO_TRACK_OUT_STEREO等同 AUDIO_TRACK_NORMAL。

AUDIO_FADE_RATE_E

说明

定义音频输出设备淡入淡出速度类型。

定义

typedef enum zhAUDIO_FADE_RATE_E {
AUDIO_FADE_RATE_1 = 0,
AUDIO_FADE_RATE_2 = 1,
AUDIO_FADE_RATE_4 = 2,
AUDIO_FADE_RATE_8 = 3,
AUDIO_FADE_RATE_16 = 4,
AUDIO_FADE_RATE_32 = 5,
AUDIO_FADE_RATE_64 = 6,
AUDIO_FADE_RATE_128 = 7,
AUDIO_FADE_RATE_BUTT
} AUDIO_FADE_RATE_E;

成员

成员名称描述
AUDIO_FADE_RATE_11 个采样点改变⼀次。
AUDIO_FADE_RATE_22 个采样点改变⼀次。
AUDIO_FADE_RATE_44 个采样点改变⼀次。
AUDIO_FADE_RATE_88 个采样点改变⼀次。
AUDIO_FADE_RATE_1616 个采样点改变⼀次。
AUDIO_FADE_RATE_3232 个采样点改变⼀次。
AUDIO_FADE_RATE_6464 个采样点改变⼀次。
AUDIO_FADE_RATE_128128 个采样点改变⼀次。

AUDIO_FADE_S

说明

音频输出设备淡入淡出配置结构体。

定义

typedef struct zhAUDIO_FADE_S {
ZH_BOOL bFade;
AUDIO_FADE_RATE_E enFadeInRate;
AUDIO_FADE_RATE_E enFadeOutRate;
} AUDIO_FADE_S;

成员

成员名称数据类型描述
bFadeZH_BOOL是否开启淡入淡出功能。
  • ZH_TRUE:开启淡入淡出功能。
  • ZH_FALSE:关闭淡入淡出功能。
enFade InRateAUDIO_FADE_RATE_E音频输出设备音量淡入速度。
enFadeOutRateAUDIO_FADE_RATE_E音频输出设备音量淡出速度。

AUDIO_CHN_MODE_E

说明

音频通道模式类型。

定义

typedef enum zhAUDIO_CHN_MODE_E {
AUDIO_CHN_MODE_LEFT = 10,
AUDIO_CHN_MODE_RIGHT = 11,
AUDIO_CHN_MODE_BUTT
} AUDIO_CHN_MODE_E;

成员

成员名称描述
AUDIO_CHN_MODE_LEFT通道独立输出到左声道。
AUDIO_CHN_MODE_RIGHT通道独立输出到右声道。

AO_CHN_PARAM_S

说明

音频输出通道参数结构体。

定义

typedef struct zhAO_CHN_PARAM_S {
AUDIO_CHN_MODE_E enMode;
AUDIO_LOOPBACK_MODE_E enLoopbackMode;
} AO_CHN_PARAM_S;

成员

成员名称数据类型描述
enModeAUDIO_CHN_MODE_EAO 通道独立输出模式。
enLoopbackModeAUDIO_LOOPBACK_MODE_E回环模式。

AUDIO_SAVE_FILE_INFO_S

说明

定义音频保存文件功能配置信息结构体。

定义

typedef struct zhAUDIO_SAVE_FILE_INFO_S {
ZH_BOOL bCfg;
ZH_CHAR aFilePath[MAX_AUDIO_FILE_PATH_LEN];
ZH_CHAR aFileName[MAX_AUDIO_FILE_NAME_LEN];
ZH_U32 u32FileSize; /*in KB*/
} AUDIO_SAVE_FILE_INFO_S;

成员

成员名称数据类型描述
bCfgZH_BOOL配置使能开关。
aFilePathZH_CHAR音频文件保存路径。
aFileNameZH_CHAR音频文件保存名称。
u32FileSizeZH_U32文件大小,单位 byte。

AUDIO_FILE_STATUS_S

说明

定义音频文件保存状态结构体。

定义

typedef struct zhAUDIO_FILE_STATUS_S {
ZH_BOOL bSaving;
} AUDIO_FILE_STATUS_S;

成员

成员名称描述
bSavingZH_BOOL文件是否处于保存状态。

AUDIO 错误码

音频输入 AUDIO 错误码

音频输入 API AUDIO 错误码如下所示。

错误代码宏定义描述
0xA00A8001ZH_ERR_AI_INVALID_DEVID音频输入设备号无效。
0xA00A8002ZH_ERR_AI_INVALID_CHNID音频输入通道号无效。
0xA00A8003ZH_ERR_AI_ILLEGAL_PARAM音频输入参数设置无效。
0xA00A8005ZH_ERR_AI_NOT_ENABLED音频输入设备或通道没使能。
0xA00A8006ZH_ERR_AI_NULL_PTR输入空指针错误。
0xA00A8007ZH_ERR_AI_NOT_CONFIG音频输入设备属性未设置。
0xA00A8008ZH_ERR_AI_NOT_SUPPORT操作不被支持。
0xA00A8009ZH_ERR_AI_NOT_PERM操作不允许。
0xA00A800CZH_ERR_AI_NOMEM分配内存失败。
0xA00A800DZH_ERR_AI_NOBUF音频输入缓存不足。
0xA00A800EZH_ERR_AI_BUF_EMPTY音频输入缓存为空。
0xA00A800FZH_ERR_AI_BUF_FULL音频输入缓存为满。
0xA00A8010ZH_ERR_AI_SYS_NOTREADY音频输入系统未初始化。
0xA00A8012ZH_ERR_AI_BUSY音频输入系统忙。
0xA00A8041ZH_ERR_AI_VQE_ERRAI VQE 处理错误。

音频输出 AUDIO 错误码

音频输出 API AUDIO 错误码如下所示。

错误代码宏定义描述
0xA00B8001ZH_ERR_AO_INVALID_DEVID音频输出设备号无效。
0xA00B8002ZH_ERR_AO_INVALID_CHNID音频输出通道号无效。
0xA00B8003ZH_ERR_AO_ILLEGAL_PARAM音频输出参数设置无效。
0xA00B8005ZH_ERR_AO_NOT_ENABLED音频输出设备或通道没使能。
0xA00B8006ZH_ERR_AO_NULL_PTR输出空指针错误。
0xA00B8007ZH_ERR_AO_NOT_CONFIG音频输出设备属性未设置。
0xA00B8008ZH_ERR_AO_NOT_SUPPORT操作不被支持。
0xA00B8009ZH_ERR_AO_NOT_PERM操作不允许。
0xA00B800CZH_ERR_AO_NOMEM系统内存不足。
0xA00B800DZH_ERR_AO_NOBUF音频输出缓存不足。
0xA00B800EZH_ERR_AO_BUF_EMPTY音频输出缓存为空。
0xA00B800FZH_ERR_AO_BUF_FULL音频输出缓存为满。
0xA00B8010ZH_ERR_AO_SYS_NOTREADY音频输出系统未初始化。
0xA00B8012ZH_ERR_AO_BUSY音频输出系统忙。
0xA00B8041ZH_ERR_AO_VQE_ERRAO VQE 处理错误。