hi_mpi_ao_disable_resample
hi_mpi_ao_send_frame
函数功能
发送AO音频帧。
约束说明
- 该接口用于用户主动发送音频帧至AO输出。
- 调用该接口发送音频帧到AO输出时,必须先调用hi_mpi_ao_enable_chn接口使能对应的AO通道。
- 播音为左声道和双声道时,ai_chn需固定为0;右声道时,ai_chn为1。
- 音频帧结构体的成员变量len和virt_addr需要匹配,len代表帧长(单位:字节),virt_addr为传入的音频数据的地址。建议每次传入的数据为一帧数据,即长度len为point_num_per_frame与位宽(16bit为2字节,24bit为3字节)的乘积。
- 对长度len限制如下:首先根据len与位宽计算出数据点数(数据点数=len/位宽对应的字节数),数据点数的范围为[1, frame_num * point_num_per_frame],最大上限为4096。
- 举例1:如果frame_num=2,point_num_per_frame=480(frame_num和point_num_per_frame的范围限制可以参见结构体hi_aio_attr),此时frame_num * point_num_per_frame=960,且960<4096,那么数据点数的范围为[1, 960]。
- 举例2:如果frame_num=30,point_num_per_frame=4096,此时frame_num * point_num_per_frame=122880,且122880>4096,那么数据点数的范围为[1, 4096]。
- 举例3:如果根据frame_num和point_num_per_frame确定的数据点数范围为[1, 960]。若此时len=960,位宽为16位(即2字节),计算得到数据点数为960/2=480,在[1, 960]范围之内,即符合要求;若此时len=3840,位宽为16位(即2字节),计算得到数据点数为3840/2=1920,在[1, 960]范围之外,则会返回报错。
函数原型
hi_s32 hi_mpi_ao_send_frame(hi_audio_dev ao_dev, hi_ao_chn ao_chn, const hi_audio_frame *data, hi_s32 milli_sec);
参数说明
| 参数名 | 输入/输出 | 说明 |
|---|---|---|
| ao_dev | 输入 | 音频设备号,取值范围:[0, 4]。 |
| ao_chn | 输入 | 音频输出通道号。 |
| data | 输入 | 音频帧结构体。 |
| milli_sec | 输入 | 配置发送数据的超时时间,单位是毫秒,取值范围如下: - -1:表示阻塞模式,无数据时一直等待; - 0:表示非阻塞模式,无数据时则报错返回; - >0:需要配置具体的超时时间,表示超过指定时间后无数据,则报错返回。 |
返回值说明
- 0:成功。
- 非0:失败,参见音频相关返回码。
参考资源
接口调用流程,参见音频获取&音频播放功能。
父主题: AI音频输入/AO音频输出
hi_mpi_ao_get_chn_delay
函数功能
获取AO通道中当前的音频延时大小。
约束说明
- 该接口要在AO通道成功启用之后调用。
- 获取AO通道中当前的音频延时大小,当延时查询到的延时为0时停止等待,进入播音停止流程。
函数原型
hi_s32 hi_mpi_ao_get_chn_delay(hi_audio_dev ao_dev, hi_ao_chn ao_chn, hi_u32 *milli_sec);
参数说明
| 参数名 | 输入/输出 | 说明 |
|---|---|---|
| ao_dev | 输入 | 音频设备号,取值范围:[0, 4]。 |
| ao_chn | 输入 | 音频输出通道号。 |
| milli_sec | 输出 | 音频延时的指针。音频延时大小以毫秒为单位。 |
返回值说明
- 0:成功。
- 非0:失败,参见音频相关返回码。
参考资源
接口调用流程,参见音频获取&音频播放功能。
父主题: AI音频输入/AO音频输出
hi_mpi_ao_enable_resample
函数功能
启用AO重采样。
约束说明
- 调用hi_mpi_ao_enable_chn接口启用AO通道之后,调用hi_mpi_sys_bind接口绑定ADEC与AO之前,调用本接口启用重采样功能。
- 调用hi_mpi_ao_disable_chn接口禁用AO通道后,如果重新启用AO通道,并使用重采样功能,需调用本接口再次启用重采样。
- AO重采样的输入采样率必须与AO设备属性配置的采样率不相同。
- 由于奈奎斯特采样定理的限制,在音频采样率为8kHz时,则所支持的音频频率小于4kHz。
- 由于AO的采样率固定为48kHz,G.711a、G.711u协议的采样率仅支持8kHz,因此需启用重采样功能;而48kHz在AAC协议采样率支持的范围内,因此使用AAC协议时,在AO时无需重采样。
函数原型
hi_s32 hi_mpi_ao_enable_resample(hi_audio_dev ao_dev, hi_ao_chn ao_chn, hi_audio_sample_rate in_sample_rate);
参数说明
| 参数名 | 输入/输出 | 说明。 |
|---|---|---|
| ao_dev | 输入 | 音频设备号,取值范围:[0, 4]。 NVR(Network Video Recorder)场景中仅涉及dev2、dev3。 |
| ao_chn | 输入 | 音频输出通道号。目前只支持单声道(左声道),所以ao_chn取值固定为0。 |
| hi_audio_sample_rate | 输入 | 音频重采样的输入采样率,目前只支持8k。 |
返回值说明
- 0:成功
- 非0:失败,参考音频相关返回码。
参考资源
接口调用流程,参见语音对讲功能(NVR场景)。
父主题: AI音频输入/AO音频输出
hi_mpi_ao_disable_resample
函数功能
禁用 AO 重采样。
函数原型
hi_s32 hi_mpi_ao_disable_resample(hi_audio_dev ao_dev, hi_ao_chn ao_chn);
参数说明
| 参数名 | 输入/输出 | 说明。 |
|---|---|---|
| ao_dev | 输入 | 音频设备号,取值范围:[0, 4]。 NVR(Network Video Recorder)场景中仅涉及dev2、dev3。 |
| ao_chn | 输入 | 音频输出通道号。 目前只支持单声道(左声道),所以ao_chn取值固定为0。 |
返回值说明
- 0:成功
- 非0:失败,参考音频相关返回码。
参考资源
接口调用流程,参见语音对讲功能(NVR场景)。
父主题: AI音频输入/AO音频输出
功能及约束说明
当前仅支持G.711a、G.711u、AAC(Advanced Audio Coding)协议、单声道数据进行编码、解码,且为软件编码、解码。本章中的接口均不支持多进程**,**且同一个设备ID不支持在多线程中使用。
音频编码时,G.711a、G.711u码流遵循以下表格中描述的帧结构,即在每帧码流数据的净荷数据之前填充有4个字节的帧头;音频解码时,需要读取相应的帧头信息。在G.711a、G.711u码流中,目前帧头中的数据净荷长度需为40,80,120,160,240(单位:hi_s16),所以对应的每帧采样点数即为80,160,240,320,480。但在VQE(Voice Quality Enhancement)框架中,编解码操作是与AI、AO绑定在一起,所以支持的每帧采样点数范围缩小。
参数位置(单位:hi_s16) | 参数比特位说明 | 参数含义 |
|---|---|---|
0 | [15:8] | 数据帧类型标志位。 01:语音帧; 其他:保留。 |
[7:0] | 保留。 | |
1 | [15:8] | 帧循环计数器:0~255。 |
[7:0] | 数据净荷长度(单位:hi_s16)。 | |
2 | [15:0] | 净荷数据。 |
3 | [15:0] | 净荷数据。 |
...... | [15:0] | 净荷数据。 |
n+1 | [15:0] | 净荷数据。 |
n+2 | [15:0] | 净荷数据。 |
G.711a、G.711u、AAC协议的相关规格及优缺点如下:
| 协议 | 采样率 | 每帧采样点数 | 码率(kbps) | 压缩率 | CPU消耗 | 描述 |
|---|---|---|---|---|---|---|
| G.711a、G.711u | 8kHz | 80/160/240/320/480 | 64 | 2 | 1 MHz | - 优点:语音质量最好;CPU消耗小;支持广泛,协议免费。 - 缺点:压缩效率低。 |
| AAC 仅支持MPEG-4版本、无CRC(Cyclic Redundancy Check)校验的音频码流 | 48kHz | 1024 | [48, 256] | 与码率相关,码率越小,压缩率越大 | - | - 优点:持更高采样率的编解码,能够保留原始音频的更多高频信息,同时拥有更多的码率范围选择,压缩率更高。 - 缺点:算法复杂度高。 |
父主题: AENC音频编码/ADEC音频解码
hi_mpi_aenc_create_chn
函数功能
创建音频编码通道。
约束说明
通道如果已经被创建,则会返回通道已创建的错误。
函数原型
hi_s32 hi_mpi_aenc_create_chn(hi_aenc_chn aenc_chn, const hi_aenc_chn_attr *****attr);
参数说明
| 参数名 | 输入/输出 | 说明。 |
|---|---|---|
| aenc_chn | 输入 | 通道号,取值范围[0,6) |
| attr | 输入 | 音频编码通道属性指针。 |
返回值说明
- 0:成功
- 非0:失败,参考音频相关返回码。
父主题: AENC音频编码/ADEC音频解码
hi_mpi_aenc_destroy_chn
函数功能
销毁音频编码通道。
函数原型
hi_s32 hi_mpi_aenc_destroy_chn(hi_aenc_chn aenc_chn**);**
参数说明
| 参数名 | 输入/输出 | 说明。 |
|---|---|---|
| aenc_chn | 输入 | 通道号,取值范围[0,6) |
返回值说明
- 0:成功
- 非0:失败,参考音频相关返回码。
父主题: AENC音频编码/ADEC音频解码
在线提单