跳转至

音频

概述

AUDIO模块包括音频输入、音频输出、音频编码、音频解码四个子模块。音频输入和输出模块通过对芯片音频接口的控制实现音频输入输出功能。音频编码和解码模块提供对G711、G726、ADPCM等格式的音频编解码功能,并支持录制和播放LPCM格式的原始音频文件。

说明:

未有特殊说明,Hi3516DV500与Hi3519DV500、Hi3516CV608与Hi3516CV610内容完全一致。

功能描述

音频输入和音频输出

音频接口和AI、AO设备

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

AIO接口分为两种类型:只支持输入(又称为AIP)或只支持输出(又称为AOP)。

软件中负责抽象音频接口输入功能的单元,称之为AI设备;负责抽象音频接口输出功能的单元,称之为AO设备。

对每个输入输出接口,软件根据该接口支持的功能,分别与AI设备和AO设备建立映射关系。例如:AIP0只支持音频输入,则AIP0映射为AiDev0;AOP0只支持音频输出,则AOP0映射为AoDev0。

录音和播放原理

原始音频信号以模拟信号的形式给出后,通过Audio Codec,按一定采样率和采样精度转换为数字信号。Audio Codec以I2S时序或PCM时序的方式,将数字信号传输给AI设备。芯片利用DMA将AI设备中的音频数据搬移到内存中,完成录音操作。

播放和录音是基于同样的原理。芯片利用DMA将内存中的数据传输到AO设备。AO设备通过I2S时序或PCM时序向Audio Codec发送数据。Audio Codec完成数字信号到模拟信号的转换过程,并输出模拟信号。

图 1 录音和播放示意图

音频接口时序

音频接口支持标准的I2S接口时序模式和PCM接口时序模式,并提供灵活的配置以支持与多种Audio Codec对接。详细的时序支持情况请参考对应芯片的用户指南。

为实现成功对接,需要对I2S或者PCM协议以及对接的Audio Codec时序支持情况有足够了解,这里只简单介绍下I2S及PCM接口时序的几个特性:

  • 按照标准I2S或PCM协议,总是先传送最高有效位MSB,后传送最低有效位LSB,即按照从高位到低位的顺序传输串行数据。
  • AI设备支持扩展的多路接收的I2S及PCM接口时序。对接时,Codec的时序模式选择、同步时钟、采样位宽等配置必须与AI设备的配置保持一致,否则可能采集不到正确的数据。
  • AI/AO设备支持主模式和从模式,主模式即AI/AO设备提供时钟,从模式即Audio Codec提供时钟。主模式时,如果AI设备与AO设备同时对接同一个Codec,则时钟供输入和输出共同使用,其他情况没有此限制。而从模式时的输入输出时钟可以分别由外围Audio Codec提供。
  • 由于时序的问题,在AI/AO设备从模式下,建议用户先配置好对接的Codec,再配置AI或AO设备;而在AI/AO设备主模式下,建议用户先配置好AI或AO设备,再配置对接的Codec。
  • AI/AO设备选择主模式时,有些AI/AO设备只提供用于时序同步的帧同步时钟和位流时钟,不提供MCLK,这时如果Audio Codec使用外接的晶振作为工作时钟,这样可能导致声音失真,因此推荐使用从模式或者使用位流时钟产生Codec内部工作主时钟。
  • 当AI/AO设备为主模式时,对于向外提供了MCLK的AI/AO设备,通道数为1/2/4/8/16路时,MCLK的设定为:

    • 采样率为96k/48k/24k/12k时,提供12.288MHz的主时钟。
    • 采样率为64k/32k/16k/8k时,提供8.192MHz的主时钟。
    • 采样率为44.1k/22.05k/11.025k时,提供11.2896MHz的主时钟。

    通道数为20路时,MCLK的设定为:

    • 采样率为48k/24k/12k时,提供15.36MHz的主时钟。
    • 采样率为32k/16k/8k时,提供10.24MHz的主时钟。
    • 采样率为44.1k/22.05k/11.025k时,提供14.112MHz的主时钟。
  • AI/AO设备支持标准PCM模式和自定义PCM模式。PCM模式下只支持单声道模式,因此在PCM模式下,需要关闭对接Codec的右声道输出,否则声音会有杂音。根据PCM标准模式协议,当工作模式为标准PCM主模式或标准PCM从模式时,音频输入输出的数据相对帧同步信号延迟1个位流时钟(BCLK)周期。如果在标准PCM主模式或标准PCM从模式下对接外置的Codec,需要确保外置Codec的数据相对帧同步信号延迟的位流时钟(BCLK)周期数大于音频输入输出数据相对帧同步信号延迟的位流时钟周期数(1个BCLK),否则声音会有杂音。

图 1 I2S 1/2/4/8/16/20路接收

注:m0~m3为4路mic数据。1ch模式仅在非时分复用时支持。

AI、AO通道

AI和AO通道是软件层次的概念,下面通过举例的方式来说明通道的概念。

例如:

  • 当AI设备使用多路复用的I2S接收模式时,标准的I2S协议只有左右声道这个概念,AI设备最大支持左右声道各接收128bit音频数据。此时假设Codec具有复用功能,可以将16路16bit采样精度的音频数据复用为2路128bit的I2S左右声道数据,那么AI设备可以解析这16路音频数据,并称这16路音频数据为16个音频通道。
  • 当AO设备使用多路复用的I2S发送模式时,标准的I2S协议只有左右声道这个概念,AO设备最大支持左右声道各发送128bit音频数据。此时假设Codec具有复用功能,可以将8路24bit采样精度的音频数据复用为2路128bit的I2S左右声道数据,那么AO设备可以解析这8路音频数据,并称这8路音频数据为8个音频通道。
  • 当AO设备使用多线的I2S发送模式时,此时仅支持标准的I2S协议,即每根数据线最大支持左右声道各发送24bit数据。此时假设使用了4根数据线,可以将每根数据线上的左右声道数据视为2路音频数据,那么AO设备可以发送这8路音频数据,并称这8路音频数据为8个音频通道。

AIO在不同协议时,支持的AI、AO多路复用模式有差异,不同的解决方案也不相同。

  • Hi3519DV500如表1所示。

    表 1 Hi3519DV500 AIO最大支持AI、AO通道数

    AIO多路复用

    最大支持

    通道举例

    I2S时序接收

    左右声道各128bit

    16bit16chn等

    PCM时序接收

    单声道256bit

    16bit16chn等

    I2S时序发送

    左右声道各128bit

    16bit8chn等

    PCM时序发送

    单声道16bit

    16bit1chn

  • Hi3516CV610如表2所示。

    表 2 Hi3516CV610 AIO最大支持AI、AO通道数

    AIO多路复用

    最大支持

    通道举例

    I2S时序接收

    左右声道各32bit

    16bit4chn等

    PCM时序接收

    单声道64bit

    16bit4chn等

    I2S时序发送

    左右声道各32bit

    16bit2chn等

    PCM时序发送

    单声道16bit

    16bit1chn

AI、AO可以在AI/AO设备最大支持的比特范围内,按采样精度拆分AI和AO通道,并按照时序上的顺序,依次视为AiChn0、AiChn1等或AoChn0、AoChn1等。只有AI/AO设备配置的I2S或PCM时序与Codec配置的时序一致时,才能接收或传送正确的音频数据,将AI/AO设备的时序配置和Codec的时序配置调为一致的过程称作对接。例如配置AI为标准PCM从模式,8k采样率,16bit采样精度,2通道;配置Codec提供的帧同步时钟为8k,位流时钟为8kx32bit,每个采样点为32bit(Codec支持将两个16bit的采样点复用为一个采样点);PCM时序上的通道排列如图1所示,I2S时序多线模式上的通道排列如图2所示。

图 1 PCM时序发送示意图

图 2 I2S时序多线发送示意图

音频AI支持的最大通道数为20通道,I2S模式下AO支持的最大通道数为8通道(每根数据线支持2通道,受I2S数据线数量限制,最大仅4通道有效),PCM模式下AO支持的最大通道数为1通道。多通道情况下,AI、AO视通道排列中相对应的两通道为立体声输入输出。

  • 对于AI,例如图1中,通道0和4、1和5、2和6、3和7视为立体声的左右声道,即共有四路16bit采样精度的立体声输入,这时只应对左声道0~3进行操作。
  • 对于AO,例如图2中,通道0和4、1和5、2和6、3和7视为立体声的左右声道,即每根数据线传输一路立体声,共有四路立体声输出,这时只应对左声道0、1、2、3进行操作。

AIO接口中的AI设备与AO设备是相互独立的,如果它们同时对接同一个Codec,则AI和AO配置的工作模式必须一致,例如AI和AO均配置为I2S时序的从模式。当AIO工作在主模式时,AI和AO的通道数与采样精度的乘积也必须相等,这样才能保证由AIO发送给Audio Codec的同步时钟,对AI和AO是一致的,如果他们没有同时对接同一个Codec,则没有此限制。当AIO工作在从模式时,AI和AO的通道数与采样精度的乘积可以不一致,此时可以由Audio Codec发送不同的同步时钟给AI和AO。SDK支持通过SYS模块绑定接口,建立AI、AO通道间的绑定关系,实现音频数据的实时播放。

重采样

音频输入和音频输出模块支持对音频数据实施重采样。如果启用AI重采样功能,则在ss_mpi_ai_get_frame获取数据返回前,内部将会先执行重采样处理,再返回处理后的数据。如果启用了AO重采样功能,则音频数据在发送给AO之前,内部先执行重采样处理,处理完成后再发送给AO通道进行播放。

音频重采样支持任意两种不同采样率(64k、96k除外)之间的重采样,也支持64kHz下采样到8kHz或16kHz。重采样支持的输入采样率为:8kHz,11.025kHz,12kHz,16kHz,22.05kHz,24kHz,32kHz,44.1kHz,48kHz,64kHz,不支持的输入采样率:96kHz;支持的输出采样率为:8kHz,11.025kHz,12kHz,16kHz,22.05kHz,24kHz,32kHz,44.1kHz,48kHz;不支持的输出采样率:64kHz,96kHz;重采样仅支持处理单声道。

  • 如果是AI的重采样,则重采样的输入采样率与AI设备属性配置的采样率相同,重采样的输出采样率必须与AI设备属性配置的采样率不相同,用户只需要配置重采样的输出采样率。重采样之前的每帧采样点数目与AI设备属性配置的每帧采样点数目相同。
  • 如果是AO的重采样,则重采样的输出采样率与AO设备属性配置的采样率相同,重采样的输入采样率必须与AO设备属性配置的采样率不相同,用户只需要配置重采样的输入采样率。重采样之后音频帧的每帧采样点数目与AO设备属性配置的每帧采样点数目相同。
  • 如果AI的数据需要送到AENC进行编码且AI启动了重采样,则重采样后的音频帧点数out_point_num_per_frame必须满足:CPU软件编码时out_point_num_per_frame小于等于编码通道属性的point_num_per_frame;VOIE编码时out_point_num_per_frame必须是80、160、240、320、480中的一个值。out_point_num_per_frame、重采样前的音频帧点数in_point_num_per_frame、重采样前的采样率in_sample_rate、重采样后的采样率out_sample_rate之间的换算关系为:out_point_num_per_frame=out_sample_rate * in_point_num_per_frame / in_sample_rate。

    须知:

    • 当AI通道模式设为OT_AI_CHN_MODE_FAST且AI-AO、AI-AENC的数据传输方式为系统绑定方式时,AI的重采样无效,其余情况则AI的重采样有效。
    • 当AI-AO的数据传输方式为系统绑定方式时,AO的重采样无效。
    • 非系统绑定方式下,用户可以通过ss_mpi_ai_get_frame接口获取重采样处理后的AI音频帧,并发送给AENC/AO,以建立AI-AENC或AI-AO的数据传输,此时AI或AO的重采样有效。
    • 当AI通道模式设为OT_AI_CHN_MODE_FAST时,启用AI的重采样功能后,建议不要在调用ss_mpi_ai_get_frame获取该AI通道的数据后将同一个AI通道绑定到AENC通道,否则会导致重采样处理异常。
    • 重采样输入采样率配置为64kHz时,仅支持输出采样率为8kHz或16kHz。
    • 当AI通道模式设为OT_AI_CHN_MODE_NORMAL时,在启用AI的重采样后,支持同一个AI通道绑定多个AENC通道(重采样输出采样率需一致),也支持在AI绑定AENC通道后再调用ss_mpi_ai_get_frame获取同一个AI通道的数据。
    • ADEC-AO的数据传输方式无上述限制,当为系统绑定方式时,AO的重采样仍有效。
    • 接口ss_mpi_ai_enable_resample和ss_mpi_ai_disable_resample使用的是声音质量增强功能中的RES模块。
    • 重采样仅支持OT_AUDIO_SOUND_MODE_MONO模式。
    • 重采样不支持处理24bit位宽的数据。

声音质量增强(VQE)

音频输入和输出模块支持对音频数据进行声音质量增强(Voice Quality Enhancement)处理。VQE针对AI和AO两条通路的异同点,分别通过UpVQE和DnVQE两个调度逻辑来处理两个通路的数据。

  • VQE现有TalkVQE、HIFIVQE、RecordVQE、TalkVQEV2四种方式。

    • TalkVQE主要用于_录像机_语音对讲场景,适用于低音质语音处理场景(8/16kHz采样率,16bit位宽,单声道),支持双向对讲场景;
    • HIFIVQE主要用于Mobile Camera录音场景,适用于高音质语音处理场景(48kHz采样率,16bit位宽,单声道),不支持双向对讲;
    • RecordVQE是HIFIVQE的升级版本,其支持16/48kHz采样率,16bit位宽,单/双声道。对于支持RecordVQE和其他方式的解决方案来说,Mobile Camera录音场景推荐优先使用RecordVQE。
    • TalkVQEV2是TalkVQE的升级版本,其支持16kHz采样率,16bit位宽,单/双声道。对于支持TalkVQEV2和其他方式的解决方案来说,_录像机_场景推荐优先使用TalkVQEV2。
  • AI上行通路的VQE最多支持TalkVQE、HIFIVQE、RecordVQE和TalkVQEV2四种方式,其功能包含回声抵消、语音降噪、自动增益、高通滤波、录音噪声消除、均衡器、动态压缩、参量均衡器、高动态范围九个处理模块,如图1所示。AI上行通路的VQE功能在ss_mpi_ai_get_frame接口内实现,并返回处理后的数据。

  • AO下行通路的VQE支持TalkVQE方式,其功能包含语音降噪、自动增益、高通滤波、均衡器四个处理模块,如图2所示。AO下行通路的VQE功能在ss_mpi_ao_send_frame接口内实现。

VQE分为2个调度接口模块(UpVQE和DnVQE),12个功能模块(AEC、ANR、AGC、RNR、EQ、HPF、GAIN、RES、HDR、DRC、PEQ、HS),以及1个共用模块(COMMON)。两个调度逻辑使用libdl库的dlopen方式动态加载各个功能模块,通过统一功能模块的API接口格式,对功能模块进行统一调度。VQE功能模块支持剪裁,用户可根据实际应用场景选择需要用到的功能模块动态库文件,如表1所示。

表 1 VQE库的应用关系

模块名

功能描述

库文件名称

AI上行通路

AO下行通路

是否可剪裁

依赖

互斥

UpVQE

AI音效处理调度接口

libupvqe.a(.so)

有

无

否

无

无

DnVQE

AO音效处理调度接口

libdnvqe.a(.so)

无

有

否

无

无

AEC

回声抵消

libvqe_aec.so

有

无

是

COMMON

RNR/DRC/PEQ

ANR

语音降噪

libvqe_anr.so

有

有

是

COMMON

RNR/DRC/PEQ

AGC

自动增益控制

libvqe_agc.so

有

有

是

COMMON

PEQ

RNR

录音噪声消除

libvqe_rnr.so

有

无

是

无

AEC/ANR

DRC

动态压缩控制

libvqe_drc.so

有

无

是

无

AEC/ANR

PEQ

参量均衡器

libvqe_peq.so

有

无

是

无

AEC/ANR/AGC/EQ

HDR

高动态范围

libvqe_hdr.so

有

无

是

无

无

EQ

均衡处理器

libvqe_eq.so

有

有

是

AGC/COMMON

PEQ

HPF

高通滤波

libvqe_hpf.so

有

有

是

无

无

HS

抗啸叫

libvqe_hs.so

无

有

是

无

无

GAIN

音量调节

libvqe_gain.so

有

无

是

无

无

RES

重采样

libvqe_res.so

有

有

是

无

无

COMMON

公共模块

libvqe_common.so

有

有

是

无

无

WNR

降风噪

libvqe_talkv2.so

有

无

是

无

无

须知:

表 2 Vqe、HiFiVqe、TalkVqe和RecordVqe接口支持情况表

接口

Vqe

HiFiVqe

TalkVqe

RecordVqe

TalkVqeV2

Hi3519DV500

不支持

不支持

支持

支持

支持

Hi3516CV610

不支持

不支持

支持

支持

支持

UpVQE是负责对AI数据进行处理的调度逻辑。在上行AI通路中,UpVQE的处理流程如图1所示。

图 1 UpVQE处理流程图

DnVQE是负责对AO数据进行处理的调度逻辑。在AO下行通路中,DnVQE的处理流程如图2所示。

图 2 DnVQE处理流程图

须知:

  • 当AI通道模式设为OT_AI_CHN_MODE_NORMAL时,在AI内部的处理线程中完成VQE处理;当AI通道模式设为OT_AI_CHN_MODE_FAST时,在ss_mpi_ai_get_frame接口内部完成VQE处理。
  • 当AI通道模式设为OT_AI_CHN_MODE_FAST且AI-AENC/AO的数据传输方式为系统绑定方式时,使能AI的任何VQE功能均不起作用。
  • 当AI-AO的数据传输方式为系统绑定方式时,使能AO的VQE功能不起作用。
  • 当AI通道模式设为OT_AI_CHN_MODE_FAST且AI-AENC/AO的数据传输方式为非系统绑定方式时,使能AI上行通路的VQE功能后,VQE功能在ss_mpi_ai_get_frame接口内部进行处理,用户可以通过该MPI接口获取VQE处理后的AI音频帧,然后发送给AENC/AO,以建立AI-AENC或AI-AO的数据传输。
  • 当AI通道模式设为OT_AI_CHN_MODE_FAST时,使能AI上行通路的VQE功能后,建议不要在调用ss_mpi_ai_get_frame获取该AI通道的数据之后再将同一个AI通道绑定到AENC通道,否则会导致VQE处理异常。
  • 当AI通道模式设为OT_AI_CHN_MODE_NORMAL时,支持同一个AI通道绑定多个AENC通道,也支持在AI绑定AENC通道后再调用ss_mpi_ai_get_frame获取同一个AI通道的数据。
  • 当AI通道模式需要设为OT_AI_CHN_MODE_FAST及需要使能AI上行通路的VQE功能时,建议AI设备的帧点数不要设置为太小的值,否则在调用ss_mpi_ai_get_frame接口获取前几帧数据会导致出现VQE处理异常的情况。
  • VQE支持对采样率为8kHz,11.025kHz,12kHz,16kHz,22.05kHz,24kHz,32kHz,44.1kHz,48kHz的数据做处理;不支持对采样率:64kHz, 96kHz的数据做处理。

AEC

AEC为回声抵消(Acoustic Echo Cancellation)模块,主要工作在需要进行去除回声的场景下:如_录像机_对讲,远端语音数据在AO设备上播放,此时在本地通过MIC采集语音数据,它支持消除录制的语音数据中的AO设备播放的声音(回声)。

图 3 回声抵消示意图

与其他功能模块只需要Sin数据不同,AEC模块需要Sin(Signal In)和Rin(Reference In)两路数据来进行算法处理,最终得到处理后的sou(Signal Out)数据。其中,Sin为加入了回声的近端输入,Rin为参考帧(回声)数据。成功启用回声抵消需要具备一定条件: talk vqe模式下仅支持单声道模式,工作采样率可以为8kHz、16kHz,talkv2 vqe模式下工作采样率仅支持为16kHz,且MIC采集语音数据的AI帧点数和远程语音播放的AO配置帧点数必须相同。以上条件AI和AO都必须满足。

ANR

ANR为语音降噪(Audio Noise Reduction)模块,主要工作在需要去除外界噪声,保留语音输入的场景下。

与RNR算法比起来,ANR更讲究噪声处理的干净程度。ANR会滤除一些环境声音,主要保留语音数据,并会带来一定的细节丢失。所以ANR算法更适用于NVR和_录像机_场景。在这两个场景下,我们更希望能够着重保留人声,滤除其他噪声。

须知:

语音降噪功能仅支持8kHz,16kHz采样率,不支持立体声。

RNR

RNR为录音噪声消除(Record Noise Reduction)模块,主要工作在需要去除环境噪声,但保留小信号输入的场景下。

与ANR算法比起来,RNR更讲究细节输入(小信号)的保留度,RNR会在降噪的同时保留小信号的输入,所以降噪力度会低一点,但能更多的保留现场声音,真实还原场景,适用于运动DV场景。

须知:

录音噪声消除功能如下:

  • 工作采样率 在VQE接口中使用支持8kHz、16kHz、48kHz采样率 在HiFiVQE接口中使用仅支持48kHz采样率 在RecordVQE接口中使用支持16kHz、48kHz采样率
  • 在RecordVQE接口支持单声道和立体声,其他接口仅支持单声道。

DRC

DRC为动态压缩控制(Dynamic Range Control)模块,负责控制输出电平,将输出增益控制在一个范围,主要工作在需要保证声音不至于过大或过小的场景下。

DRC与AGC作用相似,但算法实现及调节力度不同。其配合RNR使用在运动DV场景,与AEC/ANR互斥。

须知:

动态压缩控制功能如下:

  • 工作采样率 在HiFiVQE接口中使用支持48kHz采样率 在RecordVQE接口中使用支持16kHz、48kHz采样率 在TalkVQEV2接口中使用支持16kHz采样率
  • RecordVQE和TalkVQEV2接口支持单声道和立体声,其他接口仅支持单声道。

PEQ

PEQ为参量均衡器(Parameter Equalizer)模块,主要对音频数据进行均衡处理,以调节音频数据中各频段声音的增益。

PEQ与EQ均为均衡处理器,但是PEQ调节方式更灵活,适用于运动DV场景。

须知:

参量均衡器功能仅支持48kHz采样率,不支持立体声。

HDR

HDR为高动态范围(High Dynamic Range)模块,主要用于Codec输入音量控制,通过动态调节Codec增益控制Codec音量在合理范围内,保证声音不至于过大或过小。

须知:

高动态范围功能如下:

  • 工作采样率
    • 在VQE接口中使用时支持8kHz、16kHz、48kHz采样率
    • 在HiFiVQE接口中使用仅支持48kHz采样率
    • 在RecordVQE接口中使用时16kHz,48kHz采样率
  • RecordVQE接口支持单声道和立体声,其他接口仅支持单声道。

HPF

HPF为高通滤波(high-pass filter)模块,主要负责去除低频噪声。

低频噪声来源经常为硬件噪声或工频噪声,表现为轰轰轰类不舒适的声音。我们可以通过使用频谱分析单板在安静环境下录制的码流,来确定是否需要加入该模块。如果低频噪声不是非常明显,并且客户需要保留低频部分的音源,则不建议加入该模块。推荐配置参数为OT_AUDIO_HPF_FREQ_120或OT_AUDIO_HPF_FREQ_150。

须知:

高通滤波功能如下:

  • 工作采样率 在VQE接口中使用时支持8kHz、16kHz、48kHz采样率 在HiFiVQE接口中使用仅支持48kHz采样率 在TalkVQE接口中使用仅支持8kHz、16kHz采样率 在RecordVQE接口中使用时16kHz,48kHz采样率 在TalkVqeV2接口中使用支持16kHz采样率
  • RecordVQE和TalkVQEV2接口支持单声道和立体声,其他接口仅支持单声道。
  • 实际的高通滤波器并非理想的,在截止频率附近存在过渡带。例如截止频率为80Hz的高通滤波器,其0-80Hz 过渡带内的信号衰减相对较为平缓;而截止频率为 120Hz 的高通滤波器,其过渡带在 0-80Hz 部分的衰减变化会更快,从通带到阻带的过渡更陡峭,导致 0-80Hz 频谱表现出更明显的衰减趋势。 建议在使用VQE功能时,一直开启高通滤波功能。

AGC

AGC为自动增益控制(Auto Gain Control)模块,主要负责增益控制输出电平,在声音输入音量有大小变化时,能将输出音量控制在比较一致的范围内,主要工作在需要保证声音不至于过大或过小的场景下。

AGC更多起到的作用是放大输入源的声音,以保证音源过小时,经过算法处理后的声音依然很大。AI通路如果使能了AGC功能,那么将不再能够通过调节AI增益来控制输出声音大小。

须知:

自动增益功能如下:

  • 工作采样率 在VQE、TalkVQE接口中使用支持8kHz,16kHz采样率 在RecordVQE接口中使用支持16kHz,48kHz采样率 在TalkVqeV2接口中使用支持16kHz采样率
  • RecordVQE和TalkVQEV2接口支持单声道和立体声,其他接口仅支持单声道。

EQ

EQ模块为均衡处理器(Equalizer)模块,主要对音频数据进行均衡处理,以调节音频数据中各频段声音的增益。

须知:

  • 均衡处理器在VQE、TalkVQE接口中使用时支持8kHz,16kHz采样率,在RecordVQE接口中使用时支持16kHz,48kHz采样率,在TalkVQEV2接口中使用时支持16kHz采样率;RecordVQE和TalkVQEV2接口支持单声道和立体声,其他接口仅支持单声道。
  • 均衡器在TalkVqe接口中使用的前提是,自动增益功能开启;在RecordVqe和TalkVQEV2接口中没有此限制。

GAIN

GAIN模块是音量调节模块,主要用于调节AGC开启后的音量大小。

AGC负责对语音的音量进行动态增益控制,算法能够处理的Sin语音电平范围为0dB至-40dB,处理完毕后的语音电平最大值为-2dB,并且在语音最大增益方面做到了30dB的增益,这使得sout的语音电平能够做到-2dB至-10dB,同时也使得通过调整AI增益来调整sout的音量成了一个很困难的事情,因此GAIN模块在VQE处理流程中位于AGC模块后端(如图1所示),以实现AI上行通路的音量调节。

RES

RES模块为重采样(Resampler)模块。当AI上行或AO下行通路中开启VQE各功能模块时,在处理前后各存在一次重采样(如图1和图2所示),第一次的作用是将输入采样率下的音频数据转换成功能模块所支持的工作采样率(8kHz/16kHz/48kHz),第二次则将工作采样率下的数据转换成输出采样率。

NR

NR为降噪(Noise Reduction)模块,主要工作在需要去除外界噪声,保留语音输入的场景下。

与ANR算法相比较,NR可支持双麦降噪。NR会滤除一些环境声音,主要保留语音数据,并会带来一定的细节丢失。所以NR算法更适用于NVR和_录像机_场景。在这两个场景下,我们更希望能够着重保留人声,滤除其他噪声。

须知:

降噪功能仅支持16kHz采样率。

PNR

PNR为二次降噪(Post Noise Reduction)模块,主要工作在需要去除外界噪声,保留语音输入的场景下。

PNR与NR的作用一样,区别在于其在信号处理的最后阶段进行二次降噪处理。

须知:

二次降噪功能仅支持16kHz采样率。

LIMITER

LIMITER为抗削波(Limiter)模块,主要用于控制输出信号电平,防止削波。

须知:

抗削波功能仅支持16kHz采样率。

DEREVERB

DEREVERB为去混响(dereverb)模块,主要用于消除混响。

须知:

去混响功能仅支持16kHz采样率。

FMP

FMP为融合(Frequency Merge Process)模块,主要用于各降噪模块增益融合,且可以在降噪处理后进行底噪补偿,防止出现底噪不平稳的情况。

须知:

并行处理功能仅支持16kHz采样率。

WNR

WNR为降风噪(Wind Noise Reduction)模块,主要用于消除户外风噪。

须知:

降风噪功能仅支持16kHz采样率。

HS

HS为抗啸叫(Howling Suppression)模块,主要用于啸叫抑制。

须知:

抗啸叫功能仅支持16kHz采样率。

DMIC

当AI选择DMIC输入时,由芯片向外提供MCLK时钟,MCLK的频率设定为:

  • 采样率为8k/12k/16k时,提供1536kHz的主时钟。
  • 采样率为24k/32k/48k/64k时,提供3072kHz的主时钟。

音频编码和解码

音频编解码流程

SDK音频的编码类型G711、G726、ADPCM_DVI4、ADPCM_ORG_DVI4、ADPCM_IMA均使用CPU软件编解码。所有的解码功能都基于独立封装的音频解码库,核心解码器工作在用户态,使用CPU软件解码。SDK支持通过SYS模块的绑定接口,将一个AI通道绑定到AENC通道,实现录音编码功能;也可以将一个ADEC通道绑定到AO通道,实现解码播放功能。

音频编解码协议

SDK语音编解码库支持的音频编解码协议说明如表1所示,此外音频组件集成了AAC、MP3、OPUS编解码协议,并开放接口,以便于用户集成第三方提供的编解码协议,详见《音频组件API参考》。

表 1 音频编解码协议说明

协议

采样率

帧点数(采样点)

码率(kbps)

压缩率

CPU消耗

描述

G711

8kHz

80/160/240/320/480

64

2

1 MHz

优点:语音质量最好;CPU消耗小;支持广泛,协议免费。

缺点:压缩效率低。

G.711提供A律与µ律压缩编码,适用于综合业务网和大多数数字电话链路。北美与日本通常采用µ律编码,欧洲和其他地区大都采用A律编码。

G726

8kHz

80/160/240/320/480

16、24、32、40(注:G726编码是一种有损压缩方法,码率比较小时,压缩比和量化误差较大,可能会影响声音质量)

8~3.2

5 MHz

优点:算法简单;语音质量高,多次转换后语音质量有保证,能够在低码率上达到网络等级的话音质量。

缺点:压缩效率较低。

G726_16KBPS与MEDIA_G726_16KBPS两种编码器区别在于编码输出的打包格式。G726_16KBPS适用于网络传输,按“小端”方向进行打包;MEDIA_G726_16KBPS适用于ASF存储,按“大端”方向进行打包。请参考RFC3551.pdf。

ADPCM

8kHz

80/160/240/320/480或81/161/241/321/481

32

4

2 MHz

优点:算法简单;语音质量高,多次转换后语音质量有保证,能够在低码率上达到网络等级的话音质量。

缺点:压缩效率较低。ADPCM_IMA4、ADPCM_ORG_DVI4和 ADPCM_DVI是ADPCM编码算法的三种封包格式。IMA封包格式以第一个采样点作为预测值,DVI封包格式以上一帧作为预测值。即IMA编码每帧需要多输入一个采样点,输入采样点个数为81/161/241/321/481。DVI编码每帧输入采样点个数为80/160/240/320/480。

须知:

  • “cpu消耗”的结果值基于ARM9 288MHz环境,2 MHz表示解码分别占有2M CPU。
  • G726编码是一种有损压缩方法,码率比较小时,压缩比和量化误差较大,可能会影响声音质量。
  • 由于ADPCM_ORG_DVI4没有传输预测值,这样在网络丢包时,可能会引起异常。因此在音频码流网络传输应用中,不推荐使用该协议编码。
  • 当编码或解码协议选择LPCM时,音频编码和解码模块可以录制和播放LPCM格式的原始音频文件。
  • 表中列出来的编码协议,仅支持对单个声道的音频帧进行编码,如果送给编码通道的是立体声音频帧,则只会对左声道数据进行编码,编码出来的码流只带左声道数据。
  • 表中列出来的编解码协议对应函数使用时,编解码协议句柄由用户分配,用户需保证初始化、编解码时使用同一句柄,避免出错。

语音帧结构

使用语音编解码库进行G711、G726、ADPCM格式的编码,编码后的码流遵循以下表格中描述的帧结构,即在每帧码流数据的净荷数据之前填充有4个字节的帧头;使用语音编解码库进行以上格式的解码时,需要读取相应的帧头信息。

表 1 语音帧结构

参数位置(单位:td_s16)

参数比特位说明

参数含义

0

[15:8]

数据帧类型标志位。

01:语音帧;

其他:保留。

[7:0]

保留。

1

[15:8]

帧循环计数器:0~255。

[7:0]

数据净荷长度(单位:td_s16)。

2

[15:0]

净荷数据。

3

[15:0]

净荷数据。

……

[15:0]

净荷数据。

2+n-1

[15:0]

净荷数据。

2+n

[15:0]

净荷数据。

音频接口与设备的对应关系

芯片集成的AIO内部分两类:只支持音频输入的AIP和只支持音频输出的AOP,相应的AIO规格详见对应芯片的用户指南。

  • Hi3519DV500/Hi3516CV610的AIO中AIP/AOP与AI、AO关系如图1所示。
  • AIO接口中只支持音频输出的AOP0可以配置是否共用帧同步时钟和位流时钟给AIP0使用。共用时,AI设备0和AO设备0的帧同步时钟与位流时钟必须相同,即工作模式必须一致,采样频率也必须一致,并且位流时钟按二者中的较高频率进行配置。

    图 1 Hi3519DV500/Hi3516CV610 AIO中AIP/AOP与AI、AO关系示意图

说明:

AIP0与AOP0同时对接同一个Codec,可用于语音对讲。

音频的输入输出设备号范围

音频输入输出设备号范围如表1所示。

表 1 音频输入输出设备号

解决方案

音频输入设备ID

音频输出设备ID

Hi3519DV500

[0]

[0]

Hi3516CV610

[0]

[0]

音频的输入输出设备的通道数范围

音频输入输出设备通道数范围如表1所示。

表 1 音频输入输出设备通道数

解决方案

音频输入设备通道数范围

音频输出设备通道数范围

Hi3519DV500

[0, OT_AI_MAX_CHN_NUM)

[0, OT_AO_MAX_CHN_NUM)

Hi3516CV610

[0, OT_AI_MAX_CHN_NUM)

[0, OT_AO_MAX_CHN_NUM)

内置Audio Codec

概述

Hi3519DV500/Hi3516CV610提供一个内置的Audio Codec(其中,Hi3519DV500/Hi3516CV610采用V751),用于对接AIP0/AOP0实现声音的播放和录制。AIP0/AOP0接口可以选择对接内置的Audio Codec或外接的Audio Codec,进行声音的播放及录制。因为内置Audio Codec不能发送同步时钟,所以AIP0/AOP0接口对接内置Codec时只能配置为I2S时序的主模式,且需要将采样率和内置Codec配置一致。

说明:

Hi3519DV500/Hi3516CV610支持双声道差分输入。

重要概念

内置Audio Codec在单端模式下,会有6dB的衰减,需要增加6dB的模拟部分增益,差分模式没有该限制。

内置Audio Codec分为模拟部分和数字部分。模拟部分可以通过模拟混音(MICPGA)选择由麦克风输入或LINEIN输入,模拟混音支持增益调节。数字部分有ADC和DAC,完成模拟信号和数字信号之间的转换,并且可分别调节音量。用户在进行音量调节时,可综合模拟部分和数字部分的音量调节,建议优先调节模拟部分音量。

内置Audio Codec的DAC支持软静音和软撤销静音。软静音控制数字音频数据被逐渐衰减到0,软撤销静音控制数字音频数据逐渐增大到配置的增益值,改变的速率由mute_rate控制。当软静音使能时,数字音频数据将会逐渐静音为0;当软静音禁用时,数字音频数据恢复为配置的增益值。

内置Audio Codec的工作时钟由AIP0/AOP0提供,并由工作时钟分别产生模拟部分和数字部分的时钟,再由数字部分的时钟产生ADC的时钟和DAC的时钟。如果默认配置下声音不正常,可以配置数字部分时钟和模拟部分时钟反向,或DAC时钟和ADC时钟反向。内置Audio Codec配置默认采样精度为16bit。

另外内置Audio Codec支持去加重滤波、pop音抑制和高通滤波,并默认开启这些功能。

ioctl函数

内置Audio Codec的用户态接口以ioctl形式体现,其形式如下:

int ioctl (int fd,
    unsigned long cmd,
    ……
);

该函数是Linux标准接口,具备可变参数特性。但在Audio Codec中,实际只需要3个参数。因此,其语法形式等同于:

int ioctl (int fd,
    unsigned long cmd,
    CMD_DATA_TYPE *cmddata);

其中,CMD_DATA_TYPE随参数cmd的变化而变化。这3个参数的详细描述如表1所示。

表 1 ioctl函数的3个参数

参数名称

描述

输入/输出

fd

内置Audio Codec设备文件描述符,是调用open函数打开内置Audio Codec设备文件之后的返回值。

输入

cmd

主要的cmd(命令控制字)如下:

输入

cmddata

各cmd对应的数据指针

输入/输出

音量调节原理

原始音频信号以模拟信号形式进入Audio Codec,数字信号的幅值可通过左右声道通路的PGA、BOOST、ADC三个模块依次进行调节。其中,PGA、BOOST提供模拟增益调节,ADC提供数字音量调节,所涉及的ioctl函数如图1所示。

图 1 输入音量调节示意图

表 1 输入音量设置的相关ioctl函数

模块

涉及的ioctl函数

PGA

BOOST

ADC

模块参数

init_mode

acodec模块支持的初始化模式,用户可根据业务场景配置需要的启动模式,以提升启动速度,默认的模式是NORMAL模式,在低延时场景可以配置为FAST模式,模式的初始化时间越短则POP音越大。取值范围:[0, 2]

  • 0:NORMAL模式,初始化时间约100ms
  • 1:FAST模式,初始化时间约10ms
  • 2:NICE模式,初始化时间约300ms

使用方式:Linux系统通过加载ot_acodec.ko时设置init_mode的值。

API参考

对于Hi3519DV500/Hi3516CV610,音频API接口依赖ss_mpi_audio_init和ss_mpi_audio_exit的顺序调用,不支持异步调用ss_mpi_audio_init和ss_mpi_audio_exit。

音频基础属性

音频基础属性(AUDIO)主要实现音频系统的基础属性配置功能。

该模块提供以下MPI:

ss_mpi_audio_init

【描述】

初始化Audio模块。

【语法】

td_s32 ss_mpi_audio_init(td_void);

【参数】

无。

【返回值】

返回值

描述

0

成功。

非0

失败,其值为错误码。

【需求】

  • 头文件:ot_common_aio.h、ss_mpi_audio.h
  • 库文件:libss_mpi_audio.a

【注意】

  • 应用程序启动Audio业务前,必须完成Audio模块初始化工作。同理,应用程序退出Audio业务后,也要完成Audio模块去初始化工作,释放资源。
  • 如果多次初始化,仍会返回成功,但实际上系统不会对Audio的运行状态有任何影响。
  • 由于音频模块依赖用户态属性,故音频不支持多进程操作。对于Hi3519DV500/Hi3516CV610,用户需要保证音频的相关操作和ss_mpi_audio_init在同一个进程中。

【举例】

下面的代码实现初始化Audio模块。

td_s32 ret; 

/* init audio module. */
ret = ss_mpi_audio_init();
if (ret != TD_SUCCESS) {
       printf("init audio module failed, ret:0x%x.\n", ret);
       return ret;
}

ss_mpi_audio_exit

【描述】

去初始化Audio模块。

【语法】

td_s32 ss_mpi_audio_exit(td_void);

【参数】

无。

【返回值】

返回值

描述

0

成功。

非0

失败,其值为错误码。

【需求】

  • 头文件:ot_common_aio.h、ss_mpi_audio.h
  • 库文件:libss_mpi_audio.a

【注意】

  • 可以反复去初始化,不返回失败。
  • 由于系统去初始化不会销毁音频的编解码通道,因此这些通道的销毁需要用户主动进行。如果创建这些通道的进程退出,则通道随之被销毁。

【举例】

下面的代码实现去初始化Audio模块。

td_s32 ret; 

/* exit audio module. */
ret = ss_mpi_audio_exit();
if (ret != TD_SUCCESS) {
       printf("exit audio module failed, ret:0x%x.\n", ret);
       return ret;
}

ss_mpi_audio_set_mod_param

【描述】

设置Audio模块参数属性。

【语法】

td_s32 ss_mpi_audio_set_mod_param(const ot_audio_mod_param *mod_param);

【参数】

参数名称

描述

输入/输出

mod_param

AUDIO模块参数属性指针。

输入

【返回值】

返回值

描述

0

成功。

非0

失败,其值为错误码。

【需求】

  • 头文件:ot_common_aio.h、ss_mpi_audio.h
  • 库文件:libss_mpi_audio.a

【注意】

音频模块参数支持配置AIAO的时钟源属性。

  • 时钟源

    Hi3519DV500/Hi3516CV610音频支持2个时钟源:基础时钟源和备用时钟源。

    • 基础时钟源会带来更好的音频电性能。但是在Hi3519DV500上,当默认时钟源被其他模块(如MIPI)使用时,此时需要切换到备用时钟源。
    • Hi3519DV500/Hi3516CV610默认使用基础时钟源;
  • 该接口为整个音频系统的基础接口,该接口的调用必须在其他模块(AI/AO/ACODEC/AENC/ADEC)的接口之前。

  • Hi3519DV500/Hi3516CV610支持该接口。

【举例】

下面的代码实现设置AUDIO模块参数属性。

td_s32 ret; 
ot_audio_mod_param mod_param;

mod_param.clk_select = OT_AUDIO_CLKSEL_BASE;

/* set audio mode parameter. */
ret = ss_mpi_audio_set_mod_param(&mod_param);
if (ret != TD_SUCCESS) {
       printf("set audio mode parameter fail: ERRPARAM(%d)\n", mod_param.clk_select);
       return ret;
}

ss_mpi_audio_get_mod_param

【描述】

获取AUDIO模块参数属性。

【语法】

td_s32 ss_mpi_audio_get_mod_param(ot_audio_mod_param *mod_param);

【参数】

参数名称

描述

输入/输出

mod_param

AUDIO模块参数属性指针。

输出

【返回值】

返回值

描述

0

成功。

非0

失败,其值为错误码。

【需求】

  • 头文件:ot_common_aio.h、ss_mpi_audio.h
  • 库文件:libss_mpi_audio.a

【注意】

  • 获取的属性为前一次配置的属性。
  • 如果从来没有配置过属性,则返回默认属性。

【举例】

td_s32 ret;
ot_audio_mod_param mod_param;

ret = ss_mpi_audio_get_mod_param(&mod_param);
if (ret != TD_SUCCESS) {
    printf("get audio mode parameter fail\n");
    return ret;
}

ss_mpi_audio_register_vqe_mod

【描述】

注册声音质量增强及重采样模块。

【语法】

td_s32 ss_mpi_audio_register_vqe_mod(const ot_audio_vqe_register *vqe_register);

【参数】

参数名称

描述

输入/输出

vqe_register

声音质量增强及重采样模块注册结构体指针。

输入

【返回值】

返回值

描述

0

成功。

非0

失败,其值为错误码。

【需求】

  • 头文件:ot_common_aio.h、ss_mpi_audio.h、ss_vqe_register.h
  • 库文件:libss_mpi_audio.a、libupvqe.a、libdnvqe.a、libvqe_hpf.a、libvqe_eq.a、libvqe_hs.a、libvqe_anr.a、libvqe_agc.a、libvqe_aec.a、libvqe_record.a、libvqe_res.a

【注意】

该接口仅支持注册声音质量增强及重采样模块的静态库,可根据实际应用场景选用所需的功能模块。

  • 用户通过传入声音质量增强及重采样模块注册结构体,向音频系统注册选定的模块,其中选定模块的注册句柄不能为空,未选定模块的注册句柄须置空。
  • 对于注册句柄,用户可调用各模块的句柄获取接口进行获取。
  • 该接口为整个音频系统的基础接口。对于Hi3519DV500/Hi3516CV610,该接口的调用必须在ss_mpi_audio_init接口之前。
  • 当存在同一模块的静态库已注册且动态库已放置在/usr/lib/目录的情况下,默认优先使用已注册的静态库。
  • 该接口只允许成功调用一次,不支持重复注册。

【举例】

下面的代码实现注册声音质量增强及重采样模块。

td_s32 ret; 
ot_audio_vqe_register vqe_register = {0};

/* 注册resample静态库 */
vqe_register.resample_mod_cfg.handle = ss_vqe_resample_get_handle();

/* 注册recordVQE静态库 */
vqe_register.record_mod_cfg.handle = ss_vqe_record_get_handle();

/* 注册talkVQE静态库 */
vqe_register.hpf_mod_cfg.handle = ss_vqe_hpf_get_handle();
vqe_register.aec_mod_cfg.handle = ss_vqe_aec_get_handle();
vqe_register.agc_mod_cfg.handle = ss_vqe_agc_get_handle();
vqe_register.anr_mod_cfg.handle = ss_vqe_anr_get_handle();
vqe_register.eq_mod_cfg.handle = ss_vqe_eq_get_handle();
vqe_register.hs_mod_cfg.handle = ss_vqe_hs_get_handle();

/* 注册talkVQEV2静态库 */
vqe_register.talkv2_mod_cfg.handle = ss_vqe_talkv2_get_handle();
/* register vqe module. */
ret = ss_mpi_audio_register_vqe_mod(&vqe_register);
if (ret != TD_SUCCESS) {
       printf("register vqe module fail, ret = %d\n", ret);
       return ret;
}

音频输入

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

该功能模块提供以下MPI:

ss_mpi_ai_set_pub_attr

【描述】

设置AI设备属性。

【语法】

td_s32 ss_mpi_ai_set_pub_attr(ot_audio_dev ai_dev, const ot_aio_attr *attr);

【参数】

参数名称

描述

输入/输出

ai_dev

音频设备号。

取值范围:请参见表1。

输入

attr

AI设备属性指针。

输入

【返回值】

返回值

描述

0

成功。

非0

失败,其值为错误码。

【需求】

  • 头文件:ot_common_aio.h、ss_mpi_audio.h
  • 库文件:libss_mpi_audio.a

【注意】

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

  • 工作模式

    音频输入输出目前支持I2S主模式、I2S从模式、标准PCM主模式、标准PCM从模式、自定义PCM主模式以及自定义PCM从模式。

    由于时序的问题,AI设备在从模式下,建议用户先配置好对接的Codec,再配置AI设备;而在主模式下,建议用户先配置好AI设备,再配置对接的Codec。

  • 采样率

    采样率指一秒中内的采样点数,采样率越高表明失真度越小,处理的数据量也就随之增加。一般来说语音使用8kHz采样率,音频使用32kHz或以上的采样率;设置时请确认对接的Audio Codec是否支持所要设定的采样率。

  • 采样精度

    采样精度指某个通道的采样点数据宽度,同时决定整个设备的通道分布。采样精度可以设置为8bit、16bit或24bit,实际应用中采样精度还受Audio Codec限制。

  • buffer大小

    ot_aio_attr中的frame_num项用于配置AI中用于接收音频数据的缓存的音频帧帧数,建议配置为5以上,否则可能出现采集丢帧等异常。

    SDK内部会创建(frame_num + 1)* 2个缓存块,用于储存AI的原始音频帧及回声抵消所需的音频帧,在不需要开启回声抵消的情况下可设置frame_num为所需最大缓存音频帧数的一半。此外,实际应用中frame_num还受限于缓存池的可用缓存块数量。

  • usr_frame_depth大小

    ot_ai_chn_param的usr_frame_depth项需保证大于等于2,小于等于ot_aio_attr的frame_num项。

  • 每帧的采样点数

    当音频采样率较高时,建议相应地增加每帧的采样点数目。如要将这些采集到的音频数据送编码,则应保证每帧的持续时长不少于10ms(例如16kHz的采样频率下每帧的采样点数至少应设置为160,如果声音有断断续续,可以适当增加每帧的采样点数,参数设置与具体芯片的性能有关),否则解码后声音可能有异常。

  • 通道数目

    通道数目指当前输入设备的AI功能的通道数目,需与对接的Audio Codec的配置保持一致;支持1路、2路、4路等。

  • 时钟选择

    • AI必须和AD配合起来才能正常工作,用户必须清楚AD采集的数据分布和通道的关系才能从正确的通道取得数据。AI设备为主模式时,决定AI设备输出时钟的关键配置项是采样率、采样精度以及通道数目,采样精度乘以通道数目即为AI设备时序一次采样的位宽。
    • AIO接口中AI设备与AO设备是各自独立的,同一设备号的AI设备和AO设备的帧同步时钟与位流时钟是否共用可以通过clk_share来配置。当clk_share配置为1时,表示AI设备和AO设备的帧同步时钟配置与位流时钟配置是共用的,此时要保证AI设备和AO设备的帧同步时钟与位流时钟是一致的;当clk_share配置为0时,表示AI设备和AO设备的帧同步时钟与位流时钟是由不同的源提供的。当clk_share为1时,AI设备和AO设备的帧同步时钟与位流时钟必须相同,即工作模式必须一致,并且采样频率也必须一致,假定AI设备和AO设备的单次采样位宽不一致,则其共用的位流时钟按二者中的较高频率进行配置。
    • AI、AO对接不同设备时需要根据i2s_type配置不同的clk_share,另外在某些场景下配置clk_share无效,驱动内部会自动配置时钟选择。
    • Hi3519DV500/Hi3516CV610的clk_share对应关系如表1所示。

      表 1 Hi3519DV500/Hi3516CV610的clk_share对应关系

      输入设备ID

      输入设备I2S类型

      输出设备ID

      输出设备I2S类型

      clk_share设置

      输入设备使用的时钟

      输出设备使用的时钟

      备注

      0

      OT_AIO_I2STYPE_INNERCODEC

      0

      OT_AIO_I2STYPE_INNERCODEC

      配置无效

      CRG9

      CRG9

      -

      0

      OT_AIO_I2STYPE_INNERCODEC

      0

      OT_AIO_I2STYPE_EXTERN

      配置无效

      CRG9

      CRG8

      -

      0

      OT_AIO_I2STYPE_EXTERN

      0

      OT_AIO_I2STYPE_INNERCODEC

      配置无效

      CRG8

      CRG9

      -

      0

      OT_AIO_I2STYPE_EXTERN

      0

      OT_AIO_I2STYPE_EXTERN

      配置无效

      CRG8

      CRG8

      -

      0

      OT_AIO_I2STYPE_DMIC

      0

      OT_AIO_I2STYPE_INNERCODEC

      配置无效

      CRG1

      CRG9

      Hi3516CV610不支持

      0

      OT_AIO_I2STYPE_DMIC

      0

      OT_AIO_I2STYPE_EXTERN

      配置无效

      CRG1

      CRG8

      Hi3516CV610不支持

【举例】

下面的代码实现设置AI设备属性及启用AI设备。

td_s32 ret;
ot_aio_attr attr;
ot_audio_dev ai_dev = 0;

attr.bit_width = OT_AUDIO_BIT_WIDTH_16;
attr.sample_rate = OT_AUDIO_SAMPLE_RATE_8000;
attr.snd_mode = OT_AUDIO_SOUND_MODE_MONO;
attr.work_mode = OT_AIO_MODE_I2S_SLAVE;
attr.expand_flag = 0;
attr.frame_num = 5;
attr.point_num_per_frame = 160;
attr.chn_cnt = 2;
attr.clk_share = 1;

/* set public attribute of AI device */
ret = ss_mpi_ai_set_pub_attr(ai_dev, &attr);
if (ret != TD_SUCCESS) {
    printf("set ai %d attr err:0x%x\n", ai_dev, ret);
    return ret;
}
/* enable AI device */
ret = ss_mpi_ai_enable(ai_dev);
if (ret != TD_SUCCESS) {
    printf("enable ai dev %d err:0x%x\n", ai_dev, ret);
    return ret;
}

ss_mpi_ai_get_pub_attr

【描述】

获取AI设备属性。

【语法】

td_s32 ss_mpi_ai_get_pub_attr(ot_audio_dev ai_dev, ot_aio_attr *attr);

【参数】

参数名称

描述

输入/输出

ai_dev

音频设备号。

取值范围:请参见表1。

输入

attr

AI设备属性指针。

输出

【返回值】

返回值

描述

0

成功。

非0

失败,其值为错误码。

【需求】

  • 头文件:ot_common_aio.h、ss_mpi_audio.h
  • 库文件:libss_mpi_audio.a

【注意】

  • 获取的属性为前一次配置的属性。
  • 如果从来没有配置过属性,则返回失败。

【举例】

td_s32 ret;
ot_audio_dev ai_dev = 0;
ot_aio_attr attr;

ret = ss_mpi_ai_get_pub_attr(ai_dev, &attr);
if (ret != TD_SUCCESS) {
    printf("get ai %d attr err:0x%x\n", ai_dev, ret);
    return ret;
}

ss_mpi_ai_enable

【描述】

启用AI设备。

【语法】

td_s32 ss_mpi_ai_enable(ot_audio_dev ai_dev);

【参数】

参数名称

描述

输入/输出

ai_dev

音频设备号。

取值范围:请参见表1。

输入

【返回值】

返回值

描述

0

成功。

非0

失败,其值为错误码。

【需求】

  • 头文件:ot_common_aio.h、ss_mpi_audio.h
  • 库文件:libss_mpi_audio.a

【注意】

  • 必须在启用前配置AI设备属性,否则返回属性未配置错误。
  • 如果AI设备已经处于启用状态,则直接返回成功。

【举例】

请参见ss_mpi_ai_set_pub_attr的举例。

ss_mpi_ai_disable

【描述】

禁用AI设备。

【语法】

td_s32 ss_mpi_ai_disable (ot_audio_dev ai_dev);

【参数】

参数名称

描述

输入/输出

ai_dev

音频设备号。

取值范围:请参见表1。

输入

【返回值】

返回值

描述

0

成功。

非0

失败,其值为错误码。

【需求】

  • 头文件:ot_common_aio.h、ss_mpi_audio.h
  • 库文件:libss_mpi_audio.a

【注意】

  • 如果AI设备已经处于禁用状态,则直接返回成功。
  • 禁用AI设备前必须先禁用该设备下已启用的所有AI通道。
  • 要求在禁用AI设备之前,先禁用与之关联、使用AI的音频数据的AENC通道和AO设备,否则可能导致该接口调用失败。

【举例】

td_s32 ret;
ot_audio_dev ai_dev = 0;

ret = ss_mpi_ai_disable(ai_dev);
if (ret != TD_SUCCESS) {
         printf("disable ai %d err:0x%x\n", ai_dev);
         return ret;
}

ss_mpi_ai_enable_chn

【描述】

启用AI通道。

【语法】

td_s32 ss_mpi_ai_enable_chn(ot_audio_dev ai_dev, ot_ai_chn ai_chn);

【参数】

参数名称

描述

输入/输出

ai_dev

音频设备号。

取值范围:请参见表1。

输入

ai_chn

音频输入通道号。

支持的通道范围由AI设备属性中的最大通道个数chn_cnt与声道模式snd_mode决定,详见ot_audio_snd_mode定义的描述。

输入

【返回值】

返回值

描述

0

成功。

非0

失败,其值为错误码。

【需求】

  • 头文件:ot_common_aio.h、ss_mpi_audio.h
  • 库文件:libss_mpi_audio.a

【注意】

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

【举例】

无。

ss_mpi_ai_disable_chn

【描述】

禁用AI通道。

【语法】

td_s32 ss_mpi_ai_disable_chn(ot_audio_dev ai_dev, ot_ai_chn ai_chn);

【参数】

参数名称

描述

输入/输出

ai_dev

音频设备号。

取值范围:请参见表1。

输入

ai_chn

音频输入通道号。

取值范围:请参见表1。

输入

【返回值】

返回值

描述

0

成功。

非0

失败,其值为错误码。

【需求】

  • 头文件:ot_common_aio.h、ss_mpi_audio.h
  • 库文件:libss_mpi_audio.a

【注意】

无。

【举例】

无。

ss_mpi_ai_get_frame

【描述】

获取音频帧。

【语法】

td_s32 ss_mpi_ai_get_frame(ot_audio_dev ai_dev, ot_ai_chn ai_chn, ot_audio_frame *frame, ot_aec_frame *aec_frame, td_s32 milli_sec);

【参数】

参数名称

描述

输入/输出

ai_dev

音频设备号。

取值范围:请参见表1。

输入

ai_chn

音频输入通道号。

支持的通道范围由AI设备属性中的最大通道个数chn_cnt与声道模式snd_mode决定。

输入

frame

音频帧结构体指针。

输出

aec_frame

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

输出

milli_sec

获取数据的超时时间

-1表示阻塞模式,无数据时一直等待;

0表示非阻塞模式,无数据时则报错返回;

>0表示阻塞milli_sec毫秒,超时则报错返回。

输入

【返回值】

返回值

描述

0

成功。

非0

失败,其值为错误码。

【需求】

  • 头文件:ot_common_aio.h、ss_mpi_audio.h
  • 库文件:libss_mpi_audio.a

【注意】

  • 如果AI的回声抵消功能已使能,aec_frame不能是空指针;如果AI的回声抵消功能没有使能,aec_frame可以置为空。
  • AI模块会缓存音频帧数据,用于用户态获取。缓存的深度通过ss_mpi_ai_set_chn_param接口设定,默认深度为AI设备缓存帧数目frame_num和30相比的较小值。
  • AI获取相邻音频帧如果需要均匀或低延时场景,可通过ss_mpi_ai_set_chn_attr将工作模式设置为fast模式。
  • milli_sec的值必须大于等于-1,等于-1时采用阻塞模式获取数据,等于0时采用非阻塞模式获取数据,大于0时,阻塞milli_sec毫秒后,没有数据则返回超时并报错。
  • 获取音频帧数据前,必须先使能对应的AI通道。
  • VQE使能的情况下,AI通道启用后,前面几次调用此接口获取数据可能会失败。此时,建议采用阻塞模式(milli_sec等于-1)获取数据,可避免此接口调用失败。

【举例】

无。

ss_mpi_ai_release_frame

【描述】

释放音频原始帧。

【语法】

td_s32 ss_mpi_ai_release_frame(ot_audio_dev ai_dev, ot_ai_chn ai_chn, const ot_audio_frame * frame, const ot_aec_frame *aec_frame);

【参数】

参数名称

描述

输入/输出

ai_dev

音频设备号。

取值范围:请参见表1。

输入

ai_chn

音频输入通道号。

支持的通道范围由AI设备属性中的最大通道个数chn_cnt与声道模式snd_mode决定。

输入

frame

音频帧结构体指针。

输入

aec_frame

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

输入

【返回值】

返回值

描述

0

成功。

非0

失败,其值为错误码。

【需求】

  • 头文件:ot_common_aio.h、ss_mpi_audio.h
  • 库文件:libss_mpi_audio.a

【注意】

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

【举例】

无。

ss_mpi_ai_get_raw_frame

【描述】

获取音频原始帧。

【语法】

td_s32 ss_mpi_ai_get_raw_frame(ot_audio_dev ai_dev, ot_ai_chn ai_chn, ot_audio_frame *frame, ot_aec_frame *aec_frame, td_s32 milli_sec);

【参数】

参数名称

描述

输入/输出

ai_dev

音频设备号。

取值范围:请参见表1。

输入

ai_chn

音频输入通道号。

支持的通道范围由AI设备属性中的最大通道个数chn_cnt与声道模式snd_mode决定。

输入

frame

音频帧结构体指针。

输出

aec_frame

回声抵消参考帧结构体指针,目前暂未使用。

输出

milli_sec

获取数据的超时时间

-1表示阻塞模式,无数据时一直等待;

0表示非阻塞模式,无数据时则报错返回;

>0表示阻塞milli_sec毫秒,超时则报错返回。

输入

【返回值】

返回值

描述

0

成功。

非0

失败,其值为错误码。

【需求】

  • 头文件:ot_common_aio.h、ss_mpi_audio.h
  • 库文件:libss_mpi_audio.a

【注意】

  • 目前不支持获取原始帧的回声抵消参考数据,aec_frame可以置为空,驱动内部不做校验。
  • AI模块会缓存音频原始帧数据,用于用户态获取。缓存的深度通过ss_mpi_ai_set_chn_param接口设定,默认深度为AI设备缓存帧数目frame_num和30相比的较小值。
  • milli_sec的值必须大于等于-1,等于-1时采用阻塞模式获取数据,等于0时采用非阻塞模式获取数据,大于0时,阻塞milli_sec毫秒后,没有数据则返回超时并报错。
  • 获取音频原始帧数据前,必须先开启AI通道的原始帧获取功能,并使能对应的AI通道。原始帧获取功能通过ss_mpi_ai_set_chn_attr接口设定,默认不开启。
  • 如果不开启原始帧获取功能,此接口会调用失败。

【举例】

无。

ss_mpi_ai_release_raw_frame

【描述】

释放音频帧。

【语法】

td_s32 ss_mpi_ai_release_raw_frame(ot_audio_dev ai_dev, ot_ai_chn ai_chn, const ot_audio_frame * frame, const 1ot_aec_frame *aec_frame);

【参数】

参数名称

描述

输入/输出

ai_dev

音频设备号。

取值范围:请参见表1。

输入

ai_chn

音频输入通道号。

支持的通道范围由AI设备属性中的最大通道个数chn_cnt与声道模式snd_mode决定。

输入

frame

音频帧结构体指针。

输入

aec_frame

回声抵消参考帧结构体指针,目前暂未使用。

输入

【返回值】

返回值

描述

0

成功。

非0

失败,其值为错误码。

【需求】

  • 头文件:ot_common_aio.h、ss_mpi_audio.h
  • 库文件:libss_mpi_audio.a

【注意】

目前不支持释放原始帧的回声抵消参考数据,aec_frame置为NULL即可。

【举例】

无。

ss_mpi_ai_set_chn_param

【描述】

设置AI通道参数。

【语法】

td_s32 ss_mpi_ai_set_chn_param(ot_audio_dev ai_dev, ot_ai_chn ai_chn, const ot_ai_chn_param *chn_param);

【参数】

参数名称

描述

输入/输出

ai_dev

音频设备号。

取值范围:请参见表1。

输入

ai_chn

音频输入通道号。

支持的通道范围由AI设备属性中的最大通道个数chn_cnt与声道模式snd_mode决定。

输入

chn_param

音频通道参数。

输入

【返回值】

返回值

描述

0

成功。

非0

失败,其值为错误码。

【需求】

  • 头文件:ot_common_aio.h、ss_mpi_audio.h
  • 库文件:libss_mpi_audio.a

【注意】

  • 在AI通道成功启用后再调用此接口。
  • 通道参数目前只有一个成员变量,用于设置用户获取音频帧的缓存深度,该成员变量的值不能大于30,默认深度为AI设备缓存帧数目frame_num和30相比的较小值。
  • 建议先调用ss_mpi_ai_get_chn_param接口获取默认配置,再调用本接口修改配置,以便于后续扩展。

【举例】

无。

ss_mpi_ai_get_chn_param

【描述】

获取AI通道参数。

【语法】

td_s32 ss_mpi_ai_get_chn_param(ot_audio_dev ai_dev, ot_ai_chn ai_chn, ot_ai_chn_param *chn_param);

【参数】

参数名称

描述

输入/输出

ai_dev

音频设备号。

取值范围:请参见表1。

输入

ai_chn

音频输入通道号。

支持的通道范围由AI设备属性中的最大通道个数chn_cnt与声道模式snd_mode决定。

输入

chn_param

音频通道参数。

输出

【返回值】

返回值

描述

0

成功。

非0

失败,其值为错误码。

【需求】

  • 头文件:ot_common_aio.h、ss_mpi_audio.h
  • 库文件:libss_mpi_audio.a

【注意】

无。

【举例】

无。

ss_mpi_ai_enable_resample

【描述】

启用AI重采样。

【语法】

td_s32 ss_mpi_ai_enable_resample(ot_audio_dev ai_dev, ot_ai_chn ai_chn, ot_audio_sample_rate out_sample_rate);

【参数】

参数名称

描述

输入/输出

ai_dev

音频设备号。

取值范围:请参见表1。

输入

ai_chn

音频输入通道号。

支持的通道范围由AI设备属性中的最大通道个数chn_cnt决定。

输入

out_sample_rate

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

输入

【返回值】

返回值

描述

0

成功。

非0

失败,其值为错误码。

【需求】

  • 头文件:ot_common_aio.h、ss_mpi_audio.h
  • 库文件:libss_mpi_audio.a、libupvqe.a、libvqe_res.so

【注意】

  • 在启用AI通道之后,调用此接口启用重采样功能。
  • 允许重复启用重采样功能,但必须保证后配置的属性与之前配置的属性一样。
  • 在禁用AI通道之后,如果重新启用AI通道,并使用重采样功能,需调用此接口重新启用重采样。

【举例】

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

/* dev attr of ai */
ot_audio_sample_rate out_sample_rate;
ot_aio_attr aio_attr;
aio_attr.chn_cnt = 2;
aio_attr.bit_width = OT_AUDIO_BIT_WIDTH_16;
aio_attr.sample_rate = OT_AUDIO_SAMPLE_RATE_32000;
aio_attr.snd_mode = OT_AUDIO_SOUND_MODE_MONO;
aio_attr.frame_num = 30;
aio_attr.point_num_per_frame = 320*4;
out_sample_rate = OT_AUDIO_SAMPLE_RATE_8000;
ret = ss_mpi_ai_enable_resample(ai_dev, ai_chn, out_sample_rate);
if (ret != TD_SUCCESS) {
    printf("func(%s) line(%d): failed, ret:0x%x\n", __FUNCTION__, __LINE__, ret);
    return ret;
}

ss_mpi_ai_disable_resample

【描述】

禁用AI重采样。

【语法】

td_s32 ss_mpi_ai_disable_resample(ot_audio_dev ai_dev, ot_ai_chn ai_chn);

【参数】

参数名称

描述

输入/输出

ai_dev

音频设备号。

取值范围:请参见表1。

输入

ai_chn

音频输入通道号。

取值范围:请参见表1。

输入

【返回值】

返回值

描述

0

成功。

非0

失败,其值为错误码。

【需求】

  • 头文件:ot_common_aio.h、ss_mpi_audio.h
  • 库文件:libss_mpi_audio.a、libupvqe.a、libvqe_res.so

【注意】

  • 不再使用AI重采样功能的话,应该调用此接口将其禁用。
  • 要求在调用此接口之前,先禁用使用该AI设备相应通道音频数据的AENC通道和AO通道,否则可能导致该接口调用失败。

ss_mpi_ai_set_talk_vqe_attr

【描述】

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

【语法】

td_s32 ss_mpi_ai_set_talk_vqe_attr(ot_audio_dev ai_dev, ot_ai_chn ai_chn, ot_audio_dev ao_dev, ot_ao_chn ao_chn, const ot_ai_talk_vqe_cfg *vqe_cfg);

【参数】

参数名称

描述

输入/输出

ai_dev

音频输入设备号。

取值范围:请参见表1。

输入

ai_chn

音频输入通道号。

取值范围:请参见表1。

输入

ao_dev

用于回声抵消的AO设备号。

取值范围:请参见表1。

输入

ao_chn

用于回声抵消的AO通道号。

取值范围:请参见表1。

输入

vqe_cfg

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

输入

【返回值】

返回值

描述

0

成功。

非0

失败,其值为错误码。

【需求】

  • 头文件:ot_common_aio.h、ss_mpi_audio.h
  • 库文件:libss_mpi_audio.a、libupvqe.a、libvqe_common.so、libvqe_rnr.so、libvqe_hpf.so、libvqe_gain.so、libvqe_eq.so、libvqe_anr.so、libvqe_agc.so libvqe_aec.so、libvqe_hdr.so

【注意】

  • 使能声音质量增强功能前必须先设置相对应AI通道的声音质量增强功能相关属性。
  • 设置AI的声音质量增强功能相关属性前,必须先使能对应的AI通道。
  • 相同AI通道的声音质量增强功能不支持动态设置属性,重新设置AI通道的声音质量增强功能相关属性时,需要先关闭AI通道的声音质量增强功能,再设置AI通道的声音质量增强功能相关属性。
  • 仅支持OT_AUDIO_SOUND_MODE_MONO声道模式下使能。
  • 在设置声音质量增强功能属性时,可通过配置相应的声音质量增强功能属性来选择使能其中的部分功能。
  • TalkVQE主要在_录像机_场景下使用。

【举例】

无。

ss_mpi_ai_get_talk_vqe_attr

【描述】

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

【语法】

td_s32 ss_mpi_ai_get_talk_vqe_attr(ot_audio_dev ai_dev, ot_ai_chn ai_chn, ot_ai_talk_vqe_cfg *vqe_cfg);

【参数】

参数名称

描述

输入/输出

ai_dev

音频输入设备号。

取值范围:请参见表1。

输入

ai_chn

音频输入通道号。

取值范围:请参见表1。

输入

vqe_cfg

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

输出

【返回值】

返回值

描述

0

成功。

非0

失败,其值为错误码。

【需求】

  • 头文件:ot_common_aio.h、ss_mpi_audio.h
  • 库文件:libss_mpi_audio.a、libupvqe.a、libvqe_common.so、libvqe_rnr.so、libvqe_hpf.so、libvqe_gain.so、libvqe_eq.so、libvqe_anr.so、libvqe_agc.so、 libvqe_aec.so、libvqe_hdr.so

【注意】

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

【举例】

无。

ss_mpi_ai_set_record_vqe_attr

【描述】

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

【语法】

td_s32 ss_mpi_ai_set_record_vqe_attr(ot_audio_dev ai_dev, ot_ai_chn ai_chn, const ot_ai_record_vqe_cfg *vqe_cfg);

【参数】

参数名称

描述

输入/输出

ai_dev

音频输入设备号。

取值范围:请参见表1。

输入

ai_chn

音频输入通道号。

取值范围:请参见表1。

输入

vqe_cfg

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

输入

【返回值】

返回值

描述

0

成功。

非0

失败,其值为错误码。

【需求】

  • 头文件:ot_common_aio.h、ss_mpi_audio.h
  • 库文件:libss_mpi_audio.a、libupvqe.a、libvqe_record.so

【注意】

  • 使能声音质量增强功能前必须先设置相对应AI通道的声音质量增强功能相关属性。
  • 设置AI的声音质量增强功能相关属性前,必须先使能对应的AI通道。
  • 相同AI通道的声音质量增强功能不支持动态设置属性,重新设置AI通道的声音质量增强功能相关属性时,需要先关闭AI通道的声音质量增强功能,再设置AI通道的声音质量增强功能相关属性。
  • 支持OT_AUDIO_SOUND_MODE_MONO和OT_AUDIO_SOUND_MODE_STEREO声道模式下使能。
  • 在设置声音质量增强功能属性时,可通过配置相应的声音质量增强功能属性来选择使能其中的部分功能。
  • RecordVQE仅在运动DV场景下使用。在双MIC方案中使用RecordVQE,将AI设备属性配置成立体声模式,可以达到良好的去噪效果。

【举例】

无。

ss_mpi_ai_get_record_vqe_attr

【描述】

获取AI的声音质量增强功能(Record)相关属性。

【语法】

td_s32 ss_mpi_ai_get_record_vqe_attr(ot_audio_dev ai_dev, ot_ai_chn ai_chn, ot_ai_record_vqe_cfg *vqe_cfg);

【参数】

参数名称

描述

输入/输出

ai_dev

音频输入设备号。

取值范围:请参见表1。

输入

ai_chn

音频输入通道号。

取值范围:请参见表1。

输入

vqe_cfg

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

输出

【返回值】

返回值

描述

0

成功。

非0

失败,其值为错误码。

【需求】

  • 头文件:ot_common_aio.h、ss_mpi_audio.h
  • 库文件:libss_mpi_audio.a、libupvqe.a、libvqe_record.so

【注意】

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

【举例】

无。

ss_mpi_ai_set_talk_vqe_v2_attr

【描述】

设置AI的声音质量增强功能(TalkVQEV2)相关属性。

【语法】

td_s32 ss_mpi_ai_set_talk_vqe_v2_attr(ot_audio_dev ai_dev, ot_ai_chn ai_chn, ot_audio_dev ao_dev, ot_ao_chn ao_chn, const ot_ai_talk_vqe_v2_cfg *vqe_cfg);

【参数】

参数名称

描述

输入/输出

ai_dev

音频输入设备号。

取值范围:请参见表1。

输入

ai_chn

音频输入通道号。

ot_ai_chn请见“系统控制”章节。

取值范围:请参见表1。

输入

ao_dev

用于回声抵消的AO设备号。ot_audio_dev请见“系统控制”章节。

取值范围:请参见表1。

输入

ao_chn

用于回声抵消的AO通道号。

ot_ao_chn请见“系统控制”章节。

取值范围:请参见表1。

输入

vqe_cfg

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

输入

【返回值】

返回值

描述

0

成功。

非0

失败,其值为错误码。

【需求】

  • 头文件:ot_common_aio.h、ss_mpi_audio.h
  • 库文件:libss_mpi_audio.a、libupvqe.a、libvqe_talkv2.so

【注意】

  • 使能声音质量增强功能前必须先设置相对应AI通道的声音质量增强功能相关属性。
  • 设置AI的声音质量增强功能相关属性前,必须先使能对应的AI通道。
  • 相同AI通道的声音质量增强功能不支持动态设置属性,重新设置AI通道的声音质量增强功能相关属性时,需要先关闭AI通道的声音质量增强功能,再设置AI通道的声音质量增强功能相关属性。
  • 支持OT_AUDIO_SOUND_MODE_MONO和OT_AUDIO_SOUND_MODE_STEREO声道模式下使能。
  • 在设置声音质量增强功能属性时,可通过配置相应的声音质量增强功能属性来选择使能其中的部分功能。
  • TalkVQEV2主要在_录像机_场景下使用。
  • 在开启TalkVQEV2算法的状态下,可以调用该接口动态设置算法参数,但仅支持设置各功能模块内部参数,详见ot_ai_talk_vqe_v2_cfg注意事项说明。

【举例】

无。

ss_mpi_ai_get_talk_vqe_v2_attr

【描述】

获取AI的声音质量增强功能(TalkVQEV2)相关属性。

【语法】

td_s32 ss_mpi_ai_get_talk_vqe_v2_attr(ot_audio_dev ai_dev, ot_ai_chn ai_chn, ot_ai_talk_vqe_v2_cfg*vqe_cfg);

【参数】

参数名称

描述

输入/输出

ai_dev

音频输入设备号。

取值范围:请参见表1。

输入

ai_chn

音频输入通道号。

取值范围:请参见表1。

输入

vqe_cfg

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

输出

【返回值】

返回值

描述

0

成功。

非0

失败,其值为错误码。

【需求】

  • 头文件:ot_common_aio.h、ss_mpi_audio.h
  • 库文件:libss_mpi_audio.a、libupvqe.a、libvqe_talkv2.so

【注意】

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

【举例】

无。

ss_mpi_ai_enable_vqe

【描述】

使能AI的声音质量增强功能。

【语法】

td_s32 ss_mpi_ai_enable_vqe(ot_audio_dev ai_dev, ot_ai_chn ai_chn);

【参数】

参数名称

描述

输入/输出

ai_dev

音频输入设备号。

取值范围:请参见表1。

输入

ai_chn

音频输入通道号。

取值范围:请参见表1。

输入

【返回值】

返回值

描述

0

成功。

非0

失败,其值为错误码。

【需求】

  • 头文件:ot_common_aio.h、ss_mpi_audio.h
  • 库文件:libss_mpi_audio.a、libupvqe.a、libvqe_common.so、libvqe_rnr.so、libvqe_hpf.so、libvqe_gain.so、libvqe_eq.so、libvqe_anr.so、libvqe_agc.so、libvqe_aec.so、libvqe_hdr.so、libvqe_peq.so、libvqe_drc.so

【注意】

  • 启用声音质量增强功能前必须先启用相对应的AI通道。
  • 多次使能相同AI通道的声音质量增强功能时,返回成功。
  • 禁用AI通道后,如果重新启用AI通道,并使用声音质量增强功能,需调用此接口重新启用声音质量增强功能。

【举例】

无。

ss_mpi_ai_disable_vqe

【描述】

禁用AI的声音质量增强功能。

【语法】

td_s32 ss_mpi_ai_disable_vqe(ot_audio_dev ai_dev, ot_ai_chn ai_chn);

【参数】

参数名称

描述

输入/输出

ai_dev

音频输入设备号。

取值范围:请参见表1。

输入

ai_chn

音频输入通道号。

取值范围:请参见表1。

输入

【返回值】

返回值

描述

0

成功。

非0

失败,其值为错误码。

【需求】

  • 头文件:ot_common_aio.h、ss_mpi_audio.h
  • 库文件:libss_mpi_audio.a、libupvqe.a、libvqe_common.so、libvqe_rnr.so、libvqe_hpf.so、libvqe_gain.so、libvqe_eq.so、libvqe_anr.so、libvqe_agc.so、libvqe_aec.so、libvqe_hdr.so、libvqe_peq.so、libvqe_drc.so

【注意】

  • 不再使用AI声音质量增强功能时,应该调用此接口将其禁用。
  • 多次禁用相同AI通道的声音质量增强功能,返回成功。

【举例】

无。

ss_mpi_ai_set_track_mode

【描述】

设置AI声道模式。

【语法】

td_s32 ss_mpi_ai_set_track_mode(ot_audio_dev ai_dev, ot_audio_track_mode track_mode);

【参数】

参数名称

描述

输入/输出

ai_dev

音频设备号。

取值范围:请参见表1。

输入

track_mode

音频输入声道模式。

输入

【返回值】

返回值

描述

0

成功。

非0

失败,其值为错误码。

【需求】

  • 头文件:ot_common_aio.h、ss_mpi_audio.h
  • 库文件:libss_mpi_audio.a

【注意】

  • 在AI设备成功启用后再调用此接口。
  • AI设备工作在I2S模式时,支持设置声道模式,PCM模式下不支持。

【举例】

td_s32 ret;
ot_audio_dev ai_dev = 0;
ot_audio_track_mode track_mode = OT_AUDIO_TRACK_NORMAL;
ot_audio_track_mode temp;
ret = ss_mpi_ai_set_track_mode(ai_dev, track_mode);
if (ret != TD_SUCCESS) {
    printf("Ai set track mode failure! ai_dev: %d, track_mode: %d, ret: 0x%x.\n", ai_dev, track_mode, ret);
    return ret;
}
ret = ss_mpi_ai_get_track_mode(ai_dev, &temp);
if (ret != TD_SUCCESS) {
    printf("Ai get track mode failure! ai_dev: %d, ret: 0x%x.\n", ai_dev, ret);
    return ret;
}

ss_mpi_ai_get_track_mode

【描述】

获取AI声道模式。

【语法】

td_s32 ss_mpi_ai_get_track_mode(ot_audio_dev ai_dev, ot_audio_track_mode *track_mode);

【参数】

参数名称

描述

输入/输出

ai_dev

音频设备号。

取值范围:请参见表1。

输入

track_mode

音频输入声道模式指针。

输出

【返回值】

返回值

描述

0

成功。

非0

失败,其值为错误码。

【需求】

  • 头文件:ot_common_aio.h、ss_mpi_audio.h
  • 库文件:libss_mpi_audio.a

【注意】

  • 在AI设备成功启用后再调用此接口。
  • AI设备工作在I2S模式时,支持获取声道模式,PCM模式下不支持。

【举例】

无。

ss_mpi_ai_get_fd

【描述】

获取音频输入通道号对应的设备文件句柄。

【语法】

td_s32 ss_mpi_ai_get_fd(ot_audio_dev ai_dev, ot_ai_chn ai_chn);

【参数】

参数名称

描述

输入/输出

ai_dev

AI设备号。

取值范围:请参见表1。

输入

ai_chn

AI通道号。

取值范围:请参见表1。

输入

【返回值】

返回值

描述

正数值

有效返回值。

非正数值

无效返回值。

【需求】

  • 头文件:ot_common_aio.h、ss_mpi_audio.h
  • 库文件:libss_mpi_audio.a

【注意】

无。

【举例】

td_s32 ai_fd;
ot_audio_dev ai_dev = 0;
ot_ai_chn ai_chn = 0;

ai_fd = ss_mpi_ai_get_fd(ai_dev, ai_chn);
if(ai_fd <= 0) {
    return TD_FAILURE;
}

ss_mpi_ai_clr_pub_attr

【描述】

清空Pub属性。

【语法】

td_s32 ss_mpi_ai_clr_pub_attr (ot_audio_dev ai_dev);

【参数】

参数名称

描述

输入/输出

ai_dev

AI设备号。

取值范围:请参见表1。

输入

【返回值】

返回值

描述

正数值

有效返回值。

非正数值

无效返回值。

【需求】

  • 头文件:ot_common_aio.h、ss_mpi_audio.h
  • 库文件:libss_mpi_audio.a

【注意】

  • 清除设备属性前,需要先停止设备。
  • 当AO设备共用AI设备时钟,且两者设备均未使能时,AO设备属性需要强行切换(修改后属性不满足共时钟要求:sample_rate相同,工作模式相同),建议切换前先使用该接口清除与AI的内部耦合关系。

【相关主题】

无。

ss_mpi_ai_save_file

【描述】

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

【语法】

td_s32 ss_mpi_ai_save_file(ot_audio_dev ai_dev, ot_ai_chn ai_chn, const ot_audio_save_file_info *save_file_info);

【参数】

参数名称

描述

输入/输出

ai_dev

音频设备号。

取值范围:请参见表1。

输入

ai_chn

音频输入通道号。

取值范围:请参见表1。

输入

save_file_info

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

输入

【返回值】

返回值

描述

0

成功。

非0

失败,其值为错误码。

【需求】

  • 头文件:ot_common_aio.h、ss_mpi_audio.h
  • 库文件:libss_mpi_audio.a

【注意】

  • 此接口用于dump AI数据,支持获取VQE处理前后的数据。
  • 在AI通道成功启用后再调用此接口。
  • 当AI通道模式设为OT_AI_CHN_MODE_FAST且处于AI-AENC/AI-AO系统绑定模式下,无法使用该接口dump AI数据。
  • 在指定目录下创建三个待写入的文件后再调用此接口,否则会报错。文件名的全称由AI设备号、AI通道号、AI设备的采样率、开启重采样之后的输出采样率(仅对Sou.pcm文件起作用)和用户定义的音频文件名组合而成,其命名格式为:Sin.pcm的完整文件名为“sin_ai_dev%d_chn%d_%dk_%s.pcm”,Rin.pcm的完整文件名为“rin_ai_dev%d_chn%d_%dk_%s.pcm”,Sou.pcm的完整文件名为“sou_ai_dev%d_chn%d_%dk_%s.pcm”。文件命名示例如下:

文件简称

AI设备号

AI通道号

AI设备的采样率

是否开启重采样

重采样之后的输出采样率

用户定义的音频文件保存名称

完整文件名

Sin.pcm

1

2

44100

NA

NA

default

sin_ai_dev1_chn2_44k_default.pcm

Rin.pcm

1

2

16000

NA

NA

default

rin_ai_dev1_chn2_16k_default.pcm

Sou.pcm

1

2

32000

NO

NA

default

sou_ai_dev1_chn2_32k_default.pcm

YES

11025

default

sou_ai_dev1_chn2_11k_default.pcm

  • 此接口调用后会在指定目录下的三个指定文件写入音频数据。Sin.pcm为VQE处理前的输入帧,Rin.pcm为VQE处理前的回声抵消参考帧,Sou.pcm为VQE处理后的输出帧。
  • 在没有开启VQE或者重采样功能时,仅Sin文件有效;在开启VQE或者重采样功能时,Sin文件和Sou文件均有效;在开启AEC功能时,Rin文件亦有效。
  • 实际保存文件的大小以帧大小为单位,当帧大小乘以获取的帧数不小于指定文件大小时,才会停止保存数据。

【相关主题】

无。

ss_mpi_ai_query_file_status

【描述】

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

【语法】

td_s32 ss_mpi_ai_query_file_status(ot_audio_dev ai_dev, ot_ai_chn ai_chn, ot_audio_file_status *file_status);

【参数】

参数名称

描述

输入/输出

ai_dev

音频设备号。

取值范围:请参见表1。

输入

ai_chn

音频输入通道号。

取值范围:请参见表1。

输入

file_status

状态属性结构体指针。

输出

【返回值】

返回值

描述

0

成功。

非0

失败,其值为错误码。

【需求】

  • 头文件:ot_common_aio.h、ss_mpi_audio.h
  • 库文件:libss_mpi_audio.a

【注意】

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

【相关主题】

无。

ss_mpi_ai_enable_aec_ref_frame

【描述】

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

【语法】

td_s32 ss_mpi_ai_enable_aec_ref_frame(ot_audio_dev ai_dev, ot_ai_chn ai_chn, ot_audio_dev ao_dev, ot_ao_chn ao_chn);

【参数】

参数名称

描述

输入/输出

ai_dev

AI设备号。

取值范围:请参见表1。

输入

ai_chn

AI通道号。

支持的通道范围由AI设备属性中的最大通道个数chn_cnt决定。

输入

ao_dev

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

取值范围:请参见表1。

输入

ao_chn

用于获取AEC参考帧的AO通道号。

取值范围:请参见表1。

输入

【返回值】

返回值

描述

0

成功。

非0

失败,其值为错误码。

【需求】

  • 头文件:ot_common_aio.h、ss_mpi_audio.h
  • 库文件:libss_mpi_audio.a

【注意】

  • 此接口仅用于在AEC功能关闭的情况下使能获取AEC参考帧,AEC参考帧通过接口ss_mpi_ai_get_frame返回,供用户在上层自己做AEC处理。
  • 如果在AEC功能打开的情况下调用此接口,则返回错误码OT_ERR_AI_NOT_SUPPORT。
  • 必须在AI通道使能的情况下才能调用此接口。
  • 此接口仅支持获取AI通道重采样前的原始参考帧数据,通道重采样功能对AEC参考帧无效。

【相关主题】

无。

ss_mpi_ai_disable_aec_ref_frame

【描述】

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

【语法】

td_s32 ss_mpi_ai_disable_aec_ref_frame(ot_audio_dev ai_dev, ot_ai_chn ai_chn);

【参数】

参数名称

描述

输入/输出

ai_dev

AI设备号。

取值范围:请参见表1。

输入

ai_chn

AI通道号。

取值范围:请参见表1。

输入

【返回值】

返回值

描述

0

成功。

非0

失败,其值为错误码。

【需求】

  • 头文件:ot_common_aio.h、ss_mpi_audio.h
  • 库文件:libss_mpi_audio.a

【注意】

重复调用本接口返回成功。

【举例】

无。

【相关主题】

无。

ss_mpi_ai_set_chn_attr

【描述】

设置AI通道属性。

【语法】

td_s32 ss_mpi_ai_set_chn_attr(ot_audio_dev ai_dev, ot_ai_chn ai_chn, const ot_ai_chn_attr *chn_attr);

【参数】

参数名称

描述

输入/输出

ai_dev

音频设备号。

取值范围:请参见表1。

输入

ai_chn

音频输入通道号。

支持的通道范围由AI设备属性中的最大通道个数chn_cnt与声道模式snd_mode决定。

输入

chn_attr

音频通道属性。

输入

【返回值】

返回值

描述

0

成功。

非0

失败,其值为错误码。

【需求】

  • 头文件:ot_common_aio.h、ss_mpi_audio.h
  • 库文件:libss_mpi_audio.a

【注意】

  • 通道属性中的mode参数用于设置通道的工作模式,默认工作模式为OT_AI_CHN_MODE_NORMAL。
  • 通道属性中的ot_ai_chn_attr中“raw_frame_enable”参数用于开启原始帧获取功能,默认不开启,开启之后会在原有正常帧的基础上增加支持获取原始帧。需要注意的是,原始帧会额外增加ab内存占用。
  • 建议先调用ss_mpi_ai_get_chn_attr接口获取默认配置,再调用本接口修改配置,以便于后续扩展。
  • 在对获取相邻音频帧间的耗时要求均匀或者需要低延时获取音频帧的场景,可考虑将工作模式设置为OT_AI_CHN_MODE_FAST,值得注意的是该模式下AI-AENC、AI-AO系统绑定方式不支持VQE。
  • 该接口须在启用相对应的AI通道前调用。

【举例】

无。

ss_mpi_ai_get_chn_attr

【描述】

获取AI通道属性。

【语法】

td_s32 ss_mpi_ai_get_chn_attr(ot_audio_dev ai_dev, ot_ai_chn ai_chn, ot_ai_chn_attr *chn_attr);

【参数】

参数名称

描述

输入/输出

ai_dev

音频设备号。

取值范围:请参见表1。

输入

ai_chn

音频输入通道号。

支持的通道范围由AI设备属性中的最大通道个数chn_cnt与声道模式snd_mode决定。

输入

chn_attr

音频通道属性。

输出

【返回值】

返回值

描述

0

成功。

非0

失败,其值为错误码。

【需求】

  • 头文件:ot_common_aio.h、ss_mpi_audio.h
  • 库文件:libss_mpi_audio.a

【注意】

无。

【举例】

无。

ss_mpi_ai_set_dmic_gain

【描述】

设置AI设备DMIC增益大小。

【语法】

td_s32 ss_mpi_ai_set_dmic_gain(ot_audio_dev ai_dev, td_s32 gain);

【参数】

参数名称

描述

输入/输出

ai_dev

音频设备号。

取值范围:请参见表1。

输入

gain

音频设备DMIC增益大小。

输入

【返回值】

返回值

描述

0

成功。

非0

失败,其值为错误码。

【需求】

  • 头文件:ot_common_aio.h、ss_mpi_audio.h
  • 库文件:libss_mpi_audio.a

【注意】

  • 在AI设备成功启用后再调用此接口。
  • Hi3519DV500支持该接口,参数gain的取值范围为[0, 120],默认为30。其中,0到120按0.4dB步长递增:

    • 0对应-12dB增益;
    • 30对应0dB增益;
    • 120对应36dB增益。
  • Hi3516CV610不支持该接口。

【举例】

无。

ss_mpi_ai_get_dmic_gain

【描述】

获取AI设备DMIC增益大小。

【语法】

td_s32 ss_mpi_ai_get_dmic_gain(ot_audio_dev ai_dev, td_s32 *gain);

【参数】

参数名称

描述

输入/输出

ai_dev

音频设备号。

取值范围:请参见表1。

输入

gain

音频设备DMIC增益大小指针。

输出

【返回值】

返回值

描述

0

成功。

非0

失败,其值为错误码。

【需求】

  • 头文件:ot_common_aio.h、ss_mpi_audio.h
  • 库文件:libss_mpi_audio.a

【注意】

  • 在AI设备成功启用后再调用此接口。
  • Hi3516CV610不支持该接口。

【举例】

无。

音频输出

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

该功能模块提供以下MPI:

ss_mpi_ao_set_pub_attr

【描述】

设置AO设备属性。

【语法】

td_s32 ss_mpi_ao_set_pub_attr(ot_audio_dev ao_dev, const ot_aio_attr *attr);

【参数】

参数名称

描述

输入/输出

ao_dev

音频设备号。

取值范围:请参见表1。

输入

attr

音频输出设备属性。

输入

【返回值】

返回值

描述

0

成功。

非0

失败,其值为错误码。

【需求】

  • 头文件:ot_common_aio.h、ss_mpi_audio.h
  • 库文件:libss_mpi_audio.a

【注意】

  • 在设置属性之前需要保证AO处于禁用状态,如果处于启用状态则需要首先禁用AO设备。
  • AO必须和DA配合起来才能正常工作,用户必须清楚DA发送的数据分布和通道的关系才能从正确的通道发送数据。
  • 对接外置Codec时,由于时序的问题,在AO设备从模式下,建议用户先配置好对接的Codec,再配置AO设备;而在AO设备主模式下,建议用户先配置好AO设备,再配置对接的Codec。对接内置Codec时,都需要先配置AO设备,再配置内置Codec。
  • AO设备主模式时,决定AO设备输出时钟的关键配置项是采样率、采样精度以及通道数目,采样精度乘以通道数目即为AO设备时序一次采样的位宽。
  • 在使用I2S时序多线发送模式时,通道数需要设置为8。
  • AO设备属性结构体中其他项请参见AI模块中相关接口的描述。

【举例】

td_s32 ret;
ot_aio_attr attr;
ot_audio_dev ao_dev = 0;

attr.bit_width = OT_AUDIO_BIT_WIDTH_16;
attr.sample_rate = OT_AUDIO_SAMPLE_RATE_8000;
attr.snd_mode = OT_AUDIO_SOUND_MODE_MONO;
attr.work_mode = OT_AIO_MODE_I2S_SLAVE;
attr.expand_flag = 0;
attr.frame_num = 5;
attr.point_num_per_frame = 160;
attr.chn_cnt = 2;
attr.clk_share = 0;

/* set ao public attr */
ret = ss_mpi_ao_set_pub_attr(ao_dev, &attr);
if(ret != TD_SUCCESS) {
    printf("set ao %d attr err:0x%x\n", ao_dev, ret);
    return ret;
}
/* enable ao device */
ret = ss_mpi_ao_enable(ao_dev);
if(ret != TD_SUCCESS) {
    printf("enable ao dev %d err:0x%x\n", ao_dev, ret);
    return ret;
}

ss_mpi_ao_get_pub_attr

【描述】

获取AO设备属性。

【语法】

td_s32 ss_mpi_ao_get_pub_attr(ot_audio_dev ao_dev, ot_aio_attr *attr);

【参数】

参数名称

描述

输入/输出

ao_dev

音频设备号。

取值范围:请参见表1。

输入

attr

音频输出设备属性指针。

输出

【返回值】

返回值

描述

0

成功。

非0

失败,其值为错误码。

【需求】

  • 头文件:ot_common_aio.h、ss_mpi_audio.h
  • 库文件:libss_mpi_audio.a

【注意】

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

【举例】

td_s32 ret;
ot_audio_dev ao_dev = 0;
ot_aio_attr attr;

/* first enable ao device */
ret = ss_mpi_ao_get_pub_attr(ao_dev, &attr);
if(ret != TD_SUCCESS) {
    printf("get ao %d attr err:0x%x\n", ao_dev, ret);
    return ret;
}

ss_mpi_ao_enable

【描述】

启用AO设备。

【语法】

td_s32 ss_mpi_ao_enable(ot_audio_dev ao_dev);

【参数】

参数名称

描述

输入/输出

ao_dev

音频设备号。

取值范围:请参见表1。

输入

【返回值】

返回值

描述

0

成功。

非0

失败,其值为错误码。

【需求】

  • 头文件:ot_common_aio.h、ss_mpi_audio.h
  • 库文件:libss_mpi_audio.a

【注意】

  • 要求在启用前配置AO设备属性,否则会返回属性未配置的错误。
  • 如果AO设备已经启用,则直接返回成功。

【举例】

请参见ss_mpi_ai_set_pub_attr的举例。

ss_mpi_ao_disable

【描述】

禁用AO设备。

【语法】

td_s32 ss_mpi_ao_disable(ot_audio_dev ao_dev);

【参数】

参数名称

描述

输入/输出

ao_dev

音频设备号。

取值范围:请参见表1。

输入

【返回值】

返回值

描述

0

成功。

非0

失败,其值为错误码。

【需求】

  • 头文件:ot_common_aio.h、ss_mpi_audio.h
  • 库文件:libss_mpi_audio.a

【注意】

  • 如果AO设备已经禁用,则直接返回成功。
  • 禁用AO设备前必须先禁用设备下所有AO通道。

【举例】

无。

ss_mpi_ao_enable_chn

【描述】

启用AO通道。

【语法】

td_s32 ss_mpi_ao_enable_chn(ot_audio_dev ao_dev, ot_ao_chn ao_chn);

【参数】

参数名称

描述

输入/输出

ao_dev

音频设备号。

取值范围:请参见表1。

输入

ao_chn

音频输出通道号。

支持的通道范围由AO设备属性中的最大通道个数chn_cnt与声道模式snd_mode决定。

输入

【返回值】

返回值

描述

0

成功。

非0

失败,其值为错误码。

【需求】

  • 头文件:ot_common_aio.h、ss_mpi_audio.h
  • 库文件:libss_mpi_audio.a

【注意】

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

【举例】

请参见ss_mpi_ai_set_pub_attr的举例。

ss_mpi_ao_disable_chn

【描述】

禁用AO通道。

【语法】

td_s32 ss_mpi_ao_disable_chn(ot_audio_dev ao_dev, ot_ao_chn ao_chn);

【参数】

参数名称

描述

输入/输出

ao_dev

音频设备号。

取值范围:请参见表1。

输入

ao_chn

音频输出通道号。

取值范围:请参见表1。

输入

【返回值】

返回值

描述

0

成功。

非0

失败,其值为错误码。

【需求】

  • 头文件:ot_common_aio.h、ss_mpi_audio.h
  • 库文件:libss_mpi_audio.a

【注意】

无。

【举例】

无。

ss_mpi_ao_send_frame

【描述】

发送AO音频帧。

【语法】

td_s32 ss_mpi_ao_send_frame(ot_audio_dev ao_dev, ot_ao_chn ao_chn, const ot_audio_frame *data, td_s32 milli_sec);

【参数】

参数名称

描述

输入/输出

ao_dev

音频设备号。

取值范围:请参见表1。

输入

ao_chn

音频输出通道号。

支持的通道范围由AO设备属性中的最大通道个数chn_cnt与声道模式snd_mode决定。

输入

data

音频帧结构体指针。

输入

milli_sec

发送数据的超时时间

-1表示阻塞模式;

0表示非阻塞模式;

>0表示阻塞milli_sec毫秒,超时则报错返回。

输入

【返回值】

返回值

描述

0

成功。

非0

失败,其值为错误码。

【需求】

  • 头文件:ot_common_aio.h、ss_mpi_audio.h
  • 库文件:libss_mpi_audio.a

【注意】

  • 该接口用于用户主动发送音频帧至AO输出,如果AO通道已经通过系统绑定(ss_mpi_sys_bind)接口与AI或ADEC绑定,不需要也不建议调此接口。
  • milli_sec的值必须大于等于-1,等于-1时采用阻塞模式发送数据,等于0时采用非阻塞模式发送数据,大于0时,阻塞milli_sec毫秒后,则返回超时并报错。
  • 调用该接口发送音频帧到AO输出时,必须先使能对应的AO通道。
  • AO通道开启重采样或者声音质量增强时,优先使用阻塞模式或者阻塞超时模式,当使用阻塞超时模式时,建议将阻塞超时时间设置至少大于2倍AO设备帧时长。

ss_mpi_ao_enable_resample

【描述】

启用AO重采样。

【语法】

td_s32 ss_mpi_ao_enable_resample(ot_audio_dev ao_dev, ot_ao_chn ao_chn, ot_audio_sample_rate in_sample_rate);

【参数】

参数名称

描述

输入/输出

ao_dev

音频设备号。

取值范围:请参见表1。

输入

ao_chn

音频输出通道号。

支持的通道范围由AO设备属性中的最大通道个数chn_cnt决定。

输入

in_sample_rate

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

输入

【返回值】

返回值

描述

0

成功。

非0

失败,其值为错误码。

【需求】

  • 头文件:ot_common_aio.h、ss_mpi_audio.h
  • 库文件:libss_mpi_audio.a、libupvqe.a、libvqe_res.so

【注意】

  • 应该在启用AO通道之后,绑定AO通道之前,调用此接口启用重采样功能。
  • 允许重复启用重采样功能,但必须保证后配置的重采样输入采样率与之前配置的重采样输入采样率一样。
  • 在禁用AO通道后,如果重新启用AO通道,并使用重采样功能,需调用此接口重新启用重采样。
  • AO重采样的输入采样率必须与AO设备属性配置的采样率不相同。

【举例】

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

/* dev attr of ao */
ot_audio_sample_rate in_sample_rate;
aio_attr.chn_cnt = 2;
aio_attr.bit_width = OT_AUDIO_BIT_WIDTH_16;
aio_attr.sample_rate = OT_AUDIO_SAMPLE_RATE_32000;
aio_attr.snd_mode = OT_AUDIO_SOUND_MODE_MONO;
aio_attr.expand_flag = 1;
aio_attr.frame_num = 30;
aio_attr.point_num_per_frame = 320*4;
in_sample_rate = OT_AUDIO_SAMPLE_RATE_8000;
ret = ss_mpi_ao_enable_resample(ao_dev, ao_chn, in_sample_rate);
if (ret != TD_SUCCESS) {
    printf("func(%s) line(%d): failed, ret:0x%x\n", __FUNCTION__, __LINE__, ret);
    return ret;
}

ss_mpi_ao_disable_resample

【描述】

禁用AO重采样。

【语法】

td_s32 ss_mpi_ao_disable_resample(ot_audio_dev ao_dev, ot_ao_chn ao_chn);

【参数】

参数名称

描述

输入/输出

ao_dev

音频设备号。

取值范围:请参见表1。

输入

ao_chn

音频输出通道号。

取值范围:请参见表1。

输入

【返回值】

返回值

描述

0

成功。

非0

失败,其值为错误码。

【需求】

  • 头文件:ot_common_aio.h、ss_mpi_audio.h
  • 库文件:libss_mpi_audio.a、libupvqe.a、libvqe_res.so

【注意】

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

【举例】

无。

ss_mpi_ao_pause_chn

【描述】

暂停AO通道。

td_s32 ss_mpi_ao_pause_chn(ot_audio_dev ao_dev, ot_ao_chn ao_chn);

【参数】

参数名称

描述

输入/输出

ao_dev

音频设备号。

取值范围:请参见表1。

输入

ao_chn

音频输出通道号。

支持的通道范围由AO设备属性中的最大通道个数chn_cnt与声道模式snd_mode决定。

输入

【返回值】

返回值

描述

0

成功。

非0

失败,其值为错误码。

【需求】

  • 头文件:ot_common_aio.h、ss_mpi_audio.h
  • 库文件:libss_mpi_audio.a

【注意】

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

【举例】

无。

ss_mpi_ao_resume_chn

【描述】

恢复AO通道。

【语法】

td_s32 ss_mpi_ao_resume_chn(ot_audio_dev ao_dev, ot_ao_chn ao_chn);

【参数】

参数名称

描述

输入/输出

ao_dev

音频设备号。

取值范围:请参见表1。

输入

ao_chn

音频输出通道号。

支持的通道范围由AO设备属性中的最大通道个数chn_cnt与声道模式snd_mode决定。

输入

【返回值】

返回值

描述

0

成功。

非0

失败,其值为错误码。

【需求】

  • 头文件:ot_common_aio.h、ss_mpi_audio.h
  • 库文件:libss_mpi_audio.a

【注意】

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

【举例】

无。

ss_mpi_ao_clr_chn_buf

【描述】

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

【语法】

td_s32 ss_mpi_ao_clr_chn_buf(ot_audio_dev ao_dev, ot_ao_chn ao_chn);

【参数】

参数名称

描述

输入/输出

ao_dev

音频设备号。

取值范围:请参见表1。

输入

ao_chn

AO通道号。

支持的通道范围由AO设备属性中的最大通道个数chn_cnt与声道模式snd_mode决定。

输入

【返回值】

返回值

描述

0

成功。

非0

失败,其值为错误码。

【需求】

  • 头文件:ot_common_aio.h、ss_mpi_audio.h
  • 库文件:libss_mpi_audio.a

【注意】

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

【举例】

无。

ss_mpi_ao_query_chn_status

【描述】

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

【语法】

td_s32 ss_mpi_ao_query_chn_status(ot_audio_dev ao_dev, ot_ao_chn ao_chn, ot_ao_chn_state *status);

【参数】

参数名称

描述

输入/输出

ao_dev

音频设备号。

取值范围:请参见表1。

输入

ao_chn

AO通道号。

支持的通道范围由AO设备属性中的最大通道个数chn_cnt与声道模式snd_mode决定。

输入

status

缓存状态结构体指针。

输出

【返回值】

返回值

描述

0

成功。

非0

失败,其值为错误码。

【需求】

  • 头文件:ot_common_aio.h、ss_mpi_audio.h
  • 库文件:libss_mpi_audio.a

【注意】

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

【举例】

无。

ss_mpi_ao_set_track_mode

【描述】

设置AO设备声道模式。

【语法】

td_s32 ss_mpi_ao_set_track_mode(ot_audio_dev ao_dev, ot_audio_track_mode track_mode);

【参数】

参数名称

描述

输入/输出

ao_dev

音频设备号。

取值范围:请参见表1。

输入

track_mode

音频设备声道模式。

输入

【返回值】

返回值

描述

0

成功。

非0

失败,其值为错误码。

【需求】

  • 头文件:ot_common_aio.h、ss_mpi_audio.h
  • 库文件:libss_mpi_audio.a

【注意】

  • 在AO设备成功启用后再调用此接口。
  • AO设备工作在I2S模式时,支持设置声道模式,PCM模式下不支持。

【举例】

td_s32 ret;
ot_audio_dev ao_dev = 0;
ot_audio_track_mode track_mode = AUDIO_TRACK_NORMAL;
ot_audio_track_mode temp;
ret = ss_mpi_ao_set_track_mode(ao_dev, track_mode);
if (ret != TD_SUCCESS) {
    printf("Ao set track mode failure! ao_dev: %d, track_mode: %d, ret: 0x%x.\n", ao_dev, track_mode, ret);
    return ret;
 }
 ret = ss_mpi_ao_get_track_mode(ao_dev, &temp);
 if (ret != TD_SUCCESS) {
    printf("Ao get track mode failure! ao_dev: %d, ret: 0x%x.\n", ao_dev, ret);
    return ret;
}

ss_mpi_ao_get_track_mode

【描述】

获取AO设备声道模式。

【语法】

td_s32 ss_mpi_ao_get_track_mode(ot_audio_dev ao_dev, ot_audio_track_mode *track_mode);

【参数】

参数名称

描述

输入/输出

ao_dev

音频设备号。

取值范围:请参见表1。

输入

track_mode

音频设备声道模式指针。

输出

【返回值】

返回值

描述

0

成功。

非0

失败,其值为错误码。

【需求】

  • 头文件:ot_common_aio.h、ss_mpi_audio.h
  • 库文件:libss_mpi_audio.a

【注意】

  • 在AO设备成功启用后再调用此接口。
  • AO设备工作在I2S模式时,支持获取声道模式,PCM模式下不支持。

【举例】

无。

ss_mpi_ao_set_volume

【描述】

设置AO设备音量大小。

【语法】

td_s32 ss_mpi_ao_set_volume(ot_audio_dev ao_dev, td_s32 volume_db);

【参数】

参数名称

描述

输入/输出

ao_dev

音频设备号。

取值范围:请参见表1。

输入

volume_db

音频设备音量大小(以dB为单位)。

取值范围:[-121, 6]

输入

【返回值】

返回值

描述

0

成功。

非0

失败,其值为错误码。

【需求】

  • 头文件:ot_common_aio.h、ss_mpi_audio.h
  • 库文件:libss_mpi_audio.a

【注意】

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

【举例】

无。

ss_mpi_ao_get_volume

【描述】

获取AO设备音量大小。

【语法】

td_s32 ss_mpi_ao_get_volume(ot_audio_dev ao_dev, td_s32 *volume_db);

【参数】

参数名称

描述

输入/输出

ao_dev

音频设备号。

取值范围:请参见表1。

输入

volume_db

音频设备音量大小指针。

输出

【返回值】

返回值

描述

0

成功。

非0

失败,其值为错误码。

【需求】

  • 头文件:ot_common_aio.h、ss_mpi_audio.h
  • 库文件:libss_mpi_audio.a

【注意】

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

【举例】

无。

ss_mpi_ao_set_mute

【描述】

设置AO设备静音状态。

【语法】

td_s32 ss_mpi_ao_set_mute(ot_audio_dev ao_dev, td_bool enable, const ot_audio_fade*fade);

【参数】

参数名称

描述

输入/输出

ao_dev

音频设备号。

取值范围:请参见表1。

输入

enable

音频设备是否启用静音。

TD_TRUE:启用静音功能;

TD_FALSE:关闭静音功能。

输入

fade

淡入淡出结构体指针。

输入

【返回值】

返回值

描述

0

成功。

非0

失败,其值为错误码。

【需求】

  • 头文件:ot_common_aio.h、ss_mpi_audio.h
  • 库文件:libss_mpi_audio.a

【注意】

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

【举例】

无。

ss_mpi_ao_get_mute

【描述】

获取AO设备静音状态。

【语法】

td_s32 ss_mpi_ao_get_mute(ot_audio_dev ao_dev, td_bool *enable, ot_audio_fade *fade);

【参数】

参数名称

描述

输入/输出

ao_dev

音频设备号。

取值范围:请参见表1。

输入

enable

音频设备静音状态指针。

输出

fade

淡入淡出结构体指针。

输出

【返回值】

返回值

描述

0

成功。

非0

失败,其值为错误码。

【需求】

  • 头文件:ot_common_aio.h、ss_mpi_audio.h
  • 库文件:libss_mpi_audio.a

【注意】

  • 在AO设备成功启用后再调用此接口。
  • 调用该接口时,参数enable和fade任意一个可以为空,但不能同时为空,否则会报错。

【举例】

无。

ss_mpi_ao_get_fd

【描述】

获取音频输出通道号对应的设备文件句柄。

【语法】

td_s32 ss_mpi_ao_get_fd(ot_audio_dev ao_dev, ot_ao_chn ao_chn);

【参数】

参数名称

描述

输入/输出

ao_dev

AO设备号。

取值范围:请参见表1。

输入

ao_chn

AO通道号。

取值范围:请参见表1。

输入

【返回值】

返回值

描述

正数值

有效返回值。

非正数值

无效返回值。

【需求】

  • 头文件:ot_common_aio.h、ss_mpi_audio.h
  • 库文件:libss_mpi_audio.a

【注意】

无。

【举例】

td_s32 ao_fd;
ot_audio_dev ao_dev = 0;
ot_ao_chn ao_chn = 0;

/* first enable ao device */
ao_fd = ss_mpi_ao_get_fd(ao_dev, ao_chn);
if (ao_fd <= 0) {
    return TD_FAILURE;
}

ss_mpi_ao_clr_pub_attr

【描述】

清除AO设备属性。

【语法】

td_s32 ss_mpi_ao_clr_pub_attr(ot_audio_dev ao_dev);

【参数】

参数名称

描述

输入/输出

ao_dev

AO设备号。

取值范围:请参见表1。

输入

【返回值】

返回值

描述

正数值

有效返回值。

非正数值

无效返回值。

【需求】

  • 头文件:ot_common_aio.h、ss_mpi_audio.h
  • 库文件:libss_mpi_audio.a

【注意】

  • 清除设备属性前,需要先停止设备。
  • 当AI设备共用AO设备时钟,且两者设备均未使能时,AI设备属性需要强行切换(修改后属性不满足共时钟要求:sample_rate相同,工作模式相同),建议切换前先使用该接口清除与AO的内部耦合关系。

【相关主题】

无。

ss_mpi_ao_set_vqe_attr

【描述】

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

【语法】

td_s32 ss_mpi_ao_set_vqe_attr(ot_audio_dev ao_dev, ot_ao_chn ao_chn, const ot_ao_vqe_cfg *vqe_cfg);

【参数】

参数名称

描述

输入/输出

ao_dev

音频输出设备号。

取值范围:请参见表1。

输入

ao_chn

音频输出通道号。

取值范围:请参见表1。

输入

vqe_cfg

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

输入

【返回值】

返回值

描述

0

成功。

非0

失败,其值为错误码。

【需求】

  • 头文件:ot_common_aio.h、ss_mpi_audio.h
  • 库文件:libss_mpi_audio.a、libdnvqe.a、libvqe_common.so、libvqe_hpf.so、libvqe_eq.so、libvqe_anr.so、libvqe_agc.so、libvqe_hs.so

【注意】

  • 使能声音质量增强功能前必须先设置相对应AO通道的声音质量增强功能相关属性。
  • 设置AO的声音质量增强功能相关属性前,必须先使能对应的AO通道。
  • 相同AO通道的声音质量增强功能不支持动态设置属性,重新设置AO通道的声音质量增强功能相关属性时,需要先关闭AO通道的声音质量增强功能,再设置AO通道的声音质量增强功能相关属性。
  • 仅支持OT_AUDIO_SOUND_MODE_MONO声道模式下使能。
  • 在设置声音质量增强功能属性时,可通过配置相应的声音质量增强功能属性来选择使能其中的部分功能。

【举例】

无。

ss_mpi_ao_get_vqe_attr

【描述】

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

【语法】

td_s32 ss_mpi_ao_get_vqe_attr(ot_audio_dev ao_dev, ot_ao_chn ao_chn, ot_ao_vqe_cfg *vqe_cfg);

【参数】

参数名称

描述

输入/输出

ao_dev

音频输出设备号。

取值范围:请参见表1。

输入

ao_chn

音频输出通道号。

取值范围:请参见表1。

输入

vqe_cfg

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

输出

【返回值】

返回值

描述

0

成功。

非0

失败,其值为错误码。

【需求】

  • 头文件:ot_common_aio.h、ss_mpi_audio.h
  • 库文件:libss_mpi_audio.a、libdnvqe.a、libvqe_common.so、libvqe_hpf.so、libvqe_eq.so、libvqe_anr.so、libvqe_agc.so、libvqe_hs.so

【注意】

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

【举例】

无。

ss_mpi_ao_enable_vqe

【描述】

使能AO的声音质量增强功能。

【语法】

td_s32 ss_mpi_ao_enable_vqe(ot_audio_dev ao_dev, ot_ao_chn ao_chn);

【参数】

参数名称

描述

输入/输出

ao_dev

音频输出设备号。

取值范围:请参见表1。

输入

ao_chn

音频输出通道号。

取值范围:请参见表1。

输入

【返回值】

返回值

描述

0

成功。

非0

失败,其值为错误码。

【需求】

  • 头文件:ot_common_aio.h、ss_mpi_audio.h
  • 库文件:libss_mpi_audio.a、libdnvqe.a、libvqe_common.so、libvqe_hpf.so、libvqe_eq.so、libvqe_anr.so、libvqe_agc.so、libvqe_hs.so

【注意】

  • 启用声音质量增强功能前必须先启用相对应的AO通道。
  • 多次使能相同AO通道的声音质量增强功能时,返回成功。
  • 禁用AO通道后,如果重新启用AO通道,并使用声音质量增强功能,需调用此接口重新启用声音质量增强功能。

【举例】

无。

ss_mpi_ao_disable_vqe

【描述】

禁用AO的声音质量增强功能。

【语法】

td_s32 ss_mpi_ao_disable_vqe(ot_audio_dev ao_dev, ot_ao_chn ao_chn);

【参数】

参数名称

描述

输入/输出

ao_dev

音频输出设备号。

取值范围:请参见表1。

输入

ao_chn

音频输出通道号。

取值范围:请参见表1。

输入

【返回值】

返回值

描述

0

成功。

非0

失败,其值为错误码。

【需求】

  • 头文件:ot_common_aio.h、ss_mpi_audio.h
  • 库文件:libss_mpi_audio.a、libdnvqe.a、libvqe_common.so、libvqe_hpf.so、libvqe_eq.so、libvqe_anr.so、libvqe_agc.so、libvqe_hs.so

【注意】

  • 不再使用AO声音质量增强功能时,应该调用此接口将其禁用。
  • 多次禁用相同AO通道的声音质量增强功能,返回成功。

【举例】

无。

ss_mpi_ao_get_chn_delay

【描述】

获取AO通道中当前的音频延时大小。

【语法】

td_s32 ss_mpi_ao_get_chn_delay(ot_audio_dev ao_dev, ot_ao_chn ao_chn, td_u32 *milli_sec)

【参数】

参数名称

描述

输入/输出

ao_dev

音频设备号。

取值范围:请参见表1。

输入

ao_chn

AO通道号。

支持的通道范围由AO设备属性中的最大通道个数chn_cnt与声道模式snd_mode决定。

输入

milli_sec

音频延时的指针。音频延时大小以毫秒为单位。

输出

【返回值】

返回值

描述

0

成功。

非0

失败,其值为错误码。

【需求】

  • 头文件:ot_common_aio.h、ss_mpi_audio.h
  • 库文件:libss_mpi_audio.a

【注意】

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

【举例】

无。

ss_mpi_ao_save_file

【描述】

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

【语法】

td_s32 ss_mpi_ao_save_file(ot_audio_dev ao_dev, ot_ao_chn ao_chn, const ot_audio_save_file_info *save_file_info);

【参数】

参数名称

描述

输入/输出

ao_dev

音频设备号。

取值范围:请参见表1。

输入

ao_chn

音频输出通道号。

取值范围:请参见表1。

输入

save_file_info

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

输入

【返回值】

返回值

描述

0

成功。

非0

失败,其值为错误码。

【需求】

  • 头文件:ot_common_aio.h、ss_mpi_audio.h
  • 库文件:libss_mpi_audio.a

【注意】

  • 此接口用于dump AO数据,支持获取VQE处理前后的数据。
  • AI-AO系统绑定模式下,使用该接口dump AO数据无效。调用后会在指定目录下写出两个指定大小文件。Sin.pcm为VQE处理前的输入帧,Sou.pcm为VQE处理后的输出帧。
  • 在AO通道成功启用后再调用此接口。
  • 在没有开启VQE或者重采样功能时,仅Sin文件有效;在开启VQE或者重采样功能时,Sin文件和Sou文件均有效。
  • 在指定目录下创建两个待写入的文件后再调用此接口,否则会报错。文件名的全称由AO设备号、AO通道号、AO设备的采样率、重采样之前的输入采样率(仅对Sin.pcm文件起作用)和用户定义的音频文件名组合而成,其命名格式为:Sin.pcm的完整文件名为“sin_ao_dev%d_chn%d_%dk_%s.pcm”, Sou.pcm的完整文件名为“sou_ao_dev%d_chn%d_%dk_%s.pcm”。文件命名示例如下:

文件简称

AO设备号

AO通道号

AO设备的采样率

是否开启重采样

重采样之前的输入采样率

用户定义的音频文件保存名称

完整文件名

Sin.pcm

1

1

44100

NO

NA

default

sin_ao_dev1_chn1_44k_default.pcm

YES

11025

default

sin_ao_dev1_chn1_11k_default.pcm

Sou.pcm

1

0

32000

NO

NA

default

sou_ao_dev1_chn0_32k_default.pcm

【相关主题】

无。

ss_mpi_ao_query_file_status

【描述】

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

【语法】

td_s32 ss_mpi_ao_query_file_status(ot_audio_dev ao_dev, ot_ao_chn ao_chn, ot_audio_file_status *file_status);

【参数】

参数名称

描述

输入/输出

ao_dev

音频设备号。

取值范围:请参见表1。

输入

ao_chn

音频输出通道号。

取值范围:请参见表1。

输入

file_status

状态属性结构体指针。

输出

【返回值】

返回值

描述

0

成功。

非0

失败,其值为错误码。

【需求】

  • 头文件:ot_common_aio.h、ss_mpi_audio.h
  • 库文件:libss_mpi_audio.a

【注意】

  • 此接口用于查询音频输出通道是否处于存文件的状态,当用户调用ss_mpi_ao_save_file存储文件后,可调用此接口查询存储的文件是否达到了指定的大小。
  • 如果file_status的saving为TD_TRUE,则还没有达到指定大小。如果file_status的saving为TD_FALSE,则已经达到指定大小。
  • 在AO通道成功启用后再调用此接口。

【相关主题】

无。

音频编码

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

该功能模块提供以下MPI:

ss_mpi_aenc_create_chn

【描述】

创建音频编码通道。

【语法】

td_s32 ss_mpi_aenc_create_chn(ot_aenc_chn aenc_chn, const ot_aenc_chn_attr *attr);

【参数】

参数名称

描述

输入/输出

aenc_chn

通道号。

取值范围:[0, OT_AENC_MAX_CHN_NUM)

输入

attr

音频编码通道属性指针。

输入

【返回值】

返回值

描述

0

成功。

非0

失败,其值为错误码。

【需求】

  • 头文件:ot_common_aio.h、ot_common_aenc.h、ss_mpi_audio.h
  • 库文件:libss_mpi_audio.a、libvoice_engine.a、libupvqe.a

【注意】

  • 协议类型指定该通道的编码协议,具体内容请见音频编解码协议。
  • 表1中列举的编解码协议只支持16bit线性PCM音频数据处理,如果输入帧来自AI,建议配置AI设备公共属性时将扩展标志置为1,使得AI数据由8bit自动扩展到16bit。
  • 语音帧结构如表1所示。
  • 音频编码的部分属性需要与输入的音频数据属性相匹配,例如采样率、帧点数等。
  • buffer大小以帧为单位,取值范围:[2, OT_MAX_AUDIO_FRAME_NUM],建议配置为10以上,过小的buffer配置可能导致丢帧等异常。
  • 在通道未被创建时才能使用此接口,如果通道已经被创建,则返回通道已经创建的错误。

【举例】

td_s32 ret;         
ot_aenc_chn_attr aenc_attr;
ot_aenc_attr_adpcm adpcm_aenc;
ot_audio_dev ai_dev = 0;
ot_ai_chn ai_chn = 0;
ot_aenc_chn aenc_chn = 0;
ot_audio_frame audio_frame;
ot_audio_stream audio_stream;
ot_mpp_chn src_chn, dest_chn;

aenc_attr.type = OT_PT_ADPCMA; /* ADPCM */
aenc_attr.buf_size = 10;
aenc_attr.value = &adpcm_aenc;
adpcm_aenc.adpcm_type = OT_ADPCM_TYPE_DVI4;

/* create aenc chn */
ret = ss_mpi_aenc_create_chn(aenc_chn, &aenc_attr);
if (ret != TD_SUCCESS) {
    printf("create aenc chn %d err:0x%x\n", aenc_chn,ret);
    return ret;
}

/* bind AENC to AI channel */
src_chn.mod_id  = OT_ID_AI;
src_chn.dev_id  = ai_dev;
src_chn.chn_id  = ai_chn;

dest_chn.mod_id = OT_ID_AENC;
dest_chn.dev_id = 0;
dest_chn.chn_id = aenc_chn;
ret = ss_mpi_sys_bind(&src_chn, &dest_chn);
if (ret != TD_SUCCESS) {
    return ret;
}

/* get stream from aenc chn */
ret = ss_mpi_aenc_get_stream(aenc_chn, &audio_stream);
if (ret != TD_SUCCESS) {
    printf("get stream from aenc chn %d fail \n", aenc_chn);
    return ret;
}

/* deal with audio stream */

/* release audio stream */
ret = ss_mpi_aenc_release_stream(aenc_chn, &audio_stream);
if (ret != TD_SUCCESS ) {
    return ret;
}

/* destroy aenc chn */
ret = ss_mpi_aenc_destroy_chn(aenc_chn);
if (ret != TD_SUCCESS) {
    return ret;
}

ss_mpi_aenc_destroy_chn

【描述】

销毁音频编码通道。

【语法】

td_s32 ss_mpi_aenc_destroy_chn(ot_aenc_chn aenc_chn);

【参数】

参数名称

描述

输入/输出

aenc_chn

通道号。

取值范围:[0, OT_AENC_MAX_CHN_NUM)。

输入

【返回值】

返回值

描述

0

成功。

非0

失败,其值为错误码。

【需求】

  • 头文件:ot_common_aio.h、ot_common_aenc.h、ss_mpi_audio.h
  • 库文件:libss_mpi_audio.a、libvoice_engine.a、libupvqe.a

【注意】

  • 通道未创建的情况下调用此接口会返回成功。
  • 如果正在获取/释放码流或者发送帧时销毁该通道,则会返回失败,用户同步处理时需要注意。

【举例】

请参见ss_mpi_aenc_create_chn的举例。

【相关主题】

无

ss_mpi_aenc_send_frame

【描述】

发送音频编码音频帧。

【语法】

td_s32 ss_mpi_aenc_send_frame(ot_aenc_chn aenc_chn, const ot_audio_frame *frame, const ot_aec_frame *aec_frame);

【参数】

参数名称

描述

输入/输出

aenc_chn

通道号。

取值范围:[0, OT_AENC_MAX_CHN_NUM)

输入

frame

音频帧结构体指针。

输入

aec_frame

回声抵消参考帧结构体指针。传入无效,保留参数。

输入

【返回值】

返回值

描述

0

成功。

非0

失败,其值为错误码。

【需求】

  • 头文件:ot_common_aio.h、ot_common_aenc.h、ss_mpi_audio.h
  • 库文件:libss_mpi_audio.a、libupvqe.a

【注意】

  • 音频编码发送码流是非阻塞接口,如果音频码流缓存满,则直接返回失败。
  • 该接口用于用户主动发送音频帧进行编码,如果AENC通道已经通过系统绑定(ss_mpi_sys_bind)接口与AI绑定,不需要也不建议调此接口。
  • 调用该接口发送音频编码音频帧时,必须先创建对应的编码通道。

【举例】

无。

【相关主题】

无。

ss_mpi_aenc_get_stream

【描述】

获取编码后码流。

【语法】

td_s32 ss_mpi_aenc_get_stream(ot_aenc_chn aenc_chn, ot_audio_stream *stream, td_s32 milli_sec);

【参数】

参数名称

描述

输入/输出

aenc_chn

通道号。

取值范围:[0, OT_AENC_MAX_CHN_NUM)。

输入

stream

获取的音频码流。

输出

milli_sec

获取数据的超时时间

-1表示阻塞模式,无数据时一直等待;

0表示非阻塞模式,无数据时则报错返回;

>0表示阻塞milli_sec毫秒,超时则报错返回。

输入

【返回值】

返回值

描述

0

成功。

非0

失败,其值为错误码。

【需求】

  • 头文件:ot_common_aio.h、ot_common_aenc.h、ss_mpi_audio.h
  • 库文件:libss_mpi_audio.a

【注意】

  • 必须创建通道后才可能获取码流,否则直接返回失败,如果在获取码流过程中销毁通道则会立刻返回失败。
  • milli_sec的值必须大于等于-1,等于-1时采用阻塞模式获取数据,等于0时采用非阻塞模式获取数据,大于0时,阻塞milli_sec毫秒后,没有数据则返回超时并报错。
  • 直接获取AI原始音频数据的方法

    创建一路AENC通道,编码协议类型设置为OT_PT_LPCM,绑定AI通道后,从此AENC通道获取的音频数据即AI原始数据。

【举例】

请参见ss_mpi_aenc_create_chn的举例。

【相关主题】

无

ss_mpi_aenc_release_stream

【描述】

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

【语法】

td_s32 ss_mpi_aenc_release_stream(ot_aenc_chn aenc_chn, const ot_audio_stream *stream);

【参数】

参数名称

描述

输入/输出

aenc_chn

通道号。

取值范围:[0, OT_AENC_MAX_CHN_NUM)

输入

stream

获取的码流指针。

输入

【返回值】

返回值

描述

0

成功。

非0

失败,其值为错误码。

【需求】

  • 头文件:ot_common_aio.h、ot_common_aenc.h、ss_mpi_audio.h
  • 库文件:libss_mpi_audio.a、libvoice_engine.a

【注意】

  • 码流最好能够在使用完之后立即释放,如果不及时释放,会导致编码过程阻塞。
  • 释放的码流必须是从该通道获取的码流,不得对码流信息结构体进行任何修改,否则会导致码流不能释放,使此码流buffer丢失,甚至导致程序异常。
  • 释放码流时必须保证通道已经被创建,否则直接返回失败,如果在释放码流过程中销毁通道则会立刻返回失败。

【举例】

请参见ss_mpi_aenc_create_chn的举例。

【相关主题】

无

ss_mpi_aenc_get_fd

【描述】

获取音频编码通道号对应的设备文件句柄。

【语法】

td_s32 ss_mpi_aenc_get_fd(ot_aenc_chn aenc_chn);

【参数】

参数名称

描述

输入/输出

aenc_chn

AENC通道号。

取值范围:[0, OT_AENC_MAX_CHN_NUM)

输入

【返回值】

返回值

描述

正数值

有效返回值。

非正数值

无效返回值。

【需求】

  • 头文件:ot_common_aio.h、ot_common_aenc.h、ss_mpi_audio.h
  • 库文件:libss_mpi_audio.a

【注意】

无。

ss_mpi_aenc_register_encoder

【描述】

注册编码器。

【语法】

td_s32 ss_mpi_aenc_register_encoder(td_s32 *handle, const ot_aenc_encoder *encoder);

【参数】

参数名称

描述

输入/输出

handle

注册句柄。

输出

encoder

编码器属性结构体。

输入

【返回值】

返回值

描述

0

成功。

非0

失败,其值为错误码。

【需求】

  • 头文件:ot_common_aenc.h、ss_mpi_audio.h
  • 库文件:libss_mpi_audio.a

【注意】

  • 用户通过传入编码器属性结构体,向AENC模块注册一个编码器,并返回注册句柄,用户可以最后通过注册句柄来注销该编码器。
  • AENC模块最大可注册20个编码器,且自身已注册LPCM、G711.a、G711.u、G726、ADPCM五个编码器。
  • 同一种编码协议不允许重复注册编码器,例如假如已注册G726编码器,不允许另外再注册一个G726编码器。

【举例】

无。

ss_mpi_aenc_unregister_encoder

【描述】

注销编码器。

【语法】

td_s32 ss_mpi_aenc_unregister_encoder(td_s32 handle);

【参数】

参数名称

描述

输入/输出

handle

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

输入

【返回值】

返回值

描述

0

成功。

非0

失败,其值为错误码。

【需求】

  • 头文件:ot_common_aenc.h、ss_mpi_audio.h
  • 库文件:libss_mpi_audio.a

【注意】

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

【举例】

无。

ss_mpi_aenc_get_stream_buf_info

【描述】

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

【语法】

td_s32 ss_mpi_aenc_get_stream_buf_info(ot_aenc_chn aenc_chn, ot_phys_addr_t *phys_addr, td_u32 *size);

【参数】

参数名称

描述

输入/输出

aenc_chn

音频编码通道号。

取值范围:[0, OT_AENC_MAX_CHN_NUM)

输入

phys_addr

音频码流buffer的物理地址。

输出

size

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

输出

【返回值】

返回值

描述

0

成功。

非0

失败,其值为错误码。

【需求】

  • 头文件:ot_common_aenc.h、ss_mpi_audio.h
  • 库文件:libss_mpi_audio.a

【注意】

无。

【相关主题】

无。

ss_mpi_aenc_set_mute

【描述】

设置音频编码通道静音状态。

【语法】

td_s32 ss_mpi_aenc_set_mute(ot_aenc_chn aenc_chn, td_bool enable);

【参数】

参数名称

描述

输入/输出

aenc_chn

音频编码通道号。

取值范围:[0, OT_AENC_MAX_CHN_NUM)

输入

enable

音频编码通道是否启用静音。

TD_TRUE:启用静音功能;

TD_FALSE:关闭静音功能。

输入

【返回值】

返回值

描述

0

成功。

非0

失败,其值为错误码。

【需求】

  • 头文件:ot_common_aenc.h、ss_mpi_audio.h
  • 库文件:libss_mpi_audio.a

【注意】

无。

【相关主题】

无。

ss_mpi_aenc_get_mute

【描述】

获取音频编码通道静音状态。

【语法】

td_s32 ss_mpi_aenc_get_mute(ot_aenc_chn aenc_chn, td_bool *enable);

【参数】

参数名称

描述

输入/输出

aenc_chn

音频编码通道号。

取值范围:[0, OT_AENC_MAX_CHN_NUM)

输入

enable

音频编码通道静音状态指针。

输出

【返回值】

返回值

描述

0

成功。

非0

失败,其值为错误码。

【需求】

  • 头文件:ot_common_aenc.h、ss_mpi_audio.h
  • 库文件:libss_mpi_audio.a

【注意】

无。

【相关主题】

无。

ss_mpi_aenc_clr_chn_buf

【描述】

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

【语法】

td_s32 ss_mpi_aenc_clr_chn_buf(ot_aenc_chn aenc_chn);

【参数】

参数名称

描述

输入/输出

aenc_chn

通道号。

取值范围:[0, OT_AENC_MAX_CHN_NUM)

输入

【返回值】

返回值

描述

0

成功。

非0

失败,其值为错误码。

【需求】

  • 头文件:ot_common_aenc.h、ss_mpi_audio.h
  • 库文件:libss_mpi_audio.a

【注意】

  • 要求编码通道已经被创建,如果通道未被创建则返回通道不存在错误码。
  • 使用该接口会同时清除未编码的音频帧和已编码的音频流缓存。

【相关主题】

无。

音频解码

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

该功能模块提供以下MPI:

ss_mpi_adec_create_chn

【描述】

创建音频解码通道。

【语法】

td_s32 ss_mpi_adec_create_chn(ot_adec_chn adec_chn, const ot_adec_chn_attr *attr);

【参数】

参数名称

描述

输入/输出

adec_chn

通道号。

取值范围:[0, OT_ADEC_MAX_CHN_NUM)

输入

attr

通道属性指针。

输入

【返回值】

返回值

描述

0

成功。

非0

失败,其值为错误码。

【需求】

  • 头文件:ot_common_aio.h、ot_common_adec.h、ss_mpi_audio.h
  • 库文件:libss_mpi_audio.a、libvoice_engine.a

【注意】

  • 协议类型指定了该通道的解码协议,具体内容请见音频编解码协议。
  • 音频解码的部分属性需要与输出设备属性相匹配,例如采样率、帧点数等。
  • buffer大小以帧为单位,取值范围是[2, OT_MAX_AUDIO_FRAME_NUM],建议配置为10以上,过小的buffer配置可能导致丢帧等异常。
  • 在通道未创建前(或销毁后)才能使用此接口,如果通道已经被创建,则返回通道已经创建。

【举例】

td_s32 ret;
ot_adec_chn_attr adec_attr;
ot_adec_attr_adpcm adpcm_attr;
ot_adec_chn ad_chn = 0;
ot_audio_stream audio_stream;
ot_audio_dev ao_dev = 0;
ot_ao_chn ao_chn = 0;
ot_mpp_chn src_chn;
ot_mpp_chn dest_chn;

adec_attr.type = OT_PT_ADPCMA;
adec_attr.buf_size = 10;
adec_attr.mode = OT_ADEC_MODE_STREAM;
adec_attr.value = &adpcm_attr;
adpcm_attr.adpcm_type = OT_ADPCM_TYPE_DVI4;

/* create adec chn */
ret = ss_mpi_adec_create_chn(ad_chn, &adec_attr);
if (ret != TD_SUCCESS) {
    printf("create adec chn %d err:0x%x\n", ad_chn, ret);
    return ret;
}

/* bind ADEC to AO channel */
src_chn.mod_id = OT_ID_ADEC;
src_chn.dev_id = 0;
src_chn.chn_id = ad_chn ;
dest_chn.mod_id  = OT_ID_AO;
dest_chn.dev_id = ao_dev;
dest_chn.chn_id = ao_chn;

ret = ss_mpi_sys_bind(&src_chn, &dest_chn);
if (ret != TD_SUCCESS) {
    printf(“bind adec chn %d to ao(%d, %d) error:0x%x\n”, ad_chn, ao_dev, ao_chn, ret);
    return ret;
}

/* get audio stream from network or file */

/* send audio stream to adec chn */
ret = ss_mpi_adec_send_stream(ad_chn, &audio_stream);
if (ret != TD_SUCCESS) {
    printf("send stream to adec fail\n");
    return ret;
}

/* destroy adec chn */
ret = ss_mpi_adec_destroy_chn(ad_chn);
if (ret != TD_SUCCESS) {
    return ret;
}

ss_mpi_adec_destroy_chn

【描述】

销毁音频解码通道。

【语法】

td_s32 ss_mpi_adec_destroy_chn(ot_adec_chn adec_chn);

【参数】

参数名称

描述

输入/输出

adec_chn

通道号。

取值范围:[0, OT_ADEC_MAX_CHN_NUM)。

输入

【返回值】

返回值

描述

0

成功。

非0

失败,其值为错误码。

【需求】

  • 头文件:ot_common_aio.h、ot_common_adec.h、ss_mpi_audio.h
  • 库文件:libss_mpi_audio.a、libvoice_engine.a

【注意】

  • 通道未创建的情况下调用此接口会返回成功。
  • 如果正在获取/释放码流或者发送帧,销毁该通道则这些操作都会立即返回失败。

【举例】

请参见ss_mpi_adec_create_chn的举例。

【相关主题】

无。

ss_mpi_adec_send_stream

【描述】

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

【语法】

td_s32 ss_mpi_adec_send_stream(ot_adec_chn adec_chn, const ot_audio_stream *stream, td_bool block);

【参数】

参数名称

描述

输入/输出

adec_chn

通道号。

取值范围:[0, OT_ADEC_MAX_CHN_NUM)

输入

stream

音频码流。

输入

block

阻塞标识。

TD_TRUE:阻塞。

TD_FALSE:非阻塞。

输入

【返回值】

返回值

描述

0

成功。

非0

失败,其值为错误码。

【需求】

  • 头文件:ot_common_aio.h、ot_common_adec.h、ss_mpi_audio.h
  • 库文件:libss_mpi_audio.a、libvoice_engine.a

【注意】

  • 创建解码通道时可以指定解码方式为pack方式或stream方式。

    • pack方式用于确定码流包为一帧的情况下,比如从AENC直接获取的码流,从文件读取确切知道一帧边界(语音编码码流长度固定,很容易确定边界)的码流,效率较高。
    • stream方式用于不确定码流包为一帧的情况下,效率较低,且可能会有延迟。
  • LPCM解码只支持pack方式;其他音频格式的解码两种方式都支持。

  • 发送数据时必须保证通道已经被创建,否则直接返回失败,如果在送数据过程中销毁通道则会立刻返回失败。
  • 支持阻塞或非阻塞方式发送码流。
  • 当阻塞方式发送码流时,如果用于缓存解码后的音频帧的Buffer满,则此接口调用会被阻塞,直至解码后的音频帧数据被取走,或ADEC通道被销毁。
  • 确保发送给ADEC通道的码流数据的正确性,否则可能引起解码器异常退出。

【举例】

请参见ss_mpi_adec_create_chn的举例。

【相关主题】

无。

ss_mpi_adec_clr_chn_buf

【描述】

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

【语法】

td_s32 ss_mpi_adec_clr_chn_buf(ot_adec_chn adec_chn);

【参数】

参数名称

描述

输入/输出

adec_chn

通道号。

取值范围:[0, OT_ADEC_MAX_CHN_NUM)。

输入

【返回值】

返回值

描述

0

成功。

非0

失败,其值为错误码。

【需求】

  • 头文件:ot_common_aio.h、ot_common_adec.h、ss_mpi_audio.h
  • 库文件:libss_mpi_audio.a

【注意】

  • 要求解码通道已经被创建,如果通道未被创建则返回通道不存在错误码。
  • 使用本接口时,不建议使用stream方式解码。使用stream方式解码进行清除缓存操作时,用户需要确保清除完缓存后,发送给解码器的数据必须是完整的一帧码流,否则可能导致解码器不能正常工作。
  • 无论是否使用stream方式解码,都要确保送数据解码的操作和清除缓存的操作之间的同步。

【举例】

无。

【相关主题】

无。

ss_mpi_adec_register_decoder

【描述】

注册解码器。

【语法】

td_s32 ss_mpi_adec_register_decoder(td_s32 *handle, const ot_adec_decoder *decoder);

【参数】

参数名称

描述

输入/输出

handle

注册句柄。

输出

decoder

解码器属性结构体。

输入

【返回值】

返回值

描述

0

成功。

非0

失败,其值为错误码。

【需求】

  • 头文件:ot_common_adec.h、ss_mpi_audio.h
  • 库文件:libss_mpi_audio.a

【注意】

  • 用户通过传入解码器属性结构体,向ADEC模块注册一个解码器,并返回注册句柄,用户可以最后通过注册句柄来注销该解码器。
  • ADEC模块最大可注册20个解码器,且自身已注册LPCM、G711a、G711u、G726、ADPCM五个解码器。
  • 同一种解码协议不允许重复注册解码器,例如假如已注册G726解码器,不允许另外再注册一个G726解码器。

【举例】

无。

【相关主题】

无

ss_mpi_adec_unregister_decoder

【描述】

注销解码器。

【语法】

td_s32 ss_mpi_adec_unregister_decoder(td_s32 handle);

【参数】

参数名称

描述

输入/输出

handle

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

输入

【返回值】

返回值

描述

0

成功。

非0

失败,其值为错误码。

【需求】

  • 头文件:ot_common_adec.h、ss_mpi_audio.h
  • 库文件:libss_mpi_audio.a

【注意】

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

【举例】

无

【相关主题】

无

ss_mpi_adec_get_frame

【描述】

获取音频解码帧数据。

【语法】

td_s32 ss_mpi_adec_get_frame(ot_adec_chn adec_chn, ot_audio_frame_info *frame_info, td_bool block);

【参数】

参数名称

描述

输入/输出

adec_chn

音频解码通道。

输入

frame_info

音频帧数据结构体。

输出

block

是否以阻塞方式获取。

输入

【返回值】

返回值

描述

0

成功。

非0

失败,其值为错误码。

【需求】

  • 头文件:ot_common_adec.h、ss_mpi_audio.h
  • 库文件:libss_mpi_audio.a

【注意】

  • 必须在ADEC通道创建之后调用。
  • 使用本接口获取解码帧数据时,建议发送码流时按帧发送。
  • 使用本接口获取音频帧数据时,如果发送码流按流发送,请务必保证获取解码帧数据的及时性,否则会有异常。
  • 使用本接口获取音频数据时,请解除ADEC与AO的绑定关系,否则获取到的帧是不连续的。

【举例】

无。

【相关主题】

无。

ss_mpi_adec_release_frame

【描述】

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

【语法】

td_s32 ss_mpi_adec_release_frame(ot_adec_chn adec_chn, const ot_audio_frame_info *frame_info);

【参数】

参数名称

描述

输入/输出

adec_chn

音频解码通道。

输入

frame_info

音频帧数据结构体。

输入

【返回值】

返回值

描述

0

成功。

非0

失败,其值为错误码。

【需求】

  • 头文件:ot_common_adec.h、ss_mpi_audio.h
  • 库文件:libss_mpi_audio.a

【注意】

【举例】

无。

【相关主题】

无。

ss_mpi_adec_send_end_of_stream

【描述】

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

【语法】

td_s32 ss_mpi_adec_send_end_of_stream(ot_adec_chn adec_chn, td_bool instant);

【参数】

参数名称

描述

输入/输出

adec_chn

解码通道号。

输入

instant

是否立即清除解码器内部的缓存数据。

TD_FALSE:延时清除。不会立即清除解码器内部的缓存数据,解码会继续进行,直到剩余buffer不足一帧数据时进行清除操作。

TD_TRUE:立即清除解码器内部缓存数据。

输入

【返回值】

返回值

描述

0

清除码流buffer成功。

非0

返回清除码流buffer失败的错误码。

【需求】

  • 头文件:ss_mpi_audio.h
  • 库文件:libss_mpi_audio.a

【注意】

无

【举例】

无

ss_mpi_adec_query_chn_status

【描述】

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

【语法】

td_s32 ss_mpi_adec_query_chn_status(ot_adec_chn adec_chn, ot_adec_chn_state *buf_status);

【参数】

参数名称

描述

输入/输出

adec_chn

ADEC通道号。

输入

buf_status

缓存状态结构体指针。

输出

【返回值】

返回值

描述

0

成功。

非0

失败,其值为错误码。

【需求】

  • 头文件:ot_common_adec.h、ss_mpi_audio.h
  • 库文件:libss_mpi_audio.a

【注意】

  • 在ADEC通道成功启用后再调用此接口。
  • 查询解码码流结束状态时,此接口还应该与ss_mpi_adec_send_end_of_stream接口配合使用,否则查询到的码流结束状态可能会不正确。

【举例】

无

ss_mpi_adec_get_frame_info

【描述】

获取音频解码帧信息。

【语法】

td_s32 ss_mpi_adec_get_frame_info(ot_adec_chn adec_chn, td_void *decode_frame_info);

【参数】

参数名称

描述

输入/输出

adec_chn

音频解码通道。

输入

decode_frame_info

音频解码帧信息指针。

输出

【返回值】

返回值

描述

0

成功。

非0

失败,其值为错误码。

【需求】

  • 头文件:ot_common_adec.h、ss_mpi_audio.h
  • 库文件:libss_mpi_audio.a

【注意】

  • 必须在ADEC通道创建之后调用。
  • decode_frame_info须由调用者保证地址和长度有效,否则会出现访问异常。
  • 对于使用LPCM、G711a、G711u、G726、ADPCM内置解码器的解码通道,调用本接口无效,默认返回成功。
  • 对于使用外置解码器的解码通道,本接口内部会调用外置解码器中获取音频帧信息的函数指针并返回结果,详细内容请参见《音频组件API参考》。

【举例】

无

内置Audio Codec

内置Audio Codec主要通过ioctl提供对硬件设备的操作。在提供的ioctl的cmd中,有些cmd用户可以不需要调用,直接使用模块加载时的默认配置即可。ioctl调用实现的是对内置Audio Codec寄存器的读写。acodec驱动加载后需要一定时间才能完成初始化,在未完成初始化前调用除OT_ACODEC_QUERY_STATUS外的其余接口会报错,可通过该接口查询是否已初始化完毕。

内置Audio Codec标准功能cmd

OT_ACODEC_SOFT_RESET_CTRL

【描述】

将Codec恢复为默认设置。

【语法】

int ioctl (int fd, OT_ACODEC_SOFT_RESET_CTRL);

【参数】

参数名称

描述

输入/输出

fd

Audio Codec设备文件描述符

输入

OT_ACODEC_SOFT_RESET_CTRL

ioctl号

输入

【返回值】

返回值

描述

0

成功

非0

失败

【需求】

头文件:ot_acodec.h

【注意】

无。

【举例】

if (ioctl(acodec_fd, OT_ACODEC_SOFT_RESET_CTRL)) {
    printf("ioctl err!\n");
}
OT_ACODEC_SET_I2S1_FS

【描述】

设置I2S1接口采样率。

【语法】

int ioctl (int fd, OT_ACODEC_SET_I2S1_FS, unsigned int *arg);

【参数】

参数名称

描述

输入/输出

fd

Audio Codec设备文件描述符

输入

OT_ACODEC_SET_I2S1_FS

ioctl号

输入

arg

无符号整型指针

输入

【返回值】

返回值

描述

0

成功

非0

失败

【需求】

头文件:ot_acodec.h

【注意】

  • 必须在对接ACODEC的AI或AO设备使能之后调用,否则会报错。
  • 设置的采样率必须与对接ACODEC的AI或AO设备采样率一致,否则会报错,且ACODEC无法正常工作。

【举例】

ot_acodec_fs i2s_fs_sel;
i2s_fs_sel = OT_ACODEC_FS_48000;
if (ioctl(acodec_fd, OT_ACODEC_SET_I2S1_FS, &i2s_fs_sel)) {
    printf("ioctl err!\n");
}
OT_ACODEC_SET_INPUT_VOLUME

【描述】

输入总音量控制。此接口依据优先调整模拟增益的原则,把用户期望设置的总增益分解成模拟增益和数字增益,分别配置到模拟增益控制寄存器和数字增益控制寄存器。

【语法】

int ioctl (int fd, OT_ACODEC_SET_INPUT_VOLUME, int *arg);

【参数】

参数名称

描述

输入/输出

fd

Audio Codec设备文件描述符

输入

OT_ACODEC_SET_INPUT_VOLUME

ioctl号

输入

arg

有符号整型指针

输入

【返回值】

返回值

描述

0

成功

非0

失败

【需求】

头文件:ot_acodec.h

【注意】

  • Hi3519DV500/Hi3516CV610输入音量范围为[-78, 80],包括模拟增益和数字增益,赋值越大,音量越大。赋值为80时,音量最大,为80dB,赋值为-78时,音量最小,为静音。调节时左右声道一起生效。建议调节范围限制为[0, 50]中的偶数值,此范围只调节模拟增益,这样引入的噪声最小,能够更好的保证声音质量。
  • 当使用了RecordVQE的HDR功能,且HDR功能配置为自动模式时,HDR算法会根据输入音量的大小动态修改acodec的模拟增益。

【举例】

int volume;
volume = 20;
if (ioctl(acodec_fd, OT_ACODEC_SET_INPUT_VOLUME, &volume)) {
    printf("ioctl err!\n");
}
OT_ACODEC_GET_INPUT_VOLUME

【描述】

获取输入总音量。

【语法】

int ioctl (int fd, OT_ACODEC_GET_INPUT_VOLUME, int *arg);

【参数】

参数名称

描述

输入/输出

fd

Audio Codec设备文件描述符

输入

OT_ACODEC_GET_INPUT_VOLUME

ioctl号

输入

arg

有符号整型指针

输出

【返回值】

返回值

描述

0

成功

非0

失败

【需求】

头文件:ot_acodec.h

【注意】

该接口须与OT_ACODEC_SET_INPUT_VOLUME接口搭配使用,不支持获取通过其它音量设置接口配置之后的音量。

【举例】

int volume;
if (ioctl(acodec_fd, OT_ACODEC_GET_INPUT_VOLUME, &volume)) {
    printf("ioctl err!\n");
}
OT_ACODEC_SET_OUTPUT_VOLUME

【描述】

输出总音量控制。

【语法】

int ioctl (int fd, OT_ACODEC_SET_OUTPUT_VOLUME, int *arg);

【参数】

参数名称

描述

输入/输出

fd

Audio Codec设备文件描述符

输入

OT_ACODEC_SET_OUTPUT_VOLUME

ioctl号

输入

arg

有符号整型指针

输入

【返回值】

返回值

描述

0

成功

非0

失败

【需求】

头文件:ot_acodec.h

【注意】

输出音量范围为[-121, 6],赋值越大,音量越大。赋值为6时,音量最大,为6dB,赋值为-121时,音量最小,为静音。调节时左右声道一起生效。此接口调整的为数字增益,建议不要赋值太大,以免引入噪声。

【举例】

int volume;
volume = 0;
if (ioctl(acodec_fd, OT_ACODEC_SET_OUTPUT_VOLUME, &volume)) {
    printf("ioctl err!\n");
}
OT_ACODEC_GET_OUTPUT_VOLUME

【描述】

获取输出总音量。

【语法】

int ioctl (int fd, OT_ACODEC_GET_OUTPUT_VOLUME, int *arg);

【参数】

参数名称

描述

输入/输出

fd

Audio Codec设备文件描述符

输入

OT_ACODEC_GET_OUTPUT_VOLUME

ioctl号

输入

arg

有符号整型指针

输出

【返回值】

返回值

描述

0

成功

非0

失败

【需求】

头文件:ot_acodec.h

【注意】

无。

【举例】

int volume;
if (ioctl(acodec_fd,  OT_ACODEC_GET_OUTPUT_VOLUME, &volume)) {
    printf("ioctl err!\n");
}
OT_ACODEC_SET_MIXER_MIC

【描述】

输入方式选择。

【语法】

int ioctl (int fd, OT_ACODEC_SET_MIXER_MIC, unsigned int *arg);

【参数】

参数名称

描述

输入/输出

fd

Audio Codec设备文件描述符

输入

OT_ACODEC_SET_MIXER_MIC

ioctl号

输入

arg

无符号整型指针

参数指向的值范围:[0, 2],默认选择IN1单端输入。

输入

【返回值】

返回值

描述

0

成功

非0

失败

【需求】

头文件:ot_acodec.h

【注意】

Hi3519DV500/Hi3516CV610的arg取值范围:[0, 2],默认选择IN1单端输入。

【解决方案差异】

解决方案

描述

Hi3519DV500/Hi3516CV610

分为IN0单端输入、IN1单端输入、IN_D差分输入。

IN0单端输入:左声道对应AC_IN0L_P,右声道对应AC_IN0L_N。

IN1单端输入:左声道对应AC_IN1R_P,右声道对应AC_IN1R_N。

IN_D差分输入:左声道对应AC_IN0L_P、AC_IN0L_N;右声道对应AC_IN1R_P、AC_IN1R_N。

【举例】

ot_acodec_mixer mixer_mic_ctrl;
mixer_mic_ctrl = OT_ACODEC_MIXER_IN0;
if (ioctl(acodec_fd, OT_ACODEC_SET_MIXER_MIC, &mixer_mic_ctrl)) {
    printf("ioctl err!\n");
}
OT_ACODEC_SET_GAIN_MICL

【描述】

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

【语法】

int ioctl (int fd, OT_ACODEC_SET_GAIN_MICL, unsigned int *arg);

【参数】

参数名称

描述

输入/输出

fd

Audio Codec设备文件描述符

输入

OT_ACODEC_SET_GAIN_MICL

ioctl号

输入

arg

无符号整型指针

输入

【返回值】

返回值

描述

0

成功

非0

失败

【需求】

头文件:ot_acodec.h

【注意】

  • 在使用无源音频信号输入时,需适当的增大模拟增益。
  • Hi3519DV500/Hi3516CV610的模拟增益范围为[0, 15],其中0到15按2db递增,0对应0db,15对应最大增益30db。

【举例】

unsigned int gain_mic;
gain_mic = 0xa;
if (ioctl(acodec_fd, OT_ACODEC_SET_GAIN_MICL, &gain_mic)) {
    printf("ioctl err!\n");
}
OT_ACODEC_SET_GAIN_MICR

【描述】

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

【语法】

int ioctl (int fd, OT_ACODEC_SET_GAIN_MICR, unsigned int *arg);

【参数】

参数名称

描述

输入/输出

fd

Audio Codec设备文件描述符

输入

OT_ACODEC_SET_GAIN_MICR

ioctl号

输入

arg

无符号整型指针

输入

【返回值】

返回值

描述

0

成功

非0

失败

【需求】

头文件:ot_acodec.h

【注意】

  • 在使用无源音频信号输入时,需适当的增大模拟增益。
  • Hi3519DV500/Hi3516CV610的模拟增益范围为[0, 15],其中0到15按2db递增,0对应0db,15对应最大增益30db。

【举例】

unsigned int gain_mic;
gain_mic = 0x0;
if (ioctl(acodec_fd, OT_ACODEC_GET_GAIN_MICR, &gain_mic)) {
    printf("ioctl err!\n");
}
OT_ACODEC_SET_DACL_VOLUME

【描述】

左声道输出音量控制。

【语法】

int ioctl (int fd, OT_ACODEC_SET_DACL_VOLUME, ot_acodec_volume_ctrl *arg);

【参数】

参数名称

描述

输入/输出

fd

Audio Codec设备文件描述符

输入

OT_ACODEC_SET_DACL_VOLUME

ioctl号

输入

arg

ot_acodec_volume_ctrl 结构体指针

输入

【返回值】

返回值

描述

0

成功

非0

失败

【需求】

头文件:ot_acodec.h

【注意】

左声道输出音量范围:[0, 127],步长为1dB,赋值越大,音量越小。赋值为0时,音量最大,为6db,赋值为127时,音量最小,为静音。

【举例】

ot_acodec_volume_ctrl volume_ctrl;
volume_ctrl.volume_ctrl_mute = 0x0;
volume_ctrl.volume_ctrl = 0x06;
if (ioctl(acodec_fd, OT_ACODEC_SET_DACL_VOLUME, &volume_ctrl)) {
    printf("ioctl err!\n");
}
OT_ACODEC_SET_DACR_VOLUME

【描述】

右声道输出音量控制。

【语法】

int ioctl (int fd, OT_ACODEC_SET_DACR_VOLUME, ot_acodec_volume_ctrl *arg);

【参数】

参数名称

描述

输入/输出

fd

Audio Codec设备文件描述符

输入

OT_ACODEC_SET_DACL_VOLUME

ioctl号

输入

arg

ot_acodec_volume_ctrl结构体指针

输入

【返回值】

返回值

描述

0

成功

非0

失败

【需求】

头文件:ot_acodec.h

【注意】

右声道输出音量范围:[0, 127],步长为1dB,赋值越大,音量越小。赋值为0时,音量最大,为6db,赋值为127时,音量最小,为静音。

【举例】

ot_acodec_volume_ctrl volume_ctrl;
volume_ctrl.volume_ctrl_mute = 0x0;
volume_ctrl.volume_ctrl = 0x06;
if (ioctl(acodec_fd, OT_ACODEC_SET_DACR_VOLUME, &volume_ctrl)) {
    printf("ioctl err!\n");
}
OT_ACODEC_SET_ADCL_VOLUME

【描述】

左声道输入音量控制。

【语法】

int ioctl (int fd, OT_ACODEC_SET_ADCL_VOLUME, ot_acodec_volume_ctrl *arg);

【参数】

参数名称

描述

输入/输出

fd

Audio Codec设备文件描述符

输入

OT_ACODEC_SET_ADCL_VOLUME

ioctl号

输入

arg

ot_acodec_volume_ctrl结构体指针

输入

【返回值】

返回值

描述

0

成功

非0

失败

【需求】

头文件:ot_acodec.h

【注意】

左声道输入音量范围:[0, 127],赋值越大,音量越小。赋值为0时,音量最大,为30db,赋值为127时,音量最小,为-97db。

【举例】

ot_acodec_volume_ctrl volume_ctrl;
volume_ctrl.volume_ctrl_mute = 0x0;
volume_ctrl.volume_ctrl = 0x06;
if (ioctl(acodec_fd, OT_ACODEC_SET_ADCL_VOLUME, &volume_ctrl)) {
    printf("ioctl err!\n");
}
OT_ACODEC_SET_ADCR_VOLUME

【描述】

右声道输入音量控制。

【语法】

int ioctl (int fd, OT_ACODEC_SET_ADCR_VOLUME, ot_acodec_volume_ctrl *arg);

【参数】

参数名称

描述

输入/输出

fd

Audio Codec设备文件描述符

输入

OT_ACODEC_SET_ADCR_VOLUME

ioctl号

输入

arg

ot_acodec_volume_ctrl结构体指针

输入

【返回值】

返回值

描述

0

成功

非0

失败

【需求】

头文件:ot_acodec.h

【注意】

右声道输入音量范围:[0, 127],赋值越大,音量越小。赋值为0时,音量最大,为30db,赋值为127时,音量最小,为-97db。

【举例】

ot_acodec_volume_ctrl volume_ctrl;
volume_ctrl.volume_ctrl_mute = 0x0;
volume_ctrl.volume_ctrl = 0x06;
if (ioctl(acodec_fd, OT_ACODEC_SET_ADCR_VOLUME, &volume_ctrl)) {
    printf("ioctl err!\n");
}
OT_ACODEC_SET_MICL_MUTE

【描述】

左声道输入静音控制。

【语法】

int ioctl (int fd, OT_ACODEC_SET_MICL_MUTE, unsigned int *arg);

【参数】

参数名称

描述

输入/输出

fd

Audio Codec设备文件描述符

输入

OT_ACODEC_SET_MICL_MUTE

ioctl号

输入

arg

无符号整型指针

参数指向的值范围:[0, 1]

  • 0代表解除静音;
  • 1代表静音。

输入

【返回值】

返回值

描述

0

成功

非0

失败

【需求】

头文件:ot_acodec.h

【注意】

无。

【举例】

unsigned int mute_ctrl;
mute_ctrl = 0x1;
if (ioctl(acodec_fd, OT_ACODEC_SET_MICL_MUTE, &mute_ctrl)) {
    printf("ioctl err!\n");
}
OT_ACODEC_SET_MICR_MUTE

【描述】

右声道输入静音控制。

【语法】

int ioctl (int fd, OT_ACODEC_SET_MICR_MUTE, unsigned int *arg);

【参数】

参数名称

描述

输入/输出

fd

Audio Codec设备文件描述符

输入

OT_ACODEC_SET_MICR_MUTE

ioctl号

输入

arg

无符号整型指针

参数指向的值范围:[0, 1]

  • 0代表解除静音;
  • 1代表静音。

输入

【返回值】

返回值

描述

0

成功

非0

失败

【需求】

头文件:ot_acodec.h

【注意】

无。

【举例】

unsigned int mute_ctrl;
mute_ctrl = 0x1;
if (ioctl(acodec_fd, OT_ACODEC_SET_MICR_MUTE, &mute_ctrl)) {
    printf("ioctl err!\n");
}
OT_ACODEC_SET_DACL_MUTE

【描述】

左声道输出静音控制。

【语法】

int ioctl (int fd, OT_ACODEC_SET_DACL_MUTE, unsigned int *arg);

【参数】

参数名称

描述

输入/输出

fd

Audio Codec设备文件描述符

输入

OT_ACODEC_SET_DACL_MUTE

ioctl号

输入

arg

无符号整型指针

参数指向的值范围:[0, 1]

  • 0代表解除静音;
  • 1代表静音。

输入

【返回值】

返回值

描述

0

成功

非0

失败

【需求】

头文件:ot_acodec.h

【注意】

无。

【举例】

unsigned int mute_ctrl;
mute_ctrl = 0x1;
if (ioctl(acodec_fd, OT_ACODEC_SET_DACL_MUTE, &mute_ctrl)) {
    printf("ioctl err!\n");
}
OT_ACODEC_SET_DACR_MUTE

【描述】

右声道输出静音控制。

【语法】

int ioctl (int fd, OT_ACODEC_SET_DACR_MUTE, unsigned int *arg);

【参数】

参数名称

描述

输入/输出

fd

Audio Codec设备文件描述符

输入

OT_ACODEC_SET_DACR_MUTE

ioctl号

输入

arg

无符号整型指针

参数指向的值范围:[0, 1]

  • 0代表解除静音;
  • 1代表静音。

输入

【返回值】

返回值

描述

0

成功

非0

失败

【需求】

头文件:ot_acodec.h

【注意】

无。

【举例】

unsigned int  mute_ctrl;
mute_ctrl = 0x1;
if (ioctl(acodec_fd, OT_ACODEC_SET_DACR_MUTE, &mute_ctrl)) {
    printf("ioctl err!\n");
}
OT_ACODEC_DAC_SOFT_MUTE

【描述】

输出软静音控制。

【语法】

int ioctl (int fd, OT_ACODEC_DAC_SOFT_MUTE,unsigned int  *arg);

【参数】

参数名称

描述

输入/输出

fd

Audio Codec设备文件描述符

输入

OT_ACODEC_DAC_SOFT_MUTE

ioctl号

输入

arg

无符号整型指针

参数指向的值范围:[0, 1]

  • 0代表去使能软静音;
  • 1代表使能软静音。

输入

【返回值】

返回值

描述

0

成功

非0

失败

【需求】

头文件:ot_acodec.h

【注意】

无。

【举例】

unsigned int  soft_mute_ctrl;
soft_mute_ctrl = 0x1;
if (ioctl(acodec_fd, OT_ACODEC_DAC_SOFT_MUTE, &soft_mute_ctrl)) {
    printf("ioctl err!\n");
}
OT_ACODEC_DAC_SOFT_UNMUTE

【描述】

输出软撤销静音控制。

【语法】

int ioctl (int fd, OT_ACODEC_DAC_SOFT_UNMUTE,unsigned int *arg);

【参数】

参数名称

描述

输入/输出

fd

Audio Codec设备文件描述符

输入

OT_ACODEC_DAC_SOFT_UNMUTE

ioctl号

输入

arg

无符号整型指针

参数指向的值范围:[0, 1]

  • 0代表去使能软撤销静音;
  • 1代表使能软撤销静音。

输入

【返回值】

返回值

描述

0

成功

非0

失败

【需求】

头文件:ot_acodec.h

【注意】

无。

【举例】

unsigned int  soft_mute_ctrl;
soft_mute_ctrl = 0x1;
if (ioctl(acodec_fd, OT_ACODEC_DAC_SOFT_UNMUTE, &soft_mute_ctrl)) {
    printf("ioctl err!\n");
}
OT_ACODEC_ENABLE_BOOSTL

【描述】

左声道boost模拟增益控制。

【语法】

int ioctl (int fd, OT_ACODEC_ENABLE_BOOSTL,unsigned int *arg);

【参数】

参数名称

描述

输入/输出

fd

Audio Codec设备文件描述符

输入

OT_ACODEC_ENABLE_BOOSTL

ioctl号

输入

arg

无符号整型指针

参数指向的值范围[0, 1],取0时模拟增益增加0db,取1时模拟增益增加20db

输入

【返回值】

返回值

描述

0

成功

非0

失败

【需求】

头文件:ot_acodec.h

【注意】

无。

【举例】

unsigned int  enable_boostl;
enable_boostl = 0x1;
if (ioctl(acodec_fd, OT_ACODEC_ENABLE_BOOSTL, &enable_boostl)) {
    printf("ioctl err!\n");
}
OT_ACODEC_ENABLE_BOOSTR

【描述】

右声道boost模拟增益控制。

【语法】

int ioctl (int fd, OT_ACODEC_ENABLE_BOOSTR,unsigned int *arg);

【参数】

参数名称

描述

输入/输出

fd

Audio Codec设备文件描述符

输入

OT_ACODEC_ENABLE_BOOSTR

ioctl号

输入

arg

无符号整型指针

参数指向的值范围[0, 1],取0时模拟增益增加0db,取1时模拟增益增加20db

输入

【返回值】

返回值

描述

0

成功

非0

失败

【需求】

头文件:ot_acodec.h

【注意】

无。

【举例】

unsigned int  enable_boostr;
enable_boostr = 0x1;
if (ioctl(acodec_fd, OT_ACODEC_ENABLE_BOOSTR, &enable_boostr)) {
    printf("ioctl err!\n");
}
OT_ACODEC_GET_GAIN_MICL

【描述】

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

【语法】

int ioctl (int fd, OT_ACODEC_GET_GAIN_MICL, unsigned int  *arg);

【参数】

参数名称

描述

输入/输出

fd

Audio Codec设备文件描述符

输入

OT_ACODEC_GET_GAIN_MICL

ioctl号

输入

arg

无符号整型指针

输出

【返回值】

返回值

描述

0

成功

非0

失败

【需求】

头文件:ot_acodec.h

【注意】

无。

【举例】

unsigned int gain_mic;
if (ioctl(acodec_fd, OT_ACODEC_GET_GAIN_MICL, &gain_mic)) {
    printf("ioctl err!\n");
}
OT_ACODEC_GET_GAIN_MICR

【描述】

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

【语法】

int ioctl (int fd, OT_ACODEC_GET_GAIN_MICR, unsigned int  *arg);

【参数】

参数名称

描述

输入/输出

fd

Audio Codec设备文件描述符

输入

OT_ACODEC_GET_GAIN_MICR

ioctl号

输入

arg

无符号整型指针

输出

【返回值】

返回值

描述

0

成功

非0

失败

【需求】

头文件:ot_acodec.h

【注意】

无。

【举例】

unsigned int gain_mic;
if (ioctl(acodec_fd, OT_ACODEC_GET_GAIN_MICR, &gain_mic)) {
    printf("ioctl err!\n");
}
OT_ACODEC_GET_DACL_VOLUME

【描述】

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

【语法】

int ioctl (int fd, OT_ACODEC_GET_DACL_VOLUME, ot_acodec_volume_ctrl *arg);

【参数】

参数名称

描述

输入/输出

fd

Audio Codec设备文件描述符

输入

OT_ACODEC_GET_DACL_VOLUME

ioctl号

输入

arg

ot_acodec_volume_ctrl结构体指针

输出

【返回值】

返回值

描述

0

成功

非0

失败

【需求】

头文件:ot_acodec.h

【注意】

无。

【举例】

ot_acodec_volume_ctrl volume_ctrl;
if (ioctl(acodec_fd, OT_ACODEC_GET_DACL_VOLUME, &volume_ctrl)) {
    printf("ioctl err!\n");
}
OT_ACODEC_GET_DACR_VOLUME

【描述】

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

【语法】

int ioctl (int fd, OT_ACODEC_GET_DACR_VOLUME, ot_acodec_volume_ctrl *arg);

【参数】

参数名称

描述

输入/输出

fd

Audio Codec设备文件描述符

输入

OT_ACODEC_GET_DACR_VOLUME

ioctl号

输入

arg

ot_acodec_volume_ctrl结构体指针

输出

【返回值】

返回值

描述

0

成功

非0

失败

【需求】

头文件:ot_acodec.h

【注意】

无。

【举例】

ot_acodec_volume_ctrl volume_ctrl;
if (ioctl(acodec_fd, OT_ACODEC_GET_DACR_VOLUME, &volume_ctrl)) {
    printf("ioctl err!\n");
}
OT_ACODEC_GET_ADCL_VOLUME

【描述】

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

【语法】

int ioctl (int fd, OT_ACODEC_GET_ADCL_VOLUME, ot_acodec_volume_ctrl *arg);

【参数】

参数名称

描述

输入/输出

fd

Audio Codec设备文件描述符

输入

OT_ACODEC_GET_ADCL_VOLUME

ioctl号

输入

arg

ot_acodec_volume_ctrl结构体指针

输出

【返回值】

返回值

描述

0

成功

非0

失败

【需求】

头文件:ot_acodec.h

【注意】

无。

【举例】

ot_acodec_volume_ctrl volume_ctrl;
if (ioctl(acodec_fd, OT_ACODEC_GET_ADCL_VOLUME, &volume_ctrl)) {
    printf("ioctl err!\n");
}
OT_ACODEC_GET_ADCR_VOLUME

【描述】

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

【语法】

int ioctl (int fd, OT_ACODEC_GET_ADCR_VOLUME,ot_acodec_volume_ctrl *arg);

【参数】

参数名称

描述

输入/输出

fd

Audio Codec设备文件描述符

输入

OT_ACODEC_GET_ADCR_VOLUME

ioctl号

输入

arg

ot_acodec_volume_ctrl结构体指针

输出

【返回值】

返回值

描述

0

成功

非0

失败

【需求】

头文件:ot_acodec.h

【注意】

无。

【举例】

ot_acodec_volume_ctrl volume_ctrl;
if (ioctl(acodec_fd, OT_ACODEC_GET_ADCR_VOLUME, &volume_ctrl)) {
    printf("ioctl err!\n");
}
OT_ACODEC_SET_PD_DACL

【描述】

左声道输出的下电控制。

【语法】

int ioctl (int fd, OT_ACODEC_SET_PD_DACL,unsigned int *arg);

【参数】

参数名称

描述

输入/输出

fd

Audio Codec设备文件描述符

输入

OT_ACODEC_SET_PD_DACL

ioctl号

输入

arg

无符号整型指针

参数指向的值范围:[0, 1]

  • 0代表不下电;
  • 1代表下电。

输入

【返回值】

返回值

描述

0

成功

非0

失败

【需求】

头文件:ot_acodec.h

【注意】

不使用DAC时,可以调用此接口,将DACL下电。

【举例】

unsigned int pd_ctrl;
pd_ctrl = 0x01;
if (ioctl(acodec_fd, OT_ACODEC_SET_PD_DACL, &pd_ctrl)) {
    printf("ioctl err!\n");
}
OT_ACODEC_SET_PD_DACR

【描述】

右声道输出的下电控制。

【语法】

int ioctl (int fd, OT_ACODEC_SET_PD_DACR, unsigned int *arg);

【参数】

参数名称

描述

输入/输出

fd

Audio Codec设备文件描述符

输入

OT_ACODEC_SET_PD_DACR

ioctl号

输入

arg

无符号整型指针

参数指向的值范围:[0, 1]

  • 0代表不下电;
  • 1代表下电。

输入

【返回值】

返回值

描述

0

成功

非0

失败

【需求】

头文件:ot_acodec.h

【注意】

不使用DAC时,可以调用此接口,将DACR下电。

【举例】

unsigned int pd_ctrl;
pd_ctrl = 0x01
if (ioctl(acodec_fd, OT_ACODEC_SET_PD_DACR, &pd_ctrl)) {
    printf("ioctl err!\n");
}
OT_ACODEC_SET_PD_ADCL

【描述】

左声道输入的下电控制。

【语法】

int ioctl (int fd, OT_ACODEC_SET_PD_ADCL, unsigned int *arg);

【参数】

参数名称

描述

输入/输出

fd

Audio Codec设备文件描述符

输入

OT_ACODEC_SET_PD_ADCL

ioctl号

输入

arg

无符号整型指针

参数指向的值范围:[0, 1]

  • 0代表不下电;
  • 1代表下电。

输入

【返回值】

返回值

描述

0

成功

非0

失败

【需求】

头文件:ot_acodec.h

【注意】

不使用ADC时,可以调用此接口,将ADCL下电。

【举例】

unsigned int pd_ctrl;
pd_ctrl = 0x01;
if (ioctl(acodec_fd, OT_ACODEC_SET_PD_ADCL, &pd_ctrl)) {
    printf("ioctl err!\n");
}
OT_ACODEC_SET_PD_ADCR

【描述】

右声道输入的下电控制。

【语法】

int ioctl (int fd, OT_ACODEC_SET_PD_ADCR, unsigned int *arg);

【参数】

参数名称

描述

输入/输出

fd

Audio Codec设备文件描述符

输入

OT_ACODEC_SET_PD_ADCR

ioctl号

输入

arg

无符号整型指针

参数指向的值范围:[0, 1]

  • 0代表不下电;
  • 1代表下电。

输入

【返回值】

返回值

描述

0

成功

非0

失败

【需求】

头文件:ot_acodec.h

【注意】

不使用ADC时,可以调用此接口,将ADCR下电。

【举例】

unsigned int pd_ctrl;
pd_ctrl = 0x01;
if (ioctl(acodec_fd, OT_ACODEC_SET_PD_ADCR, &pd_ctrl)) {
    printf("ioctl err!\n");
}
OT_ACODEC_SET_PD_LINEINL

【描述】

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

【语法】

int ioctl (int fd, OT_ACODEC_SET_PD_LINEINL, unsigned int *arg);

【参数】

参数名称

描述

输入/输出

fd

Audio Codec设备文件描述符

输入

OT_ACODEC_SET_PD_LINEINL

ioctl号

输入

arg

无符号整型指针

参数指向的值范围:[0, 1]

  • 0代表不下电;
  • 1代表下电。

输入

【返回值】

返回值

描述

0

成功

非0

失败

【需求】

头文件:ot_acodec.h

【注意】

不使用LINEIN输入时,可以调用此接口,将LINEINL下电。

【举例】

unsigned int lineinl_pd_ctrl;
lineinl_pd_ctrl = 0x01;
if (ioctl(acodec_fd, OT_ACODEC_SET_PD_LINEINL, &lineinl_pd_ctrl)) {
    printf("ioctl err!\n");
}
OT_ACODEC_SET_PD_LINEINR

【描述】

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

【语法】

int ioctl (int fd, OT_ACODEC_SET_PD_LINEINR, unsigned int *arg);

【参数】

参数名称

描述

输入/输出

fd

Audio Codec设备文件描述符

输入

OT_ACODEC_SET_PD_LINEINR

ioctl号

输入

arg

无符号整型指针

参数指向的值范围:[0, 1]

  • 0代表不下电;
  • 1代表下电。

输入

【返回值】

返回值

描述

0

成功

非0

失败

【需求】

头文件:ot_acodec.h

【注意】

不使用LINEIN输入时,可以调用此接口,将LINEINR下电。

【举例】

unsigned int lineinr_pd_ctrl;
lineinr_pd_ctrl = 0x01;
if (ioctl(acodec_fd, OT_ACODEC_SET_PD_LINEINR, &lineinr_pd_ctrl)) {
    printf("ioctl err!\n");
}

扩展功能cmd

OT_ACODEC_SELECT_DAC_CLK

【描述】

设置DAC的工作时钟沿。

【语法】

int ioctl (int fd, OT_ACODEC_SELECT_DAC_CLK, unsigned int *arg);

【参数】

参数名称

描述

输入/输出

fd

Audio Codec设备文件描述符

输入

OT_ACODEC_SELECT_DAC_CLK

ioctl号

输入

arg

无符号整型指针

参数指向的值范围:[0, 1]

  • 0代表上升沿工作;
  • 1代表下降沿工作。

输入

【返回值】

返回值

描述

0

成功

非0

失败

【需求】

头文件:ot_acodec.h

【注意】

无。

【举例】

unsigned int clk_select;
clk_select = 0x1;
if (ioctl(acodec_fd, OT_ACODEC_SELECT_DAC_CLK, &clk_select)) {
    printf("ioctl err!\n");
}
OT_ACODEC_SELECT_ADC_CLK

【描述】

设置ADC的工作时钟沿。

【语法】

int ioctl (int fd, OT_ACODEC_SELECT_ADC_CLK, unsigned int *arg);

【参数】

参数名称

描述

输入/输出

fd

Audio Codec设备文件描述符

输入

OT_ACODEC_SELECT_ADC_CLK

ioctl号

输入

arg

无符号整型指针

参数指向的值范围:[0, 1]

  • 0代表上升沿工作;
  • 1代表下降沿工作。

输入

【返回值】

返回值

描述

0

成功

非0

失败

【需求】

头文件:ot_acodec.h

【注意】

无。

【举例】

unsigned int clk_select;
clk_select = 0x1;
if (ioctl(acodec_fd, OT_ACODEC_SELECT_ADC_CLK, &clk_select)) {
    printf("ioctl err!\n");
}
OT_ACODEC_SELECT_ANA_MCLK

【描述】

设置模拟部分和数字部分的工作时钟沿。

【语法】

int ioctl (int fd, OT_ACODEC_SELECT_ANA_MCLK, unsigned int *arg);

【参数】

参数名称

描述

输入/输出

fd

Audio Codec设备文件描述符

输入

OT_ACODEC_SELECT_ANA_MCLK

ioctl号

输入

arg

无符号整型指针

参数指向的值范围:[0, 1]

  • 1代表上升沿工作;
  • 0代表下降沿工作。

输入

【返回值】

返回值

描述

0

成功

非0

失败

【需求】

头文件:ot_acodec.h

【注意】

无。

【举例】

unsigned int clk_select;
clk_select = 0x1;
if (ioctl(acodec_fd, OT_ACODEC_SELECT_ANA_MCLK, &clk_select)) {
    printf("ioctl err!\n");
}
OT_ACODEC_DACL_SELECT_TRACK

【描述】

设置DACL选择左声道或右声道。

【语法】

int ioctl (int fd, OT_ACODEC_DACL_SELECT_TRACK, unsigned int *arg);

【参数】

参数名称

描述

输入/输出

fd

Audio Codec设备文件描述符

输入

OT_ACODEC_DACL_SELECT_TRACK

ioctl号

输入

arg

无符号整型指针

参数指向的值范围:[0, 1]

  • 0代表左声道;
  • 1代表右声道。

输入

【返回值】

返回值

描述

0

成功

非0

失败

【需求】

头文件:ot_acodec.h

【注意】

  • 该接口的作用是控制原始左声道数据的输出音轨设置。当没有调用该接口时,默认选择0,即最终以左声道输出。
  • 相比OT_ACODEC_DACR_SELECT_TRACK,OT_ACODEC_DACL_SELECT_TRACK优先级更高。
  • 当OT_ACODEC_DACL_SELECT_TRACK的入参与OT_ACODEC_DACR_SELECT_TRACK一致时,最终输出的数据仅入参中指定的声道有效,且其数据来源为原始左声道。例如OT_ACODEC_DACL_SELECT_TRACK和OT_ACODEC_DACR_SELECT_TRACK同时选择了1,则最终输出的数据仅右声道有效,且其数据来源于原来的左声道。

【举例】

unsigned int track_select;
track_select = 0x1;
if (ioctl(acodec_fd, OT_ACODEC_DACL_SELECT_TRACK, &track_select)) {
    printf("ioctl err!\n");
}
OT_ACODEC_DACR_SELECT_TRACK

【描述】

设置DACR选择左声道或右声道。

【语法】

int ioctl (int fd, OT_ACODEC_DACR_SELECT_TRACK, unsigned int *arg);

【参数】

参数名称

描述

输入/输出

fd

Audio Codec设备文件描述符

输入

OT_ACODEC_DACR_SELECT_TRACK

ioctl号

输入

arg

无符号整型指针

参数指向的值范围:[0, 1]

  • 0代表左声道;
  • 1代表右声道。

输入

【返回值】

返回值

描述

0

成功

非0

失败

【需求】

头文件:ot_acodec.h

【注意】

  • 该接口的作用是控制原始右声道数据的输出音轨设置。当没有调用该接口时,默认选择1,即最终以右声道输出。
  • 相比OT_ACODEC_DACL_SELECT_TRACK,OT_ACODEC_DACR_SELECT_TRACK的优先级较低。
  • 当zh-cn_topic_0000001370930389.html的入参与OT_ACODEC_DACR_SELECT_TRACK一致时,最终输出的数据仅入参中指定的声道有效,且其数据来源为原始左声道。例如zh-cn_topic_0000001370930389.html和OT_ACODEC_DACR_SELECT_TRACK同时选择了0,则最终输出的数据仅左声道有效,且其数据来源于原来的左声道。

【举例】

unsigned int track_select;
track_select = 0x1;
if (ioctl(acodec_fd, OT_ACODEC_DACR_SELECT_TRACK, &track_select) {
    printf("ioctl err!\n");
}
OT_ACODEC_ADCL_SELECT_TRACK

【描述】

设置ADCL选择左声道或右声道。

【语法】

int ioctl (int fd, OT_ACODEC_ADCL_SELECT_TRACK, unsigned int *arg);

【参数】

参数名称

描述

输入/输出

fd

Audio Codec设备文件描述符

输入

OT_ACODEC_ADCL_SELECT_TRACK

ioctl号

输入

arg

无符号整型指针

参数指向的值范围[0, 1]。0代表左声道,1代表右声道

输入

【返回值】

返回值

描述

0

成功

非0

失败

【需求】

头文件:ot_acodec.h

【注意】

  • 该接口的作用是控制原始左声道数据的输出音轨设置。当没有调用该接口时,默认选择0,即最终以左声道输出。
  • 相比OT_ACODEC_ADCR_SELECT_TRACK,OT_ACODEC_ADCL_SELECT_TRACK的优先级更高。
  • 当OT_ACODEC_ADCL_SELECT_TRACK的入参与OT_ACODEC_ADCR_SELECT_TRACK一致时,最终输出的数据仅入参中指定的声道有效,且其数据来源为原始左声道。例如OT_ACODEC_ADCL_SELECT_TRACK和OT_ACODEC_ADCR_SELECT_TRACK同时选择了1,则最终输出的数据仅右声道有效,且其数据来源于原来的左声道。

【举例】

unsigned int track_select;
track_select = 0x1;
if (ioctl(acodec_fd, OT_ACODEC_ADCL_SELECT_TRACK, &track_select)) {
    printf("ioctl err!\n");
}
OT_ACODEC_ADCR_SELECT_TRACK

【描述】

设置ADCR选择左声道或右声道。

【语法】

int ioctl (int fd, OT_ACODEC_ADCR_SELECT_TRACK, unsigned int *arg);

【参数】

参数名称

描述

输入/输出

fd

Audio Codec设备文件描述符

输入

OT_ACODEC_ADCR_SELECT_TRACK

ioctl号

输入

arg

无符号整型指针

参数指向的值范围[0, 1]。0代表左声道,1代表右声道

输入

【返回值】

返回值

描述

0

成功

非0

失败

【需求】

头文件:ot_acodec.h

【注意】

  • 该接口的作用是控制原始右声道数据的输出音轨设置。当没有调用该接口时,默认选择1,即最终以右声道输出。
  • 相比OT_ACODEC_ADCL_SELECT_TRACK,OT_ACODEC_ADCR_SELECT_TRACK的优先级较低。
  • 当OT_ACODEC_ADCL_SELECT_TRACK的入参与OT_ACODEC_ADCR_SELECT_TRACK一致时,最终输出的数据仅入参中指定的声道有效,且其数据来源为原始左声道。例如OT_ACODEC_ADCL_SELECT_TRACK和OT_ACODEC_ADCR_SELECT_TRACK同时选择了0,则最终输出的数据仅左声道有效,且其数据来源于原来的左声道。

【举例】

unsigned int track_select;
track_select = 0x1;
if (ioctl(acodec_fd, OT_ACODEC_ADCR_SELECT_TRACK, &track_select)) {
    printf("ioctl err!\n");
}
OT_ACODEC_SET_DAC_DE_EMPHASIS

【描述】

DAC的去加重滤波控制。

【语法】

int ioctl (int fd, OT_ACODEC_SET_DAC_DE_EMPHASIS, unsigned int *arg);

【参数】

参数名称

描述

输入/输出

fd

Audio Codec设备文件描述符

输入

OT_ACODEC_SET_DAC_DE_EMPHASIS

ioctl号

输入

arg

无符号整型指针

参数指向的值范围:[0, 3]

  • 0代表不做去加重;
  • 1代表对32kHz采样率数据做去加重;
  • 2代表对44.1kHz采样率数据做去加重;
  • 3代表对48kHz采样率数据做去加重。

输入

【返回值】

返回值

描述

0

成功

非0

失败

【需求】

头文件:ot_acodec.h

【注意】

无。

【举例】

unsigned int dac_deemphasis;
dac_deemphasis = 0x1;
if (ioctl(acodec_fd, OT_ACODEC_SET_DAC_DE_EMPHASIS, &dac_deemphasis)) {
    printf("ioctl err!\n");
}
OT_ACODEC_SET_ADC_HP_FILTER

【描述】

ADC的高通滤波控制。

【语法】

int ioctl (int fd, OT_ACODEC_SET_ADC_HP_FILTER, unsigned int *arg);

【参数】

参数名称

描述

输入/输出

fd

Audio Codec设备文件描述符

输入

OT_ACODEC_SET_ADC_HP_FILTER

ioctl号

输入

arg

无符号整型指针

参数指向的值范围:[0, 1]

  • 0代表关闭高通滤波器;
  • 1代表使能高通滤波器。

输入

【返回值】

返回值

描述

0

成功

非0

失败

【需求】

头文件:ot_acodec.h

【注意】

无。

【举例】

unsigned int adc_hpf;
adc_hpf = 0x1;
if (ioctl(acodec_fd, OT_ACODEC_SET_ADC_HP_FILTER, &adc_hpf)) {
    printf("ioctl err!\n");
}
OT_ACODEC_DAC_SOFT_MUTE_RATE

【描述】

DAC软静音速率控制。

【语法】

int ioctl (int fd, OT_ACODEC_DAC_SOFT_MUTE_RATE, unsigned int *arg);

【参数】

参数名称

描述

输入/输出

fd

Audio Codec设备文件描述符

输入

OT_ACODEC_DAC_SOFT_MUTE_RATE

ioctl号

输入

arg

无符号整型指针

参数指向的值范围:[0, 3]

  • 0代表每2个采样点变化1dB;
  • 1代表8个采样点变化1dB;
  • 2代表32个采样点变化1dB;
  • 3代表64个采样点变化1dB。

输入

【返回值】

返回值

描述

0

成功

非0

失败

【需求】

头文件:ot_acodec.h

【注意】

无。

【举例】

unsigned int soft_mute_rate;
soft_mute_rate = 0x1;
if (ioctl(acodec_fd, OT_ACODEC_DAC_SOFT_MUTE_RATE, &soft_mute_rate)) {
    printf("ioctl err!\n");
}
OT_ACODEC_SET_I2S1_DATA_WIDTH

【描述】

I2S1数据接口位宽。

【语法】

int ioctl (int fd, OT_ACODEC_SET_I2S1_DATA_WIDTH, unsigned int *arg);

【参数】

参数名称

描述

输入/输出

fd

Audio Codec设备文件描述符

输入

OT_ACODEC_SET_I2S1_DATA_WIDTH

ioctl号

输入

arg

无符号整型指针

参数指向的值范围:[0, 3]

  • 0代表16bit位宽;
  • 1代表18bit位宽;
  • 2代表20bit位宽;
  • 3代表24bit位宽。

输入

【返回值】

返回值

描述

0

成功

非0

失败

【需求】

头文件:ot_acodec.h

【注意】

无。

【举例】

unsigned int i2s_data_width;
i2s_data_width = 0x0;
if (ioctl(acodec_fd, OT_ACODEC_SET_I2S1_DATA_WIDTH, &i2s_data_width)) {
    printf("ioctl err!\n");
}
OT_ACODEC_QUERY_STATUS

【描述】

查询当前状态。

【语法】

int ioctl (int fd, OT_ACODEC_QUERY_STATUS, unsigned int *arg);

【参数】

参数名称

描述

输入/输出

fd

Audio Codec设备文件描述符

输入

OT_ACODEC_QUERY_STATUS

ioctl号

输入

arg

无符号整型指针

参数指向的值范围[0, 1]

输出

【返回值】

返回值

描述

0

成功

非0

失败

【需求】

头文件:ot_acodec.h

【注意】

  • 加载acodec驱动后,需要一段时间进行初始化,Normal模式下为100ms,Fast模式下为10ms,Nice模式下为300ms。
  • 该接口的作用是查询ACODEC的当前状态。
  • 在未完成初始化时,其获取到的状态是0,即未使能;在已完成初始化时,其获取到的状态是1,即已使能。

【举例】

unsigned int status;
if (ioctl(acodec_fd, OT_ACODEC_QUERY_STATUS, &status)) {
    printf("ioctl err!\n");
}
OT_ACODEC_RESUME

【描述】

恢复ACODEC,使其上电。

【语法】

int ioctl (int fd, OT_ACODEC_RESUME, unsigned int *arg);

【参数】

参数名称

描述

输入/输出

fd

Audio Codec设备文件描述符

输入

OT_ACODEC_RESUME

ioctl号

输入

arg

无符号整型指针

参数指向的值范围[0, 2],详见模块参数init_mode释义。

  • 0表示NORMAL模式上电
  • 1表示FAST模式上电
  • 2表示NICE模式上电

输出

【返回值】

返回值

描述

0

成功

非0

失败

【需求】

头文件:ot_acodec.h

【注意】

  • 该接口适用于低功耗音频业务场景,ACODEC模块由下电状态恢复,切换为上电状态,其他场景下不需要调用该接口。
  • 当ACODEC驱动加载后,ACODEC会执行内部上电流程切换成上电状态,不需要调用该接口。
  • 当ACODEC已处于上电状态时,不支持再调用该接口。
  • Hi3519DV500不支持该接口。

【举例】

unsigned int mode;
if (ioctl(acodec_fd, OT_ACODEC_RESUME, &mode)) {
    printf("ioctl err!\n");
}
OT_ACODEC_SUSPEND

【描述】

挂起ACODEC,使其下电。

【语法】

int ioctl (int fd, OT_ACODEC_SUSPEND);

【参数】

参数名称

描述

输入/输出

fd

Audio Codec设备文件描述符

输入

OT_ACODEC_SUSPEND

ioctl号

输入

【返回值】

返回值

描述

0

成功

非0

失败

【需求】

头文件:ot_acodec.h

【注意】

  • 该接口适用于低功耗音频业务场景,ACODEC模块由上电状态进入休眠,切换为下电状态,其他场景下不需要调用该接口。
  • 当ACODEC驱动卸载后,ACODEC会执行内部下电流程切换成下电状态,不需要调用该接口。
  • 当ACODEC已处于下电状态时,不支持再调用该接口。
  • Hi3519DV500不支持该接口。

【举例】

if (ioctl(acodec_fd, OT_ACODEC_SUSPEND)) {
    printf("ioctl err!\n");
}

Resample

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

该功能模块提供以下MPI:

ss_resample_create

【描述】

创建一个重采样模块。

【语法】

td_void *ss_resample_create(td_s32 in_rate, td_s32 out_rate, td_s32 chn_num);

【参数】

参数名称

描述

输入/输出

in_rate

输入采样率。

支持的数值:8000, 11025, 12000, 16000, 22050, 24000, 32000, 44100, 48000, 64000。

输入

out_rate

输出采样率。

支持的数值:8000, 11025, 12000, 16000, 22050, 24000, 32000, 44100, 48000。

输入

chn_num

处理声道数。

支持的数值:1, 2

输入

【返回值】

返回值

描述

TD_NULL

失败。

非TD_NULL

成功,返回创建句柄。

【需求】

  • 头文件:ss_resample.h
  • 库文件:libvqe_res.so

【注意】

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

【举例】

td_s16 in_buf[80];
td_s16 *out_buf = TD_NULL;
td_void *res = TD_NULL;
res = ss_resample_create(8000, 48000, 1);
out_buf = malloc(ss_resample_get_max_output_num(res, 80) * sizeof(td_s16));

/* Write buf to in_buf and process resample */
ss_resample_process(res, in_buf , 80, out_buf);

/* Destroy Resample. */
ss_resample_destroy(res);
free(out_buf);

ss_resample_process

【描述】

处理一帧重采样数据。

【语法】

td_s32 ss_resample_process(td_void *instance, const td_s16 *in_buf, td_s32 in_samples, td_s16 *out_buf);

【参数】

参数名称

描述

输入/输出

instance

重采样模块句柄。

输入

in_buf

输入数据buf指针。

输入

in_samples

输入数据采样点数。

取值范围:[0, 2048]

输入

out_buf

输出数据buf指针。

输入/输出

【返回值】

返回值

描述

负值或零

失败,返回错误码或零

正值

成功,返回每条声道输出采样点数。

【需求】

  • 头文件:ss_resample.h
  • 库文件:libvqe_res.so

【注意】

  • 最大输入采样点数需小于2048。
  • 当重采样的输入采样率等于输出采样率的2倍时,要求输入采样点数为2的倍数,否则会导致重采样出错。
  • 当重采样输入采样率为输出采样率的4倍时,要求输入采样点数为4的倍数,否则会导致重采样出错。
  • 当重采样输入采样率为输出采样率的6倍时,要求输入采样点数为6的倍数,否则会导致重采样出错。
  • 当重采样的输出采样率不等于输入采样率的2倍、4倍、6倍,且声道模式为立体声时,要求输入采样点数为2的倍数,否则会导致重采样出错。

【举例】

参考ss_resample_create

ss_resample_destroy

【描述】

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

【语法】

td_void ss_resample_destroy(td_void *instance);

【参数】

参数名称

描述

输入/输出

inst

重采样模块句柄。

输入

【返回值】

无

【需求】

  • 头文件:ss_resample.h
  • 库文件:libvqe_res.so

【注意】

无

【举例】

参考ss_resample_create

ss_resample_get_max_output_num

【描述】

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

【语法】

td_s32 ss_resample_get_max_output_num(td_void *instance, td_s32 in_samples);

【参数】

参数名称

描述

输入/输出

instance

重采样模块句柄。

输入

in_samples

每一声道输入采样点数。

输入

【返回值】

返回值

描述

负值

失败,返回错误码。

非负值

成功,返回每条声道输出采样点数。

【需求】

  • 头文件:ss_resample.h
  • 库文件:libvqe_res.so

【注意】

  • 每一声道输入采样点数需小于最大输入采样点数(2048)。
  • 当重采样为上采样且声道模式为立体声时,要求输入采样点数为偶数,否则会导致获取最大输出采样点数出错。
  • 当重采样为下采样、输入采样率为输出采样率的2倍或4倍或6倍、声道模式为立体声时,要求输入采样点数为偶数,否则会导致获取最大输出采样点数出错。

【举例】

参考ss_resample_create

数据类型

音频输入输出

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

OT_AIO_MAX_NUM

【说明】

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

【定义】

#define OT_AIO_MAX_CHN_NUM ((OT_AO_MAX_CHN_NUM > OT_AI_MAX_CHN_NUM) ? OT_AO_MAX_CHN_NUM : OT_AI_MAX_CHN_NUM)

【注意事项】

无。

【相关数据类型及接口】

无。

OT_AI_DEV_MAX_NUM

【说明】

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

【定义】

#define OT_AI_DEV_MAX_NUM         1

【注意事项】

无。

【相关数据类型及接口】

无。

OT_AO_DEV_MIN_NUM

【说明】

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

【定义】

#define OT_AO_DEV_MIN_NUM      0

【注意事项】

无。

【相关数据类型及接口】

无。

OT_AO_DEV_MAX_NUM

【说明】

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

【定义】

#define OT_AO_DEV_MAX_NUM      1

【注意事项】

无。

【相关数据类型及接口】

无。

OT_AIO_MAX_CHN_NUM

【说明】

定义音频输入/输出设备的最大通道数。

【定义】

#define OT_AIO_MAX_NUM ((OT_AO_DEV_MAX_NUM > OT_AI_DEV_MAX_NUM) ? OT_AO_DEV_MAX_NUM : OT_AI_DEV_MAX_NUM)

【注意事项】

无。

【相关数据类型及接口】

无。

OT_AI_MAX_CHN_NUM

【说明】

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

【定义】

Hi3519DV500:

#define OT_AI_MAX_CHN_NUM      16

Hi3516CV610:

#define OT_AI_MAX_CHN_NUM      4

【注意事项】

无。

【相关数据类型及接口】

无。

OT_AO_MAX_CHN_NUM

【说明】

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

【定义】

Hi3519DV500:

#define OT_AO_MAX_CHN_NUM         9

Hi3516CV610:

#define OT_AO_MAX_CHN_NUM         3

【注意事项】

其中,该计数中包括AO系统音通路,实体通路数为OT_AO_MAX_CHN_NUM – 1。

【相关数据类型及接口】

无。

OT_AO_SYS_CHN_ID

【说明】

定义音频输出设备的系统音通道ID。

【定义】

#define OT_AO_SYS_CHN_ID         (OT_AO_MAX_CHN_NUM - 1)

【注意事项】

每个输出设备的系统音通道相互独立。其中,送至系统音通道的数据会在各个实体通道的基础上混音并最终输出,可用于全局提示音、按键音等场景。

【相关数据类型及接口】

无。

OT_MAX_AUDIO_POINT_BYTES

【说明】

定义单个采样点占用的最大字节数。

【定义】

#define OT_MAX_AUDIO_POINT_BYTES  4

【注意事项】

无

【相关数据类型及接口】

无

OT_MAX_AO_POINT_NUM

【说明】

定义AO一帧的最大采样点数。

【定义】

#define OT_MAX_AO_POINT_NUM       4096

【注意事项】

无

【相关数据类型及接口】

无

OT_MIN_AUDIO_POINT_NUM

【说明】

定义一帧的最小采样点数。

【定义】

#define OT_MIN_AUDIO_POINT_NUM    80

【注意事项】

无

【相关数据类型及接口】

无

OT_MAX_AI_POINT_NUM

【说明】

定义AI一帧的最大采样点数。

【定义】

#define OT_MAX_AI_POINT_NUM       2048

【注意事项】

无

【相关数据类型及接口】

无

OT_MAX_AUDIO_FRAME_LEN

【说明】

定义单个音频帧的最大长度。

【定义】

#define OT_MAX_AUDIO_FRAME_LEN    (OT_MAX_AUDIO_POINT_BYTES * OT_MAX_AO_POINT_NUM)

【注意事项】

无

【相关数据类型及接口】

无

OT_MAX_AUDIO_STREAM_LEN

【说明】

定义单个音频流的最大长度。

【定义】

#define OT_MAX_AUDIO_STREAM_LEN   OT_MAX_AUDIO_FRAME_LEN

【注意事项】

无

【相关数据类型及接口】

无

OT_AI_TALKVQE_MASK_HPF

【说明】

定义TalkVQE HPF功能的Mask。

【定义】

#define OT_AI_TALKVQE_MASK_HPF      0x1

【注意事项】

无。

【相关数据类型及接口】

赋值给ot_ai_talk_vqe_cfg结构体成员open_mask表示开启HPF功能。如open_mask = OT_AI_TALKVQE_MASK_AEC | OT_AI_TALKVQE_MASK_HPF;表示开启AEC和HPF功能。

OT_AI_TALKVQE_MASK_AEC

【说明】

定义TalkVQE AEC功能的Mask。

【定义】

#define OT_AI_TALKVQE_MASK_AEC      0x2

【注意事项】

无。

【相关数据类型及接口】

赋值给ot_ai_talk_vqe_cfg结构体成员open_mask表示开启AEC功能。如open_mask =OT_AI_TALKVQE_MASK_AEC | OT_AI_TALKVQE_MASK_HPF;表示开启AEC和HPF功能。

OT_AI_TALKVQE_MASK_AGC

【说明】

定义TalkVQE AGC功能的Mask。

【定义】

#define OT_AI_TALKVQE_MASK_AGC      0x8

【注意事项】

无。

【相关数据类型及接口】

赋值给ot_ai_talk_vqe_cfg结构体成员open_mask表示开启AGC功能。如open_mask = OT_AI_TALKVQE_MASK_AEC | OT_AI_TALKVQE_MASK_AGC;表示开启AEC和AGC功能。

OT_AI_TALKVQE_MASK_EQ

【说明】

定义TalkVQE EQ功能的Mask。

【定义】

#define OT_AI_TALKVQE_MASK_EQ       0x10

【注意事项】

无。

【相关数据类型及接口】

赋值给ot_ai_talk_vqe_cfg结构体成员open_mask表示开启EQ功能。如open_mask = OT_AI_TALKVQE_MASK_AEC | OT_AI_TALKVQE_MASK_EQ;表示开启AEC和EQ功能。

OT_AI_TALKVQE_MASK_ANR

【说明】

定义TalkVQE ANR功能的Mask。

【定义】

#define OT_AI_TALKVQE_MASK_ANR      0x20

【注意事项】

无。

【相关数据类型及接口】

赋值给ot_ai_talk_vqe_cfg结构体成员open_mask表示开启ANR功能。如open_mask = OT_AI_TALKVQE_MASK_AEC | OT_AI_TALKVQE_MASK_ANR;表示开启AEC和ANR功能。

OT_AI_RECORDVQE_MASK_HPF

【说明】

定义RecordVQE HPF功能的Mask。

【定义】

#define OT_AI_RECORDVQE_MASK_HPF        0x1

【注意事项】

无。

【相关数据类型及接口】

赋值给ot_ai_record_vqe_cfg结构体成员open_mask表示开启HPF功能。如open_mask = OT_AI_RECORDVQE_MASK_HPF | OT_AI_RECORDVQE_MASK_HDR;表示开启HPF和HDR功能。

OT_AI_RECORDVQE_MASK_RNR

【说明】

定义RecordVQE RNR功能的Mask。

【定义】

#define OT_AI_RECORDVQE_MASK_RNR        0x2

【注意事项】

无。

【相关数据类型及接口】

赋值给ot_ai_record_vqe_cfg结构体成员open_mask表示开启RNR功能。如open_mask = OT_AI_RECORDVQE_MASK_HPF | OT_AI_RECORDVQE_MASK_RNR;表示开启HPF和RNR功能。

OT_AI_RECORDVQE_MASK_HDR

【说明】

定义RecordVQE HDR功能的Mask。

【定义】

#define OT_AI_RECORDVQE_MASK_HDR        0x4

【注意事项】

无。

【相关数据类型及接口】

赋值给ot_ai_record_vqe_cfg结构体成员open_mask表示开启HDR功能。如open_mask = OT_AI_RECORDVQE_MASK_HPF | OT_AI_RECORDVQE_MASK_HDR;表示开启HPF和HDR功能。

OT_AI_RECORDVQE_MASK_DRC

【说明】

定义RecordVQE DRC功能的Mask。

【定义】

#define OT_AI_RECORDVQE_MASK_DRC        0x8

【注意事项】

无。

【相关数据类型及接口】

赋值给ot_ai_record_vqe_cfg结构体成员open_mask表示开启DRC功能。如open_mask = OT_AI_RECORDVQE_MASK_HPF | OT_AI_RECORDVQE_MASK_DRC;表示开启HPF和DRC功能。

OT_AI_RECORDVQE_MASK_EQ

【说明】

定义RecordVQE EQ功能的Mask。

【定义】

#define OT_AI_RECORDVQE_MASK_EQ     0x10

【注意事项】

无。

【相关数据类型及接口】

赋值给ot_ai_record_vqe_cfg结构体成员open_mask表示开启EQ功能。如open_mask = OT_AI_RECORDVQE_MASK_HPF | OT_AI_RECORDVQE_MASK_EQ;表示开启HPF和EQ功能。

OT_AI_RECORDVQE_MASK_AGC

【说明】

定义RecordVQE AGC功能的Mask。

【定义】

#define OT_AI_RECORDVQE_MASK_AGC        0x20

【注意事项】

无。

【相关数据类型及接口】

赋值给ot_ai_record_vqe_cfg结构体成员open_mask表示开启AGC功能。如open_mask =OT_AI_RECORDVQE_MASK_HPF | OT_AI_RECORDVQE_MASK_AGC;表示开启HPF和AGC功能。

OT_AI_TALKVQEV2_MASK_PNR

【说明】

定义TalkVqeV2 PNR功能的Mask。

【定义】

#define OT_AI_TALKVQEV2_MASK_PNR        0x1

【注意事项】

无。

【相关数据类型及接口】

赋值给ot_ai_talk_vqe_v2_cfg结构体成员open_mask表示开启PNR功能。如open_mask = OT_AI_TALKVQEV2_MASK_PNR | OT_AI_TALKVQEV2_MASK_NR;表示开启PNR和NR功能。

OT_AI_TALKVQEV2_MASK_NR

【说明】

定义TalkVqeV2 NR功能的Mask。

【定义】

#define OT_AI_TALKVQEV2_MASK_NR     0x2

【注意事项】

无。

【相关数据类型及接口】

赋值给ot_ai_talk_vqe_v2_cfg结构体成员open_mask表示开启NR功能。如open_mask = OT_AI_TALKVQEV2_MASK_PNR | OT_AI_TALKVQEV2_MASK_NR;表示开启PNR和NR功能。

OT_AI_TALKVQEV2_MASK_EQ

【说明】

定义TalkVqeV2 EQ功能的Mask。

【定义】

#define OT_AI_TALKVQEV2_MASK_EQ     0x4

【注意事项】

无。

【相关数据类型及接口】

赋值给ot_ai_talk_vqe_v2_cfg结构体成员open_mask表示开启EQ功能。如open_mask = OT_AI_TALKVQEV2_MASK_PNR | OT_AI_TALKVQEV2_MASK_NR;表示开启PNR和NR功能。

OT_AI_TALKVQEV2_MASK_AGC

【说明】

定义TalkVqeV2 AGC功能的Mask。

【定义】

#define OT_AI_TALKVQEV2_MASK_AGC        0x8

【注意事项】

无。

【相关数据类型及接口】

赋值给ot_ai_talk_vqe_v2_cfg结构体成员open_mask表示开启AGC功能。如open_mask = OT_AI_TALKVQEV2_MASK_PNR | OT_AI_TALKVQEV2_MASK_NR;表示开启PNR和NR功能。

OT_AI_TALKVQEV2_MASK_DRC

【说明】

定义TalkVqeV2 DRC功能的Mask。

【定义】

#define OT_AI_TALKVQEV2_MASK_DRC        0x10

【注意事项】

无。

【相关数据类型及接口】

赋值给ot_ai_talk_vqe_v2_cfg结构体成员open_mask表示开启DRC功能。如open_mask = OT_AI_TALKVQEV2_MASK_PNR | OT_AI_TALKVQEV2_MASK_NR;表示开启PNR和NR功能。

OT_AI_TALKVQEV2_MASK_LIMITER

【说明】

定义TalkVqeV2 LIMITER功能的Mask。

【定义】

#define OT_AI_TALKVQEV2_MASK_LIMITER        0x20

【注意事项】

无。

【相关数据类型及接口】

赋值给ot_ai_talk_vqe_v2_cfg结构体成员open_mask表示开启LIMITER功能。如open_mask = OT_AI_TALKVQEV2_MASK_PNR | OT_AI_TALKVQEV2_MASK_NR;表示开启PNR和NR功能。

OT_AI_TALKVQEV2_MASK_DEREVERB

【说明】

定义TalkVqeV2 DEREVERB功能的Mask。

【定义】

#define OT_AI_TALKVQEV2_MASK_DEREVERB       0x40

【注意事项】

无。

【相关数据类型及接口】

赋值给ot_ai_talk_vqe_v2_cfg结构体成员open_mask表示开启DEREVERB功能。如open_mask = OT_AI_TALKVQEV2_MASK_PNR | OT_AI_TALKVQEV2_MASK_NR;表示开启PNR和NR功能。

OT_AI_TALKVQEV2_MASK_FMP

【说明】

定义TalkVqeV2 FMP功能的Mask。

【定义】

#define OT_AI_TALKVQEV2_MASK_FMP        0x80

【注意事项】

无。

【相关数据类型及接口】

赋值给ot_ai_talk_vqe_v2_cfg结构体成员open_mask表示开启FMP功能。如open_mask = OT_AI_TALKVQEV2_MASK_PNR | OT_AI_TALKVQEV2_MASK_NR;表示开启PNR和NR功能。

OT_AI_TALKVQEV2_MASK_WNR

【说明】

定义TalkVqeV2 WNR功能的Mask。

【定义】

#define OT_AI_TALKVQEV2_MASK_WNR        0x100

【注意事项】

无。

【相关数据类型及接口】

赋值给ot_ai_talk_vqe_v2_cfg结构体成员open_mask表示开启WNR功能。如open_mask = OT_AI_TALKVQEV2_MASK_PNR | OT_AI_TALKVQEV2_MASK_NR;表示开启PNR和NR功能。

OT_AI_TALKVQEV2_MASK_AEC

【说明】

定义TalkVqeV2 AEC功能的Mask。

【定义】

#define OT_AI_TALKVQEV2_MASK_AEC       0x200

【注意事项】

无。

【相关数据类型及接口】

赋值给ot_ai_talk_vqe_v2_cfg结构体成员open_mask表示开启AEC功能。如open_mask =OT_AI_TALKVQEV2_MASK_PNR | OT_AI_TALKVQEV2_MASK_NR;表示开启PNR和NR功能。

OT_AI_TALKVQEV2_MASK_HS

【说明】

定义TalkVqeV2 HS功能的Mask。

【定义】

#define OT_AI_TALKVQEV2_MASK_HS        0x400

【注意事项】

无。

【相关数据类型及接口】

赋值给ot_ai_talk_vqe_v2_cfg结构体成员open_mask表示开启HS功能。如open_mask =OT_AI_TALKVQEV2_MASK_PNR | OT_AI_TALKVQEV2_MASK_NR;表示开启PNR和NR功能。

OT_AO_VQE_MASK_HPF

【说明】

定义AO VQE HPF功能的Mask。

【定义】

#define OT_AO_VQE_MASK_HPF      0x1

【注意事项】

无。

【相关数据类型及接口】

赋值给ot_ao_vqe_cfg结构体成员open_mask表示开启HPF功能。如open_mask = OT_AO_VQE_MASK_AGC | OT_AO_VQE_MASK_HPF;表示开启AGC和HPF功能。

OT_AO_VQE_MASK_ANR

【说明】

定义AO VQE ANR功能的Mask。

【定义】

#define AO_TALKVQE_MASK_ANR     0x2

【注意事项】

无。

【相关数据类型及接口】

赋值给ot_ao_vqe_cfg结构体成员open_mask表示开启ANR 功能。如open_mask = OT_AO_VQE_MASK_AGC | OT_AO_VQE_MASK_ANR;表示开启AGC和ANR功能。

OT_AO_VQE_MASK_AGC

【说明】

定义AO VQE AGC功能的Mask。

【定义】

#define OT_AO_VQE_MASK_AGC      0x4

【注意事项】

无。

【相关数据类型及接口】

赋值给ot_ao_vqe_cfg结构体成员open_mask表示开启AGC 功能。如open_mask = OT_AO_VQE_MASK_AGC| OT_AO_VQE_MASK_EQ;表示开启AGC和EQ 功能。

OT_AO_VQE_MASK_EQ

【说明】

定义AO VQE EQ功能的Mask。

【定义】

#define OT_AO_VQE_MASK_EQ  0x8

【注意事项】

无。

【相关数据类型及接口】

赋值给ot_ao_vqe_cfg结构体成员open_mask表示开启EQ功能。如open_mask = OT_AO_VQE_MASK_AGC | OT_AO_VQE_MASK_EQ;表示开启AGC和EQ 功能。

OT_AO_VQE_MASK_HS

【说明】

定义AO VQE HS功能的Mask。

【定义】

#define OT_AO_VQE_MASK_HS      0x10

【注意事项】

无。

【相关数据类型及接口】

赋值给ot_ao_vqe_cfg结构体成员open_mask表示开启HS功能。如open_mask = OT_AO_VQE_MASK_AGC | OT_AO_VQE_MASK_HS;表示开启AGC和HS 功能。

OT_MAX_AUDIO_FILE_PATH_LEN

【说明】

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

【定义】

#define OT_MAX_AUDIO_FILE_PATH_LEN   256

【注意事项】

无。

【相关数据类型及接口】

ot_audio_save_file_info

OT_MAX_AUDIO_FILE_NAME_LEN

【说明】

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

【定义】

#define OT_MAX_AUDIO_FILE_NAME_LEN   256

【注意事项】

无。

【相关数据类型及接口】

ot_audio_save_file_info

OT_AUDIO_FRAME_CHN_NUM

【说明】

定义存放音频数据的最大声道数。

【定义】

#define OT_AUDIO_FRAME_CHN_NUM    2

【注意事项】

无。

【相关数据类型及接口】

ot_audio_save_file_info

OT_MAX_AI_USER_FRAME_DEPTH

【说明】

定义音频输入通道最大缓存帧数。

【定义】

#define OT_MAX_AI_USER_FRAME_DEPTH    30

【注意事项】

无

【相关数据类型及接口】

无

OT_MIN_AI_USER_FRAME_DEPTH

【说明】

定义音频输入通道最小缓存帧数。

【定义】

#define OT_MIN_AI_USER_FRAME_DEPTH    2

【注意事项】

无

【相关数据类型及接口】

无

OT_VQE_EQ_BAND_NUM

【说明】

定义EQ功能可调节的频段数。

【定义】

#define OT_VQE_EQ_BAND_NUM   10

【注意事项】

无。

【相关数据类型及接口】

ot_audio_eq_cfg

OT_VQE_DRC_SEC_NUM

【说明】

定义DRC动态曲线可配置级数。

【定义】

#define OT_VQE_DRC_SEC_NUM   5

【注意事项】

无。

【相关数据类型及接口】

ot_ai_drc_cfg

OT_AEC_ERL_BAND_NUM

【说明】

定义AEC功能ERL保护频段的数目。

【定义】

#define OT_AEC_ERL_BAND_NUM   6

【注意事项】

无。

【相关数据类型及接口】

ot_ai_aec_cfg

OT_AEC_ERL_BAND_VALUE_NUM

【说明】

定义AEC功能ERL保护频段值的数目。

【定义】

#define OT_AEC_ERL_BAND_VALUE_NUM    7

【注意事项】

无。

【相关数据类型及接口】

ot_ai_aec_cfg

OT_TALKVQEV2_EQ_BAND_NUM

【说明】

定义TalkVqeV2 EQ功能可调节的频段数。

【定义】

#define OT_TALKVQEV2_EQ_BAND_NUM   30

【注意事项】

无。

【相关数据类型及接口】

ot_ai_talk_v2_eq_cfg

ot_audio_clk_select

【说明】

定义音频时钟源。

【定义】

typedef enum {
    OT_AUDIO_CLK_SELECT_BASE       = 0,  /* Audio base clk. */
    OT_AUDIO_CLK_SELECT_SPARE,           /* Audio spare clk. */
    OT_AUDIO_CLK_SELECT_BUTT,
} ot_audio_clk_select;

【成员】

成员名称

描述

OT_AUDIO_CLK_SELECT_BASE

默认时钟源SPLL。

OT_AUDIO_CLK_SELECT_SPARE

备用时钟源VPLL。

【注意事项】

默认时钟源SPLL的音频质量更好,但是当其他模块(如VO/MIPI)使用SPLL时,需要切换到备用时钟源VPLL。

【相关数据类型及接口】

无

ot_audio_sample_rate

【说明】

定义音频采样率。

【定义】

typedef enum {
    OT_AUDIO_SAMPLE_RATE_8000   = 8000,    /* 8kHz sample rate */
    OT_AUDIO_SAMPLE_RATE_12000  = 12000,   /* 12kHz sample rate */
    OT_AUDIO_SAMPLE_RATE_11025  = 11025,   /* 11.025kHz sample rate */
    OT_AUDIO_SAMPLE_RATE_16000  = 16000,   /* 16kHz sample rate */
    OT_AUDIO_SAMPLE_RATE_22050  = 22050,   /* 22.05kHz sample rate */
    OT_AUDIO_SAMPLE_RATE_24000  = 24000,   /* 24kHz sample rate */
    OT_AUDIO_SAMPLE_RATE_32000  = 32000,   /* 32kHz sample rate */
    OT_AUDIO_SAMPLE_RATE_44100  = 44100,   /* 44.1kHz sample rate */
    OT_AUDIO_SAMPLE_RATE_48000  = 48000,   /* 48kHz sample rate */
    OT_AUDIO_SAMPLE_RATE_64000  = 64000,   /* 64kHz sample rate */
    OT_AUDIO_SAMPLE_RATE_96000  = 96000,   /* 96kHz sample rate */
    OT_AUDIO_SAMPLE_RATE_BUTT,
} ot_audio_sample_rate;

【成员】

成员名称

描述

OT_AUDIO_SAMPLE_RATE_8000

8kHz采样率。

OT_AUDIO_SAMPLE_RATE_12000

12kHz采样率。

OT_AUDIO_SAMPLE_RATE_11025

11.025kHz采样率。

OT_AUDIO_SAMPLE_RATE_16000

16kHz采样率。

OT_AUDIO_SAMPLE_RATE_22050

22.050kHz采样率。

OT_AUDIO_SAMPLE_RATE_24000

24kHz采样率。

OT_AUDIO_SAMPLE_RATE_32000

32kHz采样率。

OT_AUDIO_SAMPLE_RATE_44100

44.1kHz采样率。

OT_AUDIO_SAMPLE_RATE_48000

48kHz采样率。

OT_AUDIO_SAMPLE_RATE_64000

64kHz采样率。

OT_AUDIO_SAMPLE_RATE_96000

96kHz采样率。

【注意事项】

  • 这里枚举值不是从0开始,而是与实际的采样率值相同。
  • 96kHz的采样率仅适用于AI采集、AO播放,不支持96kHz采样率的数据做重采样、VQE等处理。
  • dmic不支持11.025kHz、22.050kHz、44.1kHz,96kHz采样率。

【相关数据类型及接口】

ot_aio_attr

ot_audio_bit_width

【说明】

定义音频采样精度。

【定义】

typedef enum {
    OT_AUDIO_BIT_WIDTH_8   = 0,   /* 8bit width */
    OT_AUDIO_BIT_WIDTH_16  = 1,   /* 16bit width */
    OT_AUDIO_BIT_WIDTH_24  = 2,   /* 24bit width */
    OT_AUDIO_BIT_WIDTH_BUTT,
} ot_audio_bit_width;

【成员】

成员名称

描述

OT_AUDIO_BIT_WIDTH_8

采样精度为8bit位宽。

OT_AUDIO_BIT_WIDTH_16

采样精度为16bit位宽。

OT_AUDIO_BIT_WIDTH_24

采样精度为24bit位宽。

【注意事项】

Hi3519DV500/Hi3516CV610支持16bit/24bit位宽。

【相关数据类型及接口】

ot_aio_attr

ot_aio_mode

【说明】

定义音频输入输出设备工作模式。

【定义】

typedef enum {
    OT_AIO_MODE_I2S_MASTER  = 0,    /* AIO I2S master mode */
    OT_AIO_MODE_I2S_SLAVE,          /* AIO I2S slave mode */
    OT_AIO_MODE_PCM_SLAVE_STD,      /* AIO PCM slave standard mode */
    OT_AIO_MODE_PCM_SLAVE_NON_STD,  /* AIO PCM slave non-standard mode */
    OT_AIO_MODE_PCM_MASTER_STD,     /* AIO PCM master standard mode */
    OT_AIO_MODE_PCM_MASTER_NON_STD, /* AIO PCM master non-standard mode */
    OT_AIO_MODE_BUTT
} ot_aio_mode;

【成员】

成员名称

描述

OT_AIO_MODE_I2S_MASTER

I2S主模式。

OT_AIO_MODE_I2S_SLAVE

I2S从模式。

OT_AIO_MODE_PCM_SLAVE_STD

PCM从模式(标准协议)

OT_AIO_MODE_PCM_SLAVE_NON_STD

PCM从模式(自定义协议)

OT_AIO_MODE_PCM_MASTER_STD

PCM主模式(标准协议)

OT_AIO_MODE_PCM_MASTER_NON_STD

PCM主模式(自定义协议)

【注意事项】

对接内置Audio Codec时,只支持I2S主模式。

【相关数据类型及接口】

ot_aio_attr

ot_aio_i2s_type

【说明】

定义设备I2S对接设备类型。

【定义】

typedef enum {
    OT_AIO_I2STYPE_INNERCODEC = 0, /* AIO I2S connect inner audio CODEC */
    OT_AIO_I2STYPE_INNERHDMI,       /* AIO I2S connect Inner HDMI */
    OT_AIO_I2STYPE_EXTERN,          /* AIO I2S connect extern hardware */
    OT_AIO_I2STYPE_DMIC,            /* AIO I2S connect DMIC */
} ot_aio_i2s_type;

【成员】

成员名称

描述

OT_AIO_I2STYPE_INNERCODEC

对接内置CODEC。

OT_AIO_I2STYPE_INNERHDMI

对接内置HDMI。

OT_AIO_I2STYPE_EXTERN

对接外接设备。

OT_AIO_I2STYPE_DMIC

对接DMIC

【注意事项】

i2s_type可以配置I2S对接设备的类型属性,其具体对应关系如下表所示。

解决方案

AIDEV0

AIDEV1

AODEV0

AODEV1

AODEV2

Hi3519DV500

OT_AIO_I2STYPE_EXTERN/OT_AIO_I2STYPE_INNERCODEC/OT_AIO_I2STYPE_DMIC

不支持

OT_AIO_I2STYPE_EXTERN/OT_AIO_I2STYPE_INNERCODEC

不支持

不支持

Hi3516CV610

OT_AIO_I2STYPE_EXTERN/OT_AIO_I2STYPE_INNERCODEC

不支持

OT_AIO_I2STYPE_EXTERN/OT_AIO_I2STYPE_INNERCODEC

不支持

不支持

【相关数据类型及接口】

ot_aio_attr

ot_audio_snd_mode

【说明】

定义音频声道模式。

【定义】

typedef enum {
    OT_AUDIO_SOUND_MODE_MONO   = 0, /* mono */
    OT_AUDIO_SOUND_MODE_STEREO = 1, /* stereo */
    OT_AUDIO_SOUND_MODE_BUTT
} ot_audio_snd_mode;

【成员】

成员名称

描述

OT_AUDIO_SOUND_MODE_MONO

单声道。

OT_AUDIO_SOUND_MODE_STEREO

双声道。

【注意事项】

音频声道分为stereo模式和mono模式:

  • 对于stereo模式

    • 使能左通道时对应的右通道亦会同步使能;
    • 通过获取帧接口获取到的音频帧结构体中左、右声道均有数据,即virt_addr[0]和virt_addr[1]均有效。
  • 对于mono模式

    • 只会使能当前通道。
    • 通过获取帧接口获取到的音频帧结构体中仅左声道有数据,即virt_addr[0]有效,virt_addr[1]为空。

    例如对于需要开启2通道的情况:

    • 如果使用mono模式,则需要分别使能两个通道,并分别通过获取帧接口获取音频数据;
    • 如果使用stereo模式,则只需要使能通道0,通过获取帧接口可同时获取两通道的音频数据。
  • I2S模式下,左右声道对应的通道请查看 音频接口时序和AI、AO通道小节,以立体声为例,左声道对应通道0,右声道对应通道1。

  • 对AI来说,单声道默认从左声道输入,如果需要配置为右声道输入,可以考虑两种方法:

  • 对AO来说,单声道默认从左声道输出,如果需要配置为右声道输出,可以考虑两种方法:

  • 对于双声道模式,只应对左声道(即编号小于设备属性中通道数chn_cnt一半的通道)进行操作,SDK内部会自动对右声道也进行相应的操作。

【相关数据类型及接口】

ot_aio_attr

ot_audio_mod_param

【说明】

定义音频模块参数结构体。

【定义】

typedef struct {
    ot_audio_clk_select clk_select;
} ot_audio_mod_param;

【成员】

成员名称

描述

clk_select

音频时钟源选择。

请参考ot_audio_clk_select。

【注意事项】

无。

【相关数据类型及接口】

无。

ot_aio_attr

【说明】

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

【定义】

typedef struct {
    ot_audio_sample_rate  sample_rate;
    ot_audio_bit_width  bit_width;
    ot_aio_mode  work_mode;
    ot_audio_snd_mode  snd_mode;
    td_u32  expand_flag; 
    td_u32  frame_num;
    td_u32  point_num_per_frame;
    td_u32  chn_cnt;
    td_u32  clk_share;
    ot_aio_i2s_type  i2s_type;
} ot_aio_attr; 

【成员】

成员名称

描述

sample_rate

音频采样率(从模式下,此参数不起作用)。

静态属性。

bit_width

音频采样精度(从模式下,此参数必须和音频AD/DA的采样精度匹配)。

静态属性。

work_mode

音频输入输出工作模式。

静态属性。

snd_mode

音频声道模式。

静态属性。

expand_flag

取值范围:{0, 1, 2}。

  • 0:不扩展。
  • 1:扩展成16位,8bit到16bit扩展标志(只对AI采样精度为8bit时有效)。
  • 2:24位裁剪成16位,在外置Codec的场景下可能用到。

静态属性,保留参数,一般设置成1即可。

frame_num

缓存帧数目。

取值范围:[2, OT_MAX_AUDIO_FRAME_NUM],以帧为单位。

静态属性。

point_num_per_frame

每帧的采样点个数。

取值范围:G711、G726、ADPCM_DVI4编码时取值为80、160、240、320、480;ADPCM_IMA编码时取值为81、161、241、321、481。

AI取值范围为:[80, 2048],AO取值范围为:[80, 4096]。

静态属性。

chn_cnt

支持的通道数目。

AI取值:1、2、4、8、16、20。

AO取值:1、2、8。

(内置Codec输入最多支持2个通道,外置Codec输入最多支持OT_AI_MAX_CHN_NUM个通道;内置Codec输出最多支持2个通道,外置Codec输出最多支持OT_AO_MAX_CHN_NUM – 1个通道)。

clk_share

配置AI设备是否复用AO设备的帧同步时钟及位流时钟。

取值:0、1。

0:不复用;

1:复用。

i2s_type

配置设备I2S类型。

AI取值:OT_AIO_I2STYPE_INNERCODEC, OT_AIO_I2STYPE_EXTERN, OT_AIO_I2STYPE_DMIC

AO取值:OT_AIO_I2STYPE_INNERCODEC, OT_AIO_I2STYPE_EXTERN,OT_AIO_I2STYPE_INNERHDMI。

静态属性。

【注意事项】

每帧的采样点个数point_num_per_frame和采样率sample_rate的取值决定了硬件产生中断的频率,频率过高会影响系统的性能,跟其他业务也会相互影响,建议这两个参数的取值满足算式:(point_num_per_frame*1000)/ sample_rate>=10,比如在采样率为16000Hz时,建议设置采样点个数大于或者等于160。

【相关数据类型及接口】

ot_ai_chn_param

【说明】

定义通道参数结构体。

【定义】

typedef struct {
    td_u32 usr_frame_depth;
} ot_ai_chn_param;

【成员】

成员名称

描述

usr_frame_depth

音频帧缓存深度。该参数取值范围:[2, frame_num], 并且不能大于30。

frame_num请参见ot_aio_attr。

【注意事项】

无。

【相关数据类型及接口】

无。

ot_audio_frame

【说明】

定义音频帧结构体。

【定义】

typedef struct {
    ot_audio_bit_width   bit_width;     /* audio frame bit_width */
    ot_audio_snd_mode    snd_mode;    /* audio frame mono or stereo mode */
    td_u8 ATTRIBUTE * virt_addr[OT_AUDIO_FRAME_CHN_NUM];
    ot_phys_addr_t ATTRIBUTE phys_addr[OT_AUDIO_FRAME_CHN_NUM];
    td_u64  time_stamp;                 /* audio frame time stamp */
    td_u32  seq;                        /* audio frame seq */
    td_u32  len;                        /* data length per channel in frame */
    td_u32  pool_id[OT_AUDIO_FRAME_CHN_NUM];
} ot_audio_frame;

【成员】

成员名称

描述

bit_width

音频采样精度。

snd_mode

音频声道模式。

virt_addr

音频帧数据虚拟地址。

phys_addr

音频帧数据物理地址。

time_stamp

音频帧时间戳。

以μs为单位。

seq

音频帧序号。

len

音频帧大小。

以byte为单位。

pool_id

音频帧缓存池ID。

【注意事项】

  • len(音频帧大小)指单个声道的数据长度。
  • 单声道数据存放的虚拟地址为virt_addr [0],长度为len;立体声数据按左右声道分开存放,虚拟地址virt_addr [0]存放长度为len的左声道数据,虚拟地址virt_addr [1]存放长度为len的右声道数据。

【相关数据类型及接口】

无。

ot_aec_frame

【说明】

定义音频回声抵消参考帧信息结构体。

【定义】

typedef struct {
    ot_audio_frame ref_frame;      /* AEC reference audio frame */
    td_bool     valid;             /* whether frame is valid */
    td_bool     sys_bind;          /* whether is sysbind */
} ot_aec_frame;

【成员】

成员名称

描述

ref_frame

回声抵消参考帧结构体。

valid

参考帧有效的标志。

TD_TRUE:参考帧有效。

TD_FALSE:参考帧无效,无效时不能使用此参考帧进行回声抵消。

sys_bind

AI和AENC是否系统绑定。

【注意事项】

无。

【相关数据类型及接口】

无。

ot_audio_agc_cfg

【说明】

定义音频自动增益控制配置信息结构体。

【定义】

typedef struct {
    td_bool usr_mode; 
    td_s8 target_level;
    td_s8 noise_floor;
    td_s8 max_gain;
    td_s8 adjust_speed;
    td_s8 improve_snr;
    td_s8 use_hpf;
    td_s8 output_mode;
    td_s16 noise_suppress_switch;
    td_s32 reserved;
} ot_audio_agc_cfg;

【成员】

成员名称

描述

usr_mode

是否采用用户模式:

0:自动模式

1:用户模式

默认为0关闭

target_level

目标电平,该值为经过AGC处理后的最大电平门限;范围:[-40, -1]dB;调整步长1dB

noise_floor

噪声底线;范围:TalkVQE/AO VQE [-65, -20]dB, RecordVQE [-50, -20]dB;调整步长1dB。

max_gain

最大增益;范围:[0, 30]dB;调整步长1dB

adjust_speed

调整速度;范围:[0, 10];值越大,调整速度越快。

注:值为0时,AGC不会放大信号。

improve_snr

提高信噪比开关;范围:[0:不提升, 1:上限3dB, 2:上限6dB],调节无效,保留参数。

use_hpf

打开高通滤波标志,该值为配置AGC内置高通滤波截止频率;范围:[0:关闭, 1:80Hz, 2:120Hz, 3:150Hz, 4:300Hz, 5:500Hz]

注:use_hpf参数在RecordVQE算法中无效。

output_mode

输出模式,低于noise_floor的信号输出静音;范围:[0:关闭, 1:打开]。

注:输出模式需要配合噪声底线使用,配置为1后,低于噪声底线的信号将会静音输出。

noise_suppress_switch

噪声抑制开关;

0表示关闭,1表示开启

reserved

保留。

【注意事项】

【相关数据类型及接口】

ot_ai_aec_cfg

【说明】

定义音频回声抵消配置信息结构体。

【定义】

typedef struct {
    td_bool usr_mode;
    td_s8 cozy_noisy_mode; /* cozy noisy mode:0 close,1 open, default 1*/
    td_s8 near_all_pass_energy;                
    td_s8 near_clean_sup_energy;               
    td_s16 double_talk_threshold;              
    td_s16 echo_band_low;                   
    td_s16 echo_band_high;                    
    td_s16 echo_band_low2;                     
    td_s16 echo_band_high2;                    
    td_s16 erl_band[OT_AEC_ERL_BAND_NUM];    
    td_s16 erl[OT_AEC_ERL_BAND_VALUE_NUM];   
    td_s16 voice_protect_freq_l;             
    td_s16 voice_protect_freq_l1;   
    td_s32 reserved;
} ot_ai_aec_cfg;

【成员】

成员名称

描述

usr_mode

是否采用用户模式:

0:自动模式

1:用户模式

默认为0关闭

cozy_noisy_mode

是否开启舒适噪声补偿模式:

0:关闭

1:开启

默认为1开启

near_all_pass_energy

远端参考信号能量阈值,用于判断近端MIC信号是否透传,当远端参考信号的RMS振幅持续一段时间小于该阈值时,会将近端MIC信号全部透传。默认为1,取值:[0:-62dBFS, 1:-52dBFS, 2:-42dBFS]

near_clean_sup_energy

调节无效,保留参数

double_talk_threshold

单双讲判断门限值。门限越小,越容易被判断为双讲状态,此时回声抑制力度减弱,偏向于保护近端语音,反之,门限越大,越容易被判断为单讲状态,此时回声抑制力度增强,倾向于消回声。定标为Q15,默认取16384,取值:[0, 32767]

echo_band_low

语音处理频段1,低频参数,8kHz下配置参数[1, 63),16kHz下配置参数[1, 127),默认10

echo_band_high

语音处理频段1,高频参数, 8kHz下配置参数(echo_band_low, 63], 16kHz下配置参数(echo_band_low, 127],默认41

echo_band_low2

语音处理频段2,低频参数,8kHz下配置参数[1, 63),16kHz下配置参数[1, 127),默认47

echo_band_high2

语音处理频段2,高频参数,8kHz下配置参数(echo_band_low2, 63],默认63,16kHz下配置参数(echo_band_low2, 127],默认72

erl_band

ERL(回波衰减路径)保护频段数组参数,8kHz下配置参数[1, 63], 16kHz下配置参数[1, 127],其中,配置频段参数必须每段递增,即erl_band[n+1] > erl_band[n]。建议配置参数{4, 6, 36, 49, 50, 51};

erl

ERL(回波衰减路径)频段保护值数组参数,配合参数erl_band [6]使用,erl_band将erl值分频段设置,0至 erl_band[0]频带对应值为erl[0],erl_band[0] 至 erl_band[1]频带对应值为erl[1],以此类推,erl_band[5]至MaxBand频带对应值为erl[6],其中MaxBand在8kHz下为65,在16kHz下为129。该参数对应取值越小,保护力度越大,参数范围[0, 18],建议配置参数{7, 10, 16, 10, 18, 18, 18}

voice_protect_freq_l

近端低频保护区域频点参数, 8kHz下配置参数[1, 63),16kHz下配置参数[1, 127),默认为3

voice_protect_freq_l1

近端低频保护区域频点参数1,8kHz下配置参数(voice_protect_freq_l, 63],16kHz下配置参数(voice_protect_freq_l, 127],默认为6

reserved

保留,未使用。

【注意事项】

  • 当用户模式开启时,其他参数才生效,否则按照ot_ai_talk_vqe_cfg中的工作模式work_state对应的默认值来配置。
  • 配置参数时,只有在用户模式开启时,才会对高级参数做正确性检查,只有正确的高级参数才能配置成功。

【相关数据类型及接口】

ot_ai_talk_vqe_cfg

ot_audio_anr_cfg

【说明】

定义音频语音降噪功能配置信息结构体。

【定义】

typedef struct {
    td_bool usr_mode;   
    td_s16 nr_intensity;       
    td_s16 noise_db_threshold;        
    td_s8  music_probe_switch;        
    td_s32 reserved;
} ot_audio_anr_cfg;

【成员】

成员名称

描述

usr_mode

是否采用用户模式:

0:自动模式;

1:用户模式。

默认为0关闭。

nr_intensity

降噪力度配置,取值范围:[0, 25],配置值越大降噪力度越高,但同时也会带来细节音的丢失/损伤,配置为0时降噪力度最弱。

noise_db_threshold

噪声门限配置,取值范围:[30, 60],调节无效,保留参数。

music_probe_switch

音乐检测开关,取值范围:[0, 1],调节无效,保留参数。

reserved

保留,未使用。

【注意事项】

  • 当用户模式开启时,以上各个高级参数才生效,否则按照ot_ai_talk_vqe_cfg /ot_ao_vqe_cfg中的工作模式work_state对应的默认值来配置。
  • 配置参数时,只有在用户模式开启时,才会对高级参数做正确性检查,只有正确的高级参数才能配置成功。

【相关数据类型及接口】

ot_audio_hpf_freq

【说明】

定义音频高通滤波截止频率。

【定义】

typedef enum {
    OT_AUDIO_HPF_FREQ_80   = 80,    /* 80Hz */
    OT_AUDIO_HPF_FREQ_120  = 120,   /* 120Hz */
    OT_AUDIO_HPF_FREQ_150  = 150,   /* 150Hz */
    OT_AUDIO_HPF_FREQ_BUTT,
} ot_audio_hpf_freq;

【成员】

成员名称

描述

OT_AUDIO_HPF_FREQ_80

截止频率为80Hz。

OT_AUDIO_HPF_FREQ_120

截止频率为120Hz。

OT_AUDIO_HPF_FREQ_150

截止频率为150Hz。

【注意事项】

无。

【相关数据类型及接口】

无。

ot_audio_hpf_cfg

【说明】

定义音频高通滤波功能配置信息结构体。

【定义】

typedef struct {
    td_bool usr_mode;
    ot_audio_hpf_freq hpf_freq; /* freq to be processed */
} ot_audio_hpf_cfg;

【成员】

成员名称

描述

usr_mode

是否采用用户模式:

0:自动模式

1:用户模式

默认为0关闭。

hpf_freq

高通滤波截止频率选择:

80:截止频率为80Hz

120:截止频率为120Hz

150:截止频率为150Hz

取值:TalkVQE/AO VQE (80Hz,120Hz,150Hz),RecordVQE(80Hz)

【注意事项】

  • 当用户模式开启时,高级参数才生效,否则按照ot_ai_talk_vqe_cfg/ot_ao_vqe_cfg/ot_ai_record_vqe_cfg中的工作模式对应的默认值来配置。
  • 配置参数时,只有在用户模式开启时,才会对高级参数做正确性检查,只有正确的高级参数才能配置成功。

【相关数据类型及接口】

ot_audio_hs_cfg

【说明】

定义抗啸叫功能配置信息结构体。

【定义】

typedef struct { 
    td_bool usr_mode; 
    td_s32 hold_time;   
    td_s32 min_gain;    
    td_s32 threshold;   
    td_s32 smooth_time; 
    td_s32 freq_move;   
    td_u16 reserved[4];
} ot_audio_hs_cfg;

【成员】

成员名称

描述

usr_mode

是否采用用户模式:

0:自动模式

1:用户模式

默认为0关闭。

hold_time

调整抑制啸叫增益的等待时间(ms),取值范围:[0, 1000],默认值为100。越大则调整增益之前等待的时间越久。

min_gain

啸叫抑制力度,取值范围:[0, 100],默认值为1。值越小抑制力度越大。

threshold

啸叫判定阈值,取值范围:[0, 50],默认值为10。值越大越容易判断成啸叫。

smooth_time

信号能量平滑时间(ms),取值范围:[0, 1000],默认值为200。值越大抑制力度越小。

freq_move

移频力度(Hz),取值范围:[0, 30],默认值为5。数字越大可能会对抗啸叫越有帮助,但是对语音损伤也越大。

reserved[4]

保留参数。

【注意事项】

  • 当用户模式开启时,高级参数才生效,否则按照ot_ao_vqe_cfg中的工作模式对应的默认值来配置。
  • 配置参数时,只有在用户模式开启时,才会对高级参数做正确性检查,只有正确的高级参数才能配置成功。

【相关数据类型及接口】

ot_ao_vqe_cfg

ot_ai_rnr_cfg

【说明】

定义音频录音噪声消除功能配置信息结构体。

【定义】

typedef struct {
    td_bool usr_mode;           /* mode 0: auto, mode 1: mannual. */
    td_s32  nr_mode;            /* mode 0: floor noise; 1:ambient noise */
    td_s32  max_nr_level;       /* max NR level range:[2,20]dB */
    td_s32  noise_threshold;    /* noise threshold, range:[-80, -20] */
} ot_ai_rnr_cfg;

【成员】

成员名称

描述

usr_mode

是否采用用户模式:

0:自动模式

1:用户模式

默认为0关闭。

nr_mode

降噪模式。

0:降底噪;

1:降环境噪声。

调节无效,保留参数。

max_nr_level

最大降噪能力;范围:[2, 20]dB;调整步长1dB。

noise_threshold

噪声阈值;范围: [-80, -20]。工作采样率为16kHz时,参数值在[-80, -45]调节有效,工作采样率为48kHz时,参数值在[-45, -20]调节有效。噪声阈值越大,降底噪效果越明显,但是对语音可能会造成损伤。

【注意事项】

  • 当用户模式开启时,高级参数才生效,否则按照ot_ai_record_vqe_cfg中的工作模式对应的默认值来配置。
  • 配置参数时,只有在用户模式开启时,才会对高级参数做正确性检查,只有正确的高级参数才能配置成功。
  • 当nr_mode为1时,不支持48kHz工作采样率(work_sample_rate)。

【相关数据类型及接口】

无

ot_vqe_work_state

【说明】

定义声音质量增强的工作模式。

【定义】

typedef enum {
    OT_VQE_WORK_STATE_COMMON  = 0,
    OT_VQE_WORK_STATE_MUSIC   = 1,
    OT_VQE_WORK_STATE_NOISY   = 2,
} ot_vqe_work_state;

【成员】

成员名称

描述

OT_VQE_WORK_STATE_COMMON

一般模式。

OT_VQE_WORK_STATE_MUSIC

音乐模式。

OT_VQE_WORK_STATE_NOISY

噪声模式。

【注意事项】

无。

【相关数据类型及接口】

ot_vqe_record_type

【说明】

定义录音类型。

【定义】

typedef enum {
    OT_VQE_RECORD_NORMAL      = 0,
    OT_VQE_RECORD_BUTT,
} ot_vqe_record_type;

【成员】

成员名称

描述

OT_VQE_RECORD_NORMAL

标准类型。

【注意事项】

无。

【相关数据类型及接口】

ot_ai_record_vqe_cfg

ot_audio_eq_cfg

【说明】

定义音频均衡器功能配置信息结构体。

【定义】

typedef struct {
    td_s8  gain_db[OT_VQE_EQ_BAND_NUM];
    td_s32 reserved;
} ot_audio_eq_cfg;

【成员】

成员名称

描述

gain_db

EQ频段增益调节,频段依次为100Hz,200Hz, 250Hz, 350Hz, 500Hz, 800Hz, 1.2kHz, 2.5kHz, 4kHz, 8kHz.其中,8kHz只有在工作采样率配置为16kHz时有效。每个频段取值范围:TalkVQE/AO VQE [-100, 10]dB, RecordVQE [-50, 20]dB;调整步长1dB。

reserved

保留。

【注意事项】

该功能没有自动模式,需通过高级参数的配置生效。

【相关数据类型及接口】

无。

ot_ai_hdr_cfg

【说明】

定义音频高动态范围功能配置信息结构体。

【定义】

typedef struct {
    td_bool usr_mode;
    td_s32 min_gain_db;
    td_s32 max_gain_db;
    td_s32 mic_gain_db;
    td_s32 mic_gain_step_db;
    func_gain_call_back callback;
} ot_ai_hdr_cfg;

【成员】

成员名称

描述

usr_mode

是否采用用户模式。

0:自动模式;

1:用户模式。

默认为0,表示采用默认的内置audio codec方式调节。

min_gain_db

CODEC允许最小配置增益,取值范围:[0, 120],默认值0。

max_gain_db

CODEC允许最大配置增益,取值范围:[0, 120],默认值50。

mic_gain_db

CODEC当前配置增益,取值范围:[min_gain_db, max_gain_db],默认值为内置audio codec输入增益。

mic_gain_step_db

增益调整步长,取值范围:[1, 3],默认值2。

callback

修改CODEC增益的函数指针,默认值为内置audio codec的增益调节函数指针。

【注意】

  • 该功能需要用户根据CODEC配置相应的参数。
  • 当用户模式开启时,高级参数才生效,否则按照ot_ai_record_vqe_cfg中的工作模式对应的默认值来配置。
  • 配置参数时,只有在用户模式开启时,才会对高级参数做正确性检查,只有正确的高级参数才能配置成功。

【相关数据类型及接口】

无

ot_ai_drc_cfg

【说明】

定义音频自动音量控制功能配置信息结构体。

【定义】

typedef struct {
    td_bool usr_mode;
    td_s16  attack_time;
    td_s16  release_time;
    td_s16 old_level_db[OT_VQE_DRC_SEC_NUM];
    td_s16 new_level_db[OT_VQE_DRC_SEC_NUM];
} ot_ai_drc_cfg;

【成员】

成员名称

描述

usr_mode

是否采用用户模式。

0:自动模式;

1:用户模式。

默认为0关闭。

attack_time

信号从大变小的时间(ms),取值范围HiFiVqe[10, 250],RecordVqe [10, 126]

release_time

信号从小变大的时间(ms),取值范围HiFiVqe [10, 250] ,RecordVqe [10, 126]

old_level_db

动态曲线处理前的拐点电平Q4,取值范围[-1440, 0], 从大往小存储,即old_level_db [n]>= old_level_db [n+1];默认值[0, -472, -792, -960, -1280]。同时必须满足new_level_db [n]>= old_level_db [n]。

new_level_db

动态曲线处理后的拐点电平Q4,取值范围[-1440,0], 从大往小存储,即new_level_db [n]>= new_level_db [n+1];默认值[0, -174, -528, -736, -1200]。同时必须满足new_level_db [n]>= old_level_db [n]。

【注意】

  • 当用户模式开启时,高级参数才生效,否则按照ot_ai_record_vqe_cfg中的工作模式对应的默认值来配置。
  • 配置参数时,只有在用户模式开启时,才会对高级参数做正确性检查,只有正确的高级参数才能配置成功。
  • DRC动态曲线是在以old_level_db为横坐标,new_level_db为纵坐标的二维坐标系中,由五个拐点依次相连的形成的折线图,拐点坐标为(old_level_db [n], new_level_db [n]),其中n从0到4。输入数据的电平按照动态曲线的映射进行调整处理。

【相关数据类型及接口】

无

ot_ai_talk_v2_pnr_cfg

【说明】

定义音频TalkVqeV2二次降噪功能配置信息结构体。

【定义】

typedef struct {
    td_bool usr_mode;   
    td_s16 min_gain_limit;
    td_s16 snr_prior_limit;
    td_s16 ht_threshold;
    td_s16 hs_threshold;
    td_s16 alpha_ph;
    td_s16 alpha_psd;
    td_s16 prior_snr_fixed;
    td_s16 cep_threshold;
    td_s16 cep_amp;
    td_s16 low_freq_protect;
    td_s16 speech_protect_threshold;
    td_s16 hem_enable;
    td_s16 tcs_enable;
    td_s16 reserved[3];
} ot_ai_talk_v2_pnr_cfg;

【成员】

成员名称

描述

usr_mode

是否采用用户模式:

0:自动模式

1:用户模式

默认为0关闭。

min_gain_limit

所允许的最大降噪力度,取值范围:[1, 32767],默认值为5827。值越小,噪声抑制能力越强。

snr_prior_limit

先验信噪比最小值,取值范围:[0, 32767],默认值为1036。值越小,噪声抑制能力越强。

ht_threshold

语音判定阈值,取值范围:[0, 80],默认值为10。值越小,越容易判定为语音。

hs_threshold

谐波检测阈值,取值范围:[100, 1100],默认值为100。值越小,越容易判定为语音。

alpha_ph

语音概率平滑系数,取值范围:[0, 100],默认值为90。调节无效,保留参数。

alpha_psd

噪声估计平滑系数,取值范围:[0, 100],默认值为65。调节无效,保留参数。

prior_snr_fixed

固定先验信噪比,取值范围:[1, 99],默认值为30。值越小,越保护语音。

cep_threshold

倒谱平滑语音阈值,取值范围:[0, 100],默认值为16。值越小,越保护语音,tcs_enable为1时调节有效。

cep_amp

语音保护参数,取值范围:[100, 1000],默认值为120。值越大,越保护语音,tcs_enable为1时调节有效。

low_freq_protect

低频信号保护,取值范围:[0, 1],默认值为1。

0代表关闭,1代表开启。

speech_protect_threshold

语音保护参数,取值范围:[0, 99],默认值为75。值越大,越保护语音。

hem_enable

谐波增强开关,取值范围:[0, 1],默认值为0。

0代表关闭,1代表开启。

tcs_enable

倒谱平滑开关,取值范围:[0, 1],默认值为1。

0代表关闭,1代表开启。

reserved[3]

保留参数。

【注意事项】

  • 当用户模式开启时,以上各个高级参数才生效,否则按照ot_ai_talk_vqe_v2_cfg中的工作模式work_state对应的默认值来配置。
  • 配置参数时,只有在用户模式开启时,才会对高级参数做正确性检查,只有正确的高级参数才能配置成功。

【相关数据类型及接口】

ot_ai_talk_vqe_v2_cfg

ot_ai_talk_v2_nr_cfg

【说明】

定义音频TalkVqeV2降噪功能配置信息结构体。

【定义】

typedef struct {
    td_bool usr_mode;   
    td_s16 min_gain_limit;       
    td_s16 snr_prior_limit;        
    td_s16 ht_threshold;        
    td_s16 hs_threshold;
    td_s16 prior_snr;
    td_s16 snr_smooth_factor;
    td_s16 speech_prob_smooth_factor;
    td_s16 noise_pwr_smooth_factor;
    td_s8 low_freq_suppress_enable;
    td_s8 low_freq_gain_suppress;
    td_s16 env_mode;
    td_s16 cep_alpha;
    td_s16 cep_threshold;
    td_s16 cep_amp;
    td_s8 gain_sm_mode;
    td_s8 gain_sm_alpha1;
    td_s8 gain_sm_alpha2;
    td_s8 gain_sm_alpha3;
    td_s16 reserved[1];
} ot_ai_talk_v2_nr_cfg;

【成员】

成员名称

描述

usr_mode

是否采用用户模式:

0:自动模式

1:用户模式

默认为0关闭。

min_gain_limit

所允许的最大降噪力度,取值范围:[1, 32767],默认值为1036。值越小,噪声抑制能力越强。

snr_prior_limit

先验信噪比最小值,取值范围:[1, 32767] ,默认值为33。值越小,噪声抑制能力越强。

ht_threshold

语音判定阈值,取值范围:[0, 1000],默认值为130。调节无效,保留参数。

hs_threshold

谐波检测阈值,取值范围:[100, 1100],默认值为100。调节无效,保留参数。

prior_snr

先验信噪比,取值范围:[0, 20],默认值为10。值越大,越偏向降噪。

snr_smooth_factor

信噪比平滑系数,取值范围:[5000, 10000],默认值为6666。值越大,底噪跟踪越平稳,降噪力度越大。注:参数取值和效果并非线性关系。

speech_prob_smooth_factor

语音概率平滑系数,取值范围:[5000, 10000],默认值为7900。值越大,跟踪越平稳,语音保留越多。注:参数取值和效果并非线性关系。

noise_pwr_smooth_factor

噪声能量平滑系数,取值范围:[5000, 10000],默认值为7594。值越大,底噪越平滑,但噪声收敛速度也更慢,人声损伤越多。

low_freq_suppress_enable

低频抑制开关,取值范围:[0, 1],默认值为1。0代表关闭,1代表开启,在低频噪声较大时开启有助于语音判定,更好得保护语音。

low_freq_gain_suppress

低频增益抑制模式,对0到300Hz的低频噪声进行抑制,取值范围:[0, 2],默认值为2。0代表关闭,1代表输出抑制,2代表平滑抑制,为2时的抑制强度在为0和1之间,当low_freq_suppress_enable为1且开启FMP功能模块时调节有效。

env_mode

噪声环境模式选择,取值范围:[0, 1],默认值为1。0代表indoor,1代表outdoor,outdoor模式下300Hz以下频段降噪力度更大,当low_freq_suppress_enable低频抑制开关为1,开启FMP功能模块,且打开low_freq_gain_suppress低频增益抑制模式时调节有效。

cep_alpha

噪声平滑速率,取值范围:[0, 100],默认值100,值越大噪声越平滑,但可能会损伤语音,gain_sm_mode为0时调节有效。

cep_threshold

倒谱平滑语音阈值,取值范围:[0, 100],默认值10,值越小,越保护语音,但可能会泄漏底噪,gain_sm_mode为0时调节有效。

cep_amp

语音保护参数,取值范围:[0,1000],默认值200,值越大越保护语音,但可能会抬升底噪,gain_sm_mode为0时调节有效。

gain_sm_mode

降噪平滑模式,取值范围:[0, 1],默认值为1。0代表倒谱平滑模式,1代表增益平滑模式,倒谱平滑模式相比增益平滑模式降噪效果更好,但语音损伤更厉害。

gain_sm_alpha1

语音降噪平滑系数,取值范围:[0, 100],默认值30,越大底噪越平稳,但同时混响感可能会变重,gain_sm_mode为1时调节有效。

gain_sm_alpha2

非语音降噪平滑系数,取值范围:[0, 100],默认值70,越大底噪越平稳,但同时混响感可能会变重,gain_sm_mode为1时调节有效。

gain_sm_alpha3

300Hz以下低频降噪平滑系数,取值范围:[0, 100],默认值80,值越小,低频降噪抑制力度越大,gain_sm_mode为1时调节有效。

reserved[1]

保留参数。

【注意事项】

  • 调整降噪强度优先调节参数min_gain_limit和snr_prior_limit,例如需要降x dB噪声时,参数配置如下:

    • min_gain_limit = power(10, -x/20)*32768;
    • snr_prior_limit = power(10, -x/10)*32768;
  • 当用户模式开启时,以上各个高级参数才生效,否则按照ot_ai_talk_vqe_v2_cfg中的工作模式work_state对应的默认值来配置。

  • 配置参数时,只有在用户模式开启时,才会对高级参数做正确性检查,只有正确的高级参数才能配置成功。

【相关数据类型及接口】

ot_ai_talk_vqe_v2_cfg

ot_ai_talk_v2_agc_cfg

【说明】

定义音频TalkVqeV2自动增益控制功能配置信息结构体。

【定义】

typedef struct {
    td_bool usr_mode;
    td_s16 target_level;
    td_s16 max_gain;
    td_s16 min_gain;
    td_s16 up_gradient_ratio;  
    td_s16 down_gradient_ratio;
    td_s16 decay;              
    td_s32 vad_threshold;      
    td_s16 vad_ctrl;    
    td_s16 reserved[3];     
} ot_ai_talk_v2_agc_cfg;

【成员】

成员名称

描述

usr_mode

是否采用用户模式:

0:自动模式

1:用户模式

默认为0关闭。

target_level

目标电平,取值范围:[-120, 0],默认值为-16。值越大,增益越大。

max_gain

所允许的最大增益,取值范围:[-120, 240],默认值为96。值越大,增益越大。同时必须满足max_gain>=min_gain。

min_gain

所允许的最小增益,取值范围:[-120, 0],默认值为-60。值越大,增益越大。

up_gradient_ratio

抬升速度,取值范围:[1, 30],默认值为9。值越大,输入信号抬升的越快。

down_gradient_ratio

压制速度,取值范围:[1, 30],调节无效,保留参数。

decay

慢包络下降速率控制,取值范围:[-650, 0],默认值为-260。值越小,包络下降越快,音量抬升越快。

vad_threshold

语音判断阈值,取值范围:[0, 1024],默认值为100。值越大,小语音越可能判断为噪声,开启NR功能模块时调节有效。

vad_ctrl

vad控制开关,取值范围:[0, 1],默认值为1。0代表关闭vad检测,非人声时的噪声会随着语音增益变大同步变大,1代表开启vad检测,非人声时的噪声不会随着语音增益变大同步变大,开启NR功能模块时调节有效。

reserved[3]

保留参数。

【注意事项】

  • 当用户模式开启时,以上各个高级参数才生效,否则按照ot_ai_talk_vqe_v2_cfg中的工作模式work_state对应的默认值来配置。
  • 配置参数时,只有在用户模式开启时,才会对高级参数做正确性检查,只有正确的高级参数才能配置成功。

【相关数据类型及接口】

ot_ai_talk_vqe_v2_cfg

ot_ai_talk_v2_eq_cfg

【说明】

定义音频TalkVqeV2均衡器功能配置信息结构体。

【定义】

typedef struct {
    td_bool usr_mode;
    td_s8  gain_db[OT_TALKVQEV2_EQ_BAND_NUM];
} ot_ai_talk_v2_eq_cfg;

【成员】

成员名称

描述

usr_mode

是否采用用户模式:

0:自动模式

1:用户模式

默认为0关闭。

gain_db

EQ频段增益调节,频段依次为:

60,100,150,200,250,350,500,800,1200,1600,2000,2400,2500,2800,3100,3400,3600,3800,3900,4000,4500,5000,5500,6000,6500,7000,7300,7600,7800,8000。每个频段取值范围为 [-50, 20]dB;调整步长为1dB。

【注意事项】

  • 当用户模式开启时,以上各个高级参数才生效,否则按照ot_ai_talk_vqe_v2_cfg中的工作模式work_state对应的默认值来配置。
  • 配置参数时,只有在用户模式开启时,才会对高级参数做正确性检查,只有正确的高级参数才能配置成功。

【相关数据类型及接口】

ot_ai_talk_vqe_v2_cfg

ot_ai_talk_v2_aec_cfg

【说明】

定义音频TalkVqeV2回声抵消功能配置信息结构体。

【定义】

typedef struct { 
    td_bool usr_mode; 
    td_u16 pure_delay;
    td_u16 switch_nlp;
    td_u16 band1;
    td_u16 band2;
    td_u16 band3;
    td_u16 band4;
    td_u16 gain_lower_limit1;
    td_u16 gain_lower_limit2;
    td_u16 gain_lower_limit3;
    td_u16 gain_lower_limit4;
    td_u16 gain_lower_limit5;
    td_u16 ols_on;
    td_u16 speaker_nl_on;
    td_u16 block_num;
    td_u16 echo_boost1;
    td_u16 echo_boost2;
    td_u16 echo_boost3;
    td_u16 echo_boost4;
    td_u16 echo_boost5;
    td_u16 reserved[1];
} ot_ai_talk_v2_aec_cfg;

【成员】

成员名称

描述

usr_mode

是否采用用户模式:

0:自动模式

1:用户模式

默认为0关闭。

pure_delay

参考信号和回声之间延时,取值范围为[0, 300],默认值为0,单位:ms。

switch_nlp

非线性滤波开关,取值范围为[0,1],默认值为1。 0代表关闭,1代表开启。

band1

增益控制子带1,取值范围为[0, 6000],默认值为100,单位:Hz。

band2

增益控制子带2,取值范围为[band1, 6000],默认值为1500,单位: Hz。

band3

增益控制子带3,取值范围为[band2, 6000],默认值为3000,单位: Hz。

band4

增益控制子带4,取值范围为[band3, 6000],默认值为4500,单位: Hz。

gain_lower_limit1

0-band1子带控制增益下限,越大双讲效果越好,但是回声残差也越大,取值范围为[0, 100],默认值为0。

gain_lower_limit2

band1-band2子带控制增益下限,效果同上,取值范围为[0, 100],默认值为0。

gain_lower_limit3

band2-band3子带控制增益下限,效果同上,取值范围为[0, 100],默认值为0。

gain_lower_limit4

band3-band4子带控制增益下限,效果同上,取值范围为[0, 100],默认值为0。

gain_lower_limit5

band4-8kHz 子带控制增益下限,效果同上,取值范围为[0, 100],默认值为0。

ols_on

削波场景回声抑制开关,取值范围:[0, 1],默认值 1。0代表关闭,1代表开启。

speaker_nl_on

喇叭非线性失真回声抑制开关,取值范围:[0, 1],默认值1。0代表关闭,1代表开启。

block_num

参考信号处理时间窗口,数值越大能有效应对更大延迟的回声信号,取值范围为[3, 30],默认值为6。

echo_boost1

0-band1子带非线性回声抑制系数,值越大,子带的非线性回声抑制效果越大,但可能产生一定的双讲剪切现象,取值范围为[1, 100],默认值为1。

echo_boost2

band1-band2子带非线性回声抑制系数,效果同上,取值范围为[1, 100],默认值为4。

echo_boost3

band2-band3子带非线性回声抑制系数,效果同上,取值范围为[1, 100],默认值为12。

echo_boost4

band3-band4子带非线性回声抑制系数,效果同上,取值范围为[1, 100],默认值为4。

echo_boost5

band4-8kHz 子带子带非线性回声抑制系数,效果同上,取值范围为[1, 100],默认值为1。

td_u16 reserved[1]

保留参数。

【注意事项】

  • 当用户模式开启时,以上各个高级参数才生效,否则按照ot_ai_talk_vqe_v2_cfg中的工作模式work_state对应的默认值来配置。
  • 配置参数时,只有在用户模式开启时,才会对高级参数做正确性检查,只有正确的高级参数才能配置成功。
  • block_num参数调大后会增加CPU和DDR开销。

【相关数据类型及接口】

ot_ai_talk_vqe_v2_cfg

ot_ai_talk_v2_wnr_cfg

【说明】

定义音频TalkVqeV2降风噪功能配置信息结构体。

【定义】

typedef struct {
    td_bool usr_mode; 
    td_s8 min_gain_limit;
    td_s8 reserved[4];          /* 4: reserved */
} ot_ai_talk_v2_wnr_cfg;

【成员】

成员名称

描述

usr_mode

是否采用用户模式:

0:自动模式

1:用户模式

默认为0关闭。

min_gain_limit

所允许的最大降噪力度,取值范围:[1, 8],默认值为8,值越大,所允许的最大降噪力度越强。当数值为N时,表示所允许的最大降噪力度为6 * N dB。

reserved[4]

保留参数。

【注意事项】

  • 当前降风噪功能适用于风力等级为2级风及以下场景,仅对1.5kHz频率以下的风声抑制有效。
  • 在同时开启AGC功能时,如果需要较强的降噪力度,建议调整min_gain_limit参数到2档及以上。

【相关数据类型及接口】

ot_ai_talk_vqe_v2_cfg

ot_ai_talk_v2_fmp_cfg

【说明】

定义音频TalkVqeV2融合功能配置信息结构体。

【定义】

typedef struct { 
    td_bool usr_mode; 
    td_s8 comfort_flag;
    td_s8 comfort_intensity;
} ot_ai_talk_v2_fmp_cfg;

【成员】

成员名称

描述

usr_mode

是否采用用户模式:

0:自动模式

1:用户模式

默认为0关闭。

comfort_flag

开启噪声补偿标记,取值为[0,1],默认值为1。0代表关闭,1代表开启。

comfort_intensity

噪声补偿力度因子,取值范围:[1, 10],默认值为1,即补偿的噪声幅值放大1倍。

【注意事项】

  • 当用户模式开启时,以上各个高级参数才生效,否则按照ot_ai_talk_vqe_v2_cfg中的工作模式work_state对应的默认值来配置。
  • 配置参数时,只有在用户模式开启时,才会对高级参数做正确性检查,只有正确的高级参数才能配置成功。
  • 当AEC、WNR、DEREVERB、HS功能模块的降噪力度大于NR时,FMP融合功能模块的噪声补偿功能才会生效。

【相关数据类型及接口】

ot_ai_talk_vqe_v2_cfg

ot_ai_talk_v2_hs_cfg

【说明】

定义音频TalkVqeV2抗啸叫功能配置信息结构体。

【定义】

typedef struct { 
    td_bool usr_mode; 
    td_s32 hold_time;  
    td_s32 min_gain;   
    td_s32 threshold;  
    td_s32 smooth_time;
    td_s32 freq_move;  
    td_u16 reserved[4];
} ot_ai_talk_v2_hs_cfg;

【成员】

成员名称

描述

usr_mode

是否采用用户模式:

0:自动模式

1:用户模式

默认为0关闭。

hold_time

调整抑制啸叫增益的等待时间(ms),取值范围:[0, 1000],默认值为100。越大则调整增益之前等待的时间越久。

min_gain

啸叫抑制力度,取值范围:[0, 100],默认值为1。值越小抑制力度越大。

threshold

啸叫判定阈值,取值范围:[0, 50],默认值为20。值越大越容易判断成啸叫。

smooth_time

信号能量平滑时间(ms),取值范围:[0, 1000],默认值为200。值越大抑制力度越小。

freq_move

移频力度(Hz),取值范围:[0, 30],默认值为5。值越大可能会对抗啸叫越有帮助,但是对语音损伤也越大。

reserved[4]

保留参数。

【注意事项】

  • 当用户模式开启时,以上各个高级参数才生效,否则按照ot_ai_talk_vqe_v2_cfg中的工作模式work_state对应的默认值来配置。
  • 配置参数时,只有在用户模式开启时,才会对高级参数做正确性检查,只有正确的高级参数才能配置成功。

【相关数据类型及接口】

ot_ai_talk_vqe_v2_cfg

ot_ai_talk_vqe_cfg

【说明】

定义音频输入声音质量增强(Talk)配置信息结构体。

【定义】

typedef struct {
    td_u32            open_mask;
    td_s32            work_sample_rate;
    td_s32            frame_sample;
    ot_vqe_work_state work_state;
    ot_audio_hpf_cfg  hpf_cfg;
    ot_ai_aec_cfg     aec_cfg;
    ot_audio_anr_cfg  anr_cfg;
    ot_audio_agc_cfg  agc_cfg;
    ot_audio_eq_cfg   eq_cfg;
} ot_ai_talk_vqe_cfg;

【成员】

成员名称

描述

open_mask

TalkVQE的各功能使能的Mask值,需开启至少一个功能。

work_sample_rate

工作采样频率。该参数为内部功能算法工作采样率。

取值范围:8kHz/16kHz。默认值为8kHz。

frame_sample

VQE的帧点数。

支持范围:[80, 4096]

work_state

工作模式。

hpf_cfg

高通滤波功能相关配置信息。

aec_cfg

回声抵消功能相关配置信息。

anr_cfg

语音降噪功能相关配置信息。

agc_cfg

自动增益控制相关配置信息。

eq_cfg

均衡器相关配置信息。

【注意事项】

  • 如果需要使用EQ,需要同时开启AGC。
  • TalkVQE各个场景模式下的默认参数配置如表1所示。

表 1 TalkVQE各个场景模式下的默认参数配置表

参数

场景模式

COMMON

MUSIC

NOISY

HPF

hpf_freq

OT_AUDIO_HPF_FREQ_120

OT_AUDIO_HPF_FREQ_120

OT_AUDIO_HPF_FREQ_120

AEC

cozy_noisy_mode

1

1

1

ANR

nr_intensity

15

8

15

AGC

target_level

-2

-2

-2

noise_floor

-40

-40

-40

max_gain

15

10

15

adjust_speed

10

5

10

improve_snr

2

0

2

use_hpf

0

0

0

output_mode

0

0

0

noise_suppress_switch

1

0

1

【相关数据类型及接口】

无。

ot_ai_record_vqe_cfg

【说明】

定义音频输入声音质量增强(Record)配置信息结构体。

【定义】

typedef struct {
    td_u32            open_mask;
    td_s32            work_sample_rate;
    td_s32            frame_sample;
    ot_vqe_work_state  work_state;
    td_s32            in_chn_num;
    td_s32            out_chn_num;
    ot_vqe_record_type   record_type;
    ot_audio_hpf_cfg  hpf_cfg;
    ot_ai_rnr_cfg     rnr_cfg;
    ot_ai_hdr_cfg     hdr_cfg;
    ot_ai_drc_cfg     drc_cfg;
    ot_audio_eq_cfg   eq_cfg;
    ot_audio_agc_cfg  agc_cfg;
} ot_ai_record_vqe_cfg;

【成员】

成员名称

描述

open_mask

RecordVQE的各功能使能的Mask值,需开启至少一个功能。

work_sample_rate

工作采样频率。该参数为内部功能算法工作采样率。

取值范围:16kHz或者48kHz。默认值为48kHz。

frame_sample

VQE的帧点数。

支持范围:[80, 4096]

work_state

工作模式。

in_chn_num

VQE处理的输入通道数目。

取值范围:[1, 2]

out_chn_num

VQE处理的输出通道数目。

取值范围:[1, 2]

record_type

录音类型。

hpf_cfg

高通滤波功能相关配置信息。

rnr_cfg

录音噪声消除功能相关配置信息。

hdr_cfg

高动态范围功能相关配置信息。

drc_cfg

动态压缩控制功能配置信息。

eq_cfg

均衡器相关配置信息。

agc_cfg

自动增益控制相关配置信息。

【注意事项】

  • RecordVQE各个场景模式下的默认参数配置如表1所示。

表 1 RecordVQE各个场景模式下的默认参数配置表

参数

场景模式

COMMON

MUSIC

NOISY

HPF

hpf_freq

OT_AUDIO_HPF_FREQ_80

OT_AUDIO_HPF_FREQ_80

OT_AUDIO_HPF_FREQ_80

RNR

nr_mode

0

0

0

max_nr_level

12

12

12

noise_threshold

-45

-45

-45

DRC

attack_time

24

24

24

release_time

100

100

100

old_level_db

{0, -472, -792, -960, -1280}

{0, -472, -792, -960, -1280}

{0, -472, -792, -960, -1280}

new_level_db

{0, -174, -528, -736, -1200}

{0, -174, -528, -736, -1200}

{0, -174, -528, -736, -1200}

AGC

target_level

-3

-3

-3

noise_floor

-50

-50

-50

max_gain

2

2

2

adjust_speed

0

0

0

improve_snr

2

2

2

use_hpf

0

0

0

output_mode

0

0

0

noise_suppress_switch

0

0

0

  • 各解决方案对RecordVQE接口支持情况请参考Tableau 2。
  • 当前仅支持in_chn_num等于out_chn_num的设置。

    • 当AI设备的声道属性为OT_AUDIO_SOUND_MODE_MONO时,in_chn_num、out_chn_num需设置为1;
    • 当AI设备的声道属性为OT_AUDIO_SOUND_MODE_STEREO时,in_chn_num、out_chn_num需设置为2。
  • HDR需要在有内置audio codec的前提下,才能配置为自动模式。

【相关数据类型及接口】

无。

ot_ai_talk_vqe_v2_cfg

【说明】

定义音频输入声音质量增强(TalkVQEV2)配置信息结构体。

【定义】

typedef struct {
    td_u32 open_mask;

    td_s32 work_sample_rate;
    td_s32 frame_sample;
    ot_vqe_work_state work_state;

    td_s32 in_chn_num;
    td_s32 out_chn_num;

    ot_ai_talk_v2_pnr_cfg   pnr_cfg;
    ot_ai_talk_v2_nr_cfg    nr_cfg;
    ot_ai_talk_v2_agc_cfg   agc_cfg;
    ot_ai_talk_v2_eq_cfg    eq_cfg;
    ot_ai_talk_v2_fmp_cfg   fmp_cfg;
    ot_ai_talk_v2_aec_cfg   aec_cfg;
    ot_ai_talk_v2_wnr_cfg   wnr_cfg;
    ot_ai_talk_v2_hs_cfg    hs_cfg;

    td_u8 reserved[8];     /* 8: reserved */
} ot_ai_talk_vqe_v2_cfg; 

【成员】

成员名称

描述

open_mask

Talk Vqe V2的各功能使能的Mask值,需开启至少一个功能。

work_sample_rate

工作采样频率。该参数为内部功能算法工作采样率。

只支持16kHz。

frame_sample

VQE的帧点数。

支持范围:[80, 4096]

work_state

工作模式。

in_chn_num

VQE处理的输入通道数目。

取值范围:[1, 2]

out_chn_num

VQE处理的输出通道数目。

取值范围:[1, 2]

pnr_cfg

二次降噪功能相关配置信息。

nr_cfg

降噪功能相关配置信息。

agc_cfg

自动增益控制相关配置信息。

eq_cfg

均衡器功能相关配置信息。

fmp_cfg

并行处理功能相关配置信息。

aec_cfg

自动回声抵消功能相关配置信息。

wnr_cfg

降风噪相关配置信息。

hs_cfg

抗啸叫功能相关配置信息。

reserved[8]

保留,未使用。

【注意事项】

  • 当前仅支持in_chn_num等于out_chn_num的设置。

    • 当AI设备的声道属性为OT_AUDIO_SOUND_MODE_MONO时,in_chn_num、out_chn_num需设置为1;
    • 当AI设备的声道属性为OT_AUDIO_SOUND_MODE_STEREO时,in_chn_num、out_chn_num需设置为2。
  • 对于需要开启降噪功能的场景,推荐仅开启NR功能模块,不需要开启PNR功能模块。

  • 对于开启AEC、WNR、DEREVERB、NR、PNR、HS中任一功能模块的场景,需要搭配开启FMP功能模块。
  • 使用ss_mpi_ai_set_talk_vqe_v2_attr接口动态设置参数时,仅支持修改功能模块参数“pnr_cfg”、“nr_cfg”、“agc_cfg”、“eq_cfg”、“fmp_cfg”、“aec_cfg”(参数block_num不支持修改)、“wnr_cfg”、“hs_cfg”。
  • Talk Vqe V2各个场景模式下的默认参数配置如Tableau 1所示。

表 1 Talk Vqe V2各个场景模式下的默认参数配置表

参数

场景模式

COMMON

MUSIC

NOISY

PNR

min_gain_limit

5827

11654

2913

snr_prior_limit

1036

2072

518

ht_threshold

10

8

20

hs_threshold

100

100

200

alpha_ph

90

90

90

alpha_psd

65

65

65

prior_snr_fixed

30

20

30

cep_threshold

16

10

16

cep_amp

120

240

120

low_freq_protect

1

1

0

speech_protect_threshold

75

50

75

hem_enable

0

0

0

tcs_enable

1

1

1

NR

min_gain_limit

1036

3276

733

snr_prior_limit

33

327

16

ht_threshold

130

130

130

hs_threshold

100

100

100

prior_snr

10

10

10

snr_smooth_factor

6666

6666

6666

speech_prob_smooth_factor

7900

7900

7900

noise_pwr_smooth_factor

7594

7594

7594

low_freq_suppress_enable

1

1

1

low_freq_gain_suppress

2

2

2

env_mode

1

1

1

cep_alpha

100

100

100

cep_threshold

10

10

10

cep_amp

200

200

200

AGC

target_level

-16

-16

-16

max_gain

96

96

80

min_gain

-60

-60

-60

up_gradient_ratio

9

9

9

decay

-260

-260

-260

vad_threshold

100

60

200

vad_ctrl

1

1

1

EQ

gain_db[0]~ gain_db[9]

{-40,-40,-15,-15,-15,-13,-10,0,0,0}

{-40,-40,-15,-15,-15,-13,-10,0,0,0}

{-40,-40,-15,-15,-15,-13,-10,0,0,0}

gain_db[10]~ gain_db[19]

{1,1,1,1,1,1,1,1,1,1}

{1,1,1,1,1,1,1,1,1,1}

{1,1,1,1,1,1,1,1,1,1}

gain_db[20]~ gain_db[29]

{0,0,0,0,0,0,0,0,0,0}

{0,0,0,0,0,0,0,0,0,0}

{0,0,0,0,0,0,0,0,0,0}

AEC

pure_delay

0

0

0

switch_nlp

1

1

1

band1

100

100

100

band2

1500

1500

1500

band3

3000

3000

3000

band4

4500

4500

4500

gain_lower_limit1

0

0

0

gain_lower_limit2

0

0

0

gain_lower_limit3

0

0

0

gain_lower_limit4

0

0

0

gain_lower_limit5

0

0

0

ols_on

1

1

1

speaker_nl_on

1

1

1

block_num

6

6

6

FMP

comfort_flag

1

1

1

comfort_intensity

1

1

1

HS

hold_time

100

100

100

min_gain

1

1

1

threshold

20

20

20

smooth_time

200

200

200

freq_move

5

5

5

【相关数据类型及接口】

无。

ot_ao_vqe_cfg

【说明】

定义音频输出声音质量增强配置信息结构体。

【定义】

typedef struct {
    td_u32 open_mask;
    td_s32 work_sample_rate;
    td_s32 frame_sample;
    ot_vqe_work_state work_state;
    ot_audio_hpf_cfg hpf_cfg;
    ot_audio_anr_cfg anr_cfg;
    ot_audio_agc_cfg agc_cfg;
    ot_audio_eq_cfg  eq_cfg;
    ot_audio_hs_cfg  hs_cfg;
} ot_ao_vqe_cfg;

【成员】

成员名称

描述

open_mask

AO VQE的各功能使能的Mask值,需开启至少一个功能。

work_sample_rate

工作采样频率。该参数为内部功能算法工作采样率。

取值范围:8kHz/16kHz/48kHz。默认值为8kHz。(仅HPF支持48kHz,HS只支持16kHz)

frame_sample

VQE的帧点数。

支持范围:[80, 4096]

work_state

工作模式。

hpf_cfg

高通滤波功能相关配置信息。

anr_cfg

语音降噪功能相关配置信息。

agc_cfg

自动增益控制相关配置信息。

eq_cfg

均衡器相关配置信息。

hs_cfg

抗啸叫功能相关配置信息。

【注意事项】

  • 由于AOvqe算法时延为20ms,以及vqe处理前后的buf,建议在播放结束后补充发送至少20ms+一帧AO设备时长的静音数据。
  • 如果需要使用EQ,需要同时开启AGC。
  • DnVQE各个场景模式下的默认参数配置如表1所示。

表 1 DnVQE各个场景模式下的默认参数配置表

参数

场景模式

COMMON

MUSIC

NOISY

HPF

hpf_freq

OT_AUDIO_HPF_FREQ_120

OT_AUDIO_HPF_FREQ_120

OT_AUDIO_HPF_FREQ_120

ANR

nr_intensity

15

8

15

AGC

target_level

-2

-2

-2

noise_floor

-40

-40

-40

max_gain

15

10

15

adjust_speed

10

5

10

improve_snr

2

0

2

use_hpf

0

0

0

output_mode

0

0

0

noise_suppress_switch

1

0

1

【相关数据类型及接口】

无。

ot_vqe_mod_cfg

【说明】

定义声音质量增强及重采样模块配置信息结构体。

【定义】

typedef struct {
    td_void *handle;
} ot_vqe_mod_cfg;

【成员】

成员名称

描述

handle

注册句柄。

【注意事项】

对于各声音质量增强及重采样模块的注册句柄,用户可通过调用句柄获取接口进行获取。

【相关数据类型及接口】

无。

ot_audio_vqe_register

【说明】

定义声音质量增强及重采样模块注册结构体。

【定义】

typedef struct {
    ot_vqe_mod_cfg resample_mod_cfg;
    ot_vqe_mod_cfg hpf_mod_cfg;
    ot_vqe_mod_cfg hdr_mod_cfg;
    ot_vqe_mod_cfg gain_mod_cfg;
    ot_vqe_mod_cfg record_mod_cfg;
    ot_vqe_mod_cfg aec_mod_cfg;
    ot_vqe_mod_cfg anr_mod_cfg;
    ot_vqe_mod_cfg agc_mod_cfg;
    ot_vqe_mod_cfg eq_mod_cfg;
    ot_vqe_mod_cfg hs_mod_cfg;
    ot_vqe_mod_cfg rnr_mod_cfg;
    ot_vqe_mod_cfg drc_mod_cfg;
    ot_vqe_mod_cfg peq_mod_cfg;
    ot_vqe_mod_cfg talkv2_mod_cfg;
} ot_audio_vqe_register;

【成员】

成员名称

描述

resample_mod_cfg

重采样模块相关配置。

hpf_mod_cfg

高通滤波模块相关配置。

hdr_mod_cfg

高动态范围模块相关配置。

gain_mod_cfg

音量调节模块相关配置。

record_mod_cfg

RecordVQE模块相关配置。

aec_mod_cfg

回声抵消模块相关配置。

anr_mod_cfg

语音降噪模块相关配置。

agc_mod_cfg

自动增益控制模块相关配置。

eq_mod_cfg

均衡器模块相关配置。

hs_mod_cfg

抗啸叫模块相关配置。

rnr_mod_cfg

录音噪声消除模块相关配置。

drc_mod_cfg

动态压缩控制模块相关配置。

peq_mod_cfg

参量均衡器模块相关配置。

talkv2_mod_cfg

TalkVQEV2模块相关配置。

【注意事项】

  • 各模块的功能说明请参考Tableau 1。
  • 各解决方案对声音质量增强及重采样模块的支持情况请参考Tableau 2。

【相关数据类型及接口】

无。

ot_audio_stream

【说明】

定义音频码流结构体。该结构体的定义在不同解决方案平台上略有不同。具体见下面的描述。

【定义】

typedef struct {
    td_u8 ATTRIBUTE *stream;     /* the virtual address of stream */
    td_u64 ATTRIBUTE phys_addr;  /* the physics address of stream */
    td_u32 len;                     /* stream length, by bytes */
    td_u64 time_stamp;            /* frame time stamp */
    td_u32 seq;                    /* frame seq, if stream is not a valid 
    frame,seq is 0 */
} ot_audio_stream;

【成员】

成员名称

描述

stream

音频码流数据指针。

phys_addr

音频码流的物理地址。

len

音频码流长度。以byte为单位。

time_stamp

音频码流时间戳。

seq

音频码流序号。

【注意事项】

无。

【相关数据类型及接口】

ss_mpi_aenc_get_stream

ot_ao_chn_state

【说明】

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

【定义】

typedef struct {
    td_u32 chn_total_num;
    td_u32 chn_free_num;
    td_u32 chn_busy_num;
} ot_ao_chn_state;

【成员】

成员名称

描述

chn_total_num

输出通道总的缓存块数。

chn_free_num

可用的空闲缓存块数。

chn_busy_num

被占用缓存块数。

【注意事项】

无。

【相关数据类型及接口】

ss_mpi_ao_query_chn_status

ot_audio_track_mode

【说明】

定义音频设备声道模式类型。

【定义】

typedef enum {
    OT_AUDIO_TRACK_NORMAL       = 0,
    OT_AUDIO_TRACK_BOTH_LEFT   = 1,
    OT_AUDIO_TRACK_BOTH_RIGHT  = 2,
    OT_AUDIO_TRACK_EXCHANGE    = 3,
    OT_AUDIO_TRACK_MIX          = 4,
    OT_AUDIO_TRACK_LEFT_MUTE   = 5,
    OT_AUDIO_TRACK_RIGHT_MUTE  = 6,
    OT_AUDIO_TRACK_BOTH_MUTE   = 7,
    OT_AUDIO_TRACK_BUTT
} ot_audio_track_mode;

【成员】

成员名称

描述

OT_AUDIO_TRACK_NORMAL

正常模式,不做处理

OT_AUDIO_TRACK_BOTH_LEFT

两个声道全部为左声道声音

OT_AUDIO_TRACK_BOTH_RIGHT

两个声道全部为右声道声音

OT_AUDIO_TRACK_EXCHANGE

左右声道数据互换,左声道为右声道声音,右声道为左声道声音

OT_AUDIO_TRACK_MIX

左右两个声道输出为左右声道相加(混音)

OT_AUDIO_TRACK_LEFT_MUTE

左声道静音,右声道播放原右声道声音

OT_AUDIO_TRACK_RIGHT_MUTE

右声道静音,左声道播放原左声道声音

OT_AUDIO_TRACK_BOTH_MUTE

左右声道均静音

【注意事项】

对于I2S多路复用的应用场景,设置声道模式无效。

【相关数据类型及接口】

ot_audio_fade_rate

【说明】

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

【定义】

typedef enum {
    OT_AUDIO_FADE_RATE_1   = 0,
    OT_AUDIO_FADE_RATE_2   = 1,
    OT_AUDIO_FADE_RATE_4   = 2,
    OT_AUDIO_FADE_RATE_8   = 3,
    OT_AUDIO_FADE_RATE_16  = 4,
    OT_AUDIO_FADE_RATE_32  = 5,
    OT_AUDIO_FADE_RATE_64  = 6,
    OT_AUDIO_FADE_RATE_128 = 7,
    OT_AUDIO_FADE_RATE_BUTT
} ot_audio_fade_rate;

【成员】

成员名称

描述

OT_AUDIO_FADE_RATE_1

1个采样点改变一次

OT_AUDIO_FADE_RATE_2

2个采样点改变一次

OT_AUDIO_FADE_RATE_4

4个采样点改变一次

OT_AUDIO_FADE_RATE_8

8个采样点改变一次

OT_AUDIO_FADE_RATE_16

16个采样点改变一次

OT_AUDIO_FADE_RATE_32

32个采样点改变一次

OT_AUDIO_FADE_RATE_64

64个采样点改变一次

OT_AUDIO_FADE_RATE_128

128个采样点改变一次

【注意事项】

无。

【相关数据类型及接口】

无。

ot_audio_fade

【说明】

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

【定义】

typedef struct {
    td_bool         fade;
    ot_audio_fade_rate fade_in_rate;
    ot_audio_fade_rate fade_out_rate;
} ot_audio_fade;

【成员】

成员名称

描述

fade

是否开启淡入淡出功能。

TD_TRUE:开启淡入淡出功能。

TD_FALSE:关闭淡入淡出功能。

fade_in_rate

音频输出设备音量淡入速度。

fade_out_rate

音频输出设备音量淡出速度。

【注意事项】

无。

【相关数据类型及接口】

ss_mpi_ao_set_mute

ot_g726_bps

【说明】

定义G.726编解码协议速率。

【定义】

typedef enum {
    OT_G726_16K = 0,      /* G726 16kbps, see RFC3551.txt  4.5.4 G726-16 */
    OT_G726_24K,           /* G726 24kbps, see RFC3551.txt  4.5.4 G726-24 */
    OT_G726_32K,           /* G726 32kbps, see RFC3551.txt  4.5.4 G726-32 */
    OT_G726_40K,           /* G726 40kbps, see RFC3551.txt  4.5.4 G726-40 */
    OT_MEDIA_G726_16K,    /* G726 16kbps for ASF ... */
    OT_MEDIA_G726_24K,    /* G726 24kbps for ASF ... */
    OT_MEDIA_G726_32K,    /* G726 32kbps for ASF ... */
    OT_MEDIA_G726_40K,    /* G726 40kbps for ASF ... */
    OT_G726_BUTT,
} ot_g726_bps;

【成员】

成员名称

描述

OT_G726_16K

16kbps G.726,请参见“RFC3551文档4.5.4 G72616”。

OT_G726_24K

24kbps G.726,请参见“RFC3551文档4.5.4 G72624”。

OT_G726_32K

32kbps G.726,请参见“RFC3551文档4.5.4 G72632”。

OT_G726_40K

40kbps G.726,请参见“RFC3551文档4.5.4 G72640”。

OT_MEDIA_G726_16K

G726 16kbps for ASF。

OT_MEDIA_G726_24K

G726 24kbps for ASF。

OT_MEDIA_G726_32K

G726 32kbps for ASF。

OT_MEDIA_G726_40K

G726 40kbps for ASF。

【注意事项】

无。

【相关数据类型及接口】

无。

ot_adpcm_type

【说明】

定义ADPCM编解码协议类型。

【定义】

typedef enum {
    OT_ADPCM_TYPE_DVI4 = 0,
    OT_ADPCM_TYPE_IMA,
    OT_ADPCM_TYPE_ORG_DVI4,
    OT_ADPCM_TYPE_BUTT,
} ot_adpcm_type;

【成员】

成员名称

描述

OT_ADPCM_TYPE_DVI4

32kbit/s ADPCM(DVI4)

OT_ADPCM_TYPE_IMA

32kbit/s ADPCM(IMA)

OT_ADPCM_TYPE_ORG_DVI4

32kbit/s ADPCM(ORG_DVI4)

【注意事项】

无。

【相关数据类型及接口】

无。

ot_audio_save_file_info

【说明】

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

【定义】

typedef struct {
    td_bool cfg;
    td_char file_path[OT_MAX_AUDIO_FILE_PATH_LEN];
    td_char file_name[OT_MAX_AUDIO_FILE_NAME_LEN];
    td_u32  file_size;  /* in KB */
} ot_audio_save_file_info;

【成员】

成员名称

描述

cfg

配置使能开关。

file_path[OT_MAX_AUDIO_FILE_PATH_LEN]

音频文件保存路径。

file_name[OT_MAX_AUDIO_FILE_NAME_LEN]

音频文件保存名称。

file_size

文件大小,取值范围[1, 10240]KB。

【注意事项】

file_path默认使用当前位置,file_name默认使用“default”, file_size默认使用1M。其中file_name只是保存音频文件真正文件名的一部分,例如AI0 通道0在8k采样率下采用默认文件名保存的三个文件的真正名字为:sin_ai_dev0_chn0_8k_default.pcm、rin_ai_dev0_chn0_8k_default.pcm、sou_ai_dev0_chn0_8k_default.pcm。

【相关数据类型及接口】

无。

ot_audio_file_status

【说明】

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

【定义】

typedef struct {
    td_bool saving;
} ot_audio_file_status;

【成员】

成员名称

描述

saving

是否处于存文件状态。

  • TD_TRUE:处于存文件状态;
  • TD_FALSE:不处于存文件状态。

【注意事项】

无。

【相关数据类型及接口】

无。

ot_ai_chn_mode

【说明】

定义AI通道的工作模式。

【定义】

typedef enum {
    OT_AI_CHN_MODE_NORMAL = 0,     /* normal mode for AI chn */
    OT_AI_CHN_MODE_FAST,           /* fast mode for AI chn */
    OT_AI_CHN_MODE_BUTT,
} ot_ai_chn_mode;

【成员】

成员名称

描述

OT_AI_CHN_MODE_NORMAL

典型模式。

OT_AI_CHN_MODE_FAST

快速模式。

【注意事项】

无。

【相关数据类型及接口】

ot_ai_chn_attr

ot_ai_chn_attr

【说明】

定义AI通道属性结构体。

【定义】

typedef struct {
    ot_ai_chn_mode mode;       /* operating mode */
    td_bool raw_frame_enable; /* whether raw frame is valid */
} ot_ai_chn_attr;

【成员】

成员名称

描述

mode

工作模式。

raw_frame_enable

是否开启原始帧获取功能:

0:关闭

1:开启

默认为0关闭。

【注意事项】

无。

【相关数据类型及接口】

ss_mpi_ai_set_chn_attr

音频编码

音频编码相关数据类型、数据结构定义如下:

OT_AENC_MAX_CHN_NUM

【说明】

定义音频编码通道的最大个数。

【定义】

Hi3519DV500:

#define OT_AENC_MAX_CHN_NUM         16

Hi3516CV610:

#define OT_AENC_MAX_CHN_NUM         8

【注意事项】

无

【相关数据类型及接口】

无

OT_MAX_ENCODER_NAME_LEN

【说明】

定义音频编码器名称最大长度。

【定义】

#define OT_MAX_ENCODER_NAME_LEN        17

【注意事项】

无

【相关数据类型及接口】

ot_aenc_encoder

ot_aenc_attr_g711

【说明】

定义G.711编码协议属性结构体。

【定义】

typedef struct {
    td_u32 reserved;
} ot_aenc_attr_g711;

【成员】

成员名称

描述

reserved

待扩展用(目前暂未使用)。

【注意事项】

无

【相关数据类型及接口】

无

ot_aenc_attr_g726

【说明】

定义G.726编码协议属性结构体。

【定义】

typedef struct {
    ot_g726_bps g726bps;
} ot_aenc_attr_g726;

【成员】

成员名称

描述

g726bps

G.726协议码率。

【注意事项】

无。

【相关数据类型及接口】

ot_g726_bps

ot_aenc_attr_adpcm

【说明】

定义ADPCM编码协议属性结构体。

【定义】

typedef struct {
    ot_adpcm_type adpcm_type;
} ot_aenc_attr_adpcm;

【成员】

成员名称

描述

adpcm_type

ADPCM类型。

【注意事项】

无。

【相关数据类型及接口】

ot_adpcm_type

ot_aenc_attr_lpcm

【说明】

定义LPCM编码协议属性结构体。

【定义】

typedef struct {
    td_u32 reserved;            /* reserve item */
} ot_aenc_attr_lpcm;

【成员】

成员名称

描述

reserved

待扩展用(目前暂未使用)。

【注意事项】

无。

【相关数据类型及接口】

无。

ot_aenc_chn_attr

【说明】

定义音频编码通道属性结构体。该结构体的定义在不同解决方案平台上略有不同。具体见下面的描述。

【定义】

typedef struct {
    ot_payload_type     type;
    td_u32              point_num_per_frame;
    td_u32              buf_size;   /* buf size[2~OT_MAX_AUDIO_FRAME_NUM] */
    td_void ATTRIBUTE   *value;
} ot_aenc_chn_attr;

【成员】

成员名称

描述

type

音频编码协议类型。

静态属性。

point_num_per_frame

音频编码协议对应的帧点数(编码时收到的音频帧点数小于等于该帧点数都可以进行编码)。

buf_size

音频编码缓存大小。

取值范围:[2, OT_MAX_AUDIO_FRAME_NUM],以帧为单位。

静态属性。

value

具体协议属性指针。

静态属性。

【注意事项】

无。

【相关数据类型及接口】

无。

ot_aenc_encoder

【说明】

定义编码器属性结构体。

【定义】

typedef struct {
    ot_payload_type type;
    td_u32          max_frame_len;
    td_char         name[OT_MAX_ENCODER_NAME_LEN];
    td_s32          (*func_open_encoder)(td_void *encoder_attr, td_void **encoder);
    td_s32          (*func_enc_frame)(td_void *encoder, const ot_audio_frame *data, ot_aenc_buf_info *buf_info);
    td_s32          (*func_close_encoder)(td_void *encoder);
} ot_aenc_encoder;

【成员】

成员名称

描述

type

编码协议类型。

max_frame_len

最大码流长度。

name

编码器名称。

func_open_encoder

打开编码器的函数指针。

func_enc_frame

进行编码的函数指针。

func_close_encoder

关闭编码器的函数指针。

【注意事项】

请参见《音频组件API参考》。

【相关数据类型及接口】

ss_mpi_aenc_register_encoder

ot_aenc_buf_info

【说明】

定义编码器缓存信息结构体。

【定义】

typedef struct {
    td_u8 *out_buf;
    td_u32 out_max_len;
    td_u32 *out_valid_len;
} ot_aenc_buf_info;

【成员】

成员名称

描述

out_buf

输出缓存的指针。

out_max_len

输出缓存的最大容纳长度。

out_valid_len

输出数据的实际有效长度。

【注意事项】

详情请参见《音频组件API参考》。

【相关数据类型及接口】

ot_aenc_encoder

音频解码

音频解码相关数据类型、数据结构定义如下:

OT_MAX_AUDIO_FRAME_NUM

【说明】

定义最大音频缓存帧数。

【定义】

#define OT_MAX_AUDIO_FRAME_NUM        300

【注意事项】

无

【相关数据类型及接口】

无

OT_MAX_VOICE_POINT_NUM

【说明】

定义voice编解码器最大采样点数,包括G.711、G.726、ADPCM、LPCM。

【定义】

#define OT_MAX_VOICE_POINT_NUM    480

【注意事项】

无

【相关数据类型及接口】

无

OT_MAX_AUDIO_POINT_NUM

【说明】

定义ai和aenc的最大采样点数。

【定义】

#define OT_MAX_AUDIO_POINT_NUM    2048

【注意事项】

无

【相关数据类型及接口】

无

OT_ADEC_MAX_CHN_NUM

【说明】

定义音频解码通道的最大个数。

【定义】

Hi3519DV500:

#define OT_ADEC_MAX_CHN_NUM         16

Hi3516CV610:

#define OT_ADEC_MAX_CHN_NUM         8

【注意事项】

无

【相关数据类型及接口】

无

OT_MAX_DECODER_NAME_LEN

【说明】

定义音频解码器名称最大长度。

【定义】

#define OT_MAX_DECODER_NAME_LEN   17

【注意事项】

无

【相关数据类型及接口】

ot_adec_decoder

ot_adec_attr_g711

【说明】

定义G.711解码协议属性结构体。

【定义】

typedef struct {
   td_u32 reserved;
} ot_adec_attr_g711;

【成员】

成员名称

描述

reserved

待扩展用(目前暂未使用)。

【注意事项】

无

【相关数据类型及接口】

无

ot_adec_attr_g726

【说明】

定义G.726解码协议属性结构体。

【定义】

typedef struct {
    ot_g726_bps g726bps;
} ot_adec_attr_g726;

【成员】

成员名称

描述

g726bps

G.726协议码率。

【注意事项】

无

【相关数据类型及接口】

ot_g726_bps

ot_adec_attr_adpcm

【说明】

定义ADPCM解码协议属性结构体。

【定义】

typedef struct {
    ot_adpcm_type adpcm_type;
} ot_adec_attr_adpcm;

【成员】

成员名称

描述

adpcm_type

ADPCM类型。

【注意事项】

无

【相关数据类型及接口】

ot_adpcm_type

ot_adec_attr_lpcm

【说明】

定义LPCM解码协议属性结构体。

【定义】

typedef struct {
    td_u32 reserved;
} ot_adec_attr_lpcm;

【成员】

成员名称

描述

reserved

待扩展用(目前暂未使用)。

【注意事项】

无

【相关数据类型及接口】

无

ot_adec_mode

【说明】

定义解码方式。

【定义】

typedef enum {
    OT_ADEC_MODE_PACK = 0, /* require input is valid dec pack(a
                                   complete frame encode result),
                                   e.g.the stream get from AENC is a
                                   valid dec pack, the stream know actually
                                   pack len from file is also a dec pack.
                                   this mode is high-performative */
    OT_ADEC_MODE_STREAM,  /* input is stream, low-performative,
                                 if you couldn't find out whether a stream is
                                 vaild dec pack,you could use
                                 this mode */
    OT_ADEC_MODE_BUTT
} ot_adec_mode;

【成员】

成员名称

描述

OT_ADEC_MODE_PACK

Pack方式解码。

OT_ADEC_MODE_STREAM

stream方式解码。

【注意事项】

  • pack方式用于用户确认当前码流包为一帧数据编码结果的情况下,解码器会直接进行对其解码,如果不是一帧,解码器会出错。这种模式的效率比较高,在使用AENC模块编码的码流包如果没有破坏,均可以使用此方式解码。
  • stream方式用于用户不能确认当前码流包是不是一帧数据的情况下,解码器需要对码流进行判断并缓存,此工作方式的效率低下,一般用于读文件码流送解码或者不确定码流包边界的情况。当然由于语音编码码流长度固定,很容易确定在码流中的帧边界,推荐使用pack方式解码。

【相关数据类型及接口】

无

ot_adec_chn_attr

【说明】

定义解码通道属性结构体。该结构体的定义在不同解决方案平台上略有不同。具体见下面的描述。

【定义】

typedef struct {
    ot_payload_type type;
    td_u32          buf_size;   /* buf size[2~OT_MAX_AUDIO_FRAME_NUM] */
    ot_adec_mode       mode;    /* decode mode */
    td_void ATTRIBUTE *value;
} ot_adec_chn_attr

【成员】

成员名称

描述

type

音频解码协议类型。

静态属性。

buf_size

音频解码缓存大小。

取值范围:[2, OT_MAX_AUDIO_FRAME_NUM],以帧为单位。

静态属性。

mode

解码方式。

静态属性。

value

具体协议属性指针。

【注意事项】

无

【相关数据类型及接口】

无

ot_adec_decoder

【说明】

定义解码器属性结构体。

【定义】

typedef struct {
    ot_payload_type type;
    td_char         name[OT_MAX_DECODER_NAME_LEN];
    td_s32          (*func_open_decoder)(td_void *decoder_attr, td_void **decoder);
    td_s32          (*func_dec_frame)(td_void *decoder, ot_adec_buf_info *buf_info, td_u32 *out_chns);
    td_s32          (*func_get_frame_info)(td_void *decoder, td_void *info);
    td_s32          (*func_close_decoder)(td_void *decoder);
    td_s32          (*func_reset_decoder)(td_void *decoder);
} ot_adec_decoder;

【成员】

成员名称

描述

type

解码协议类型。

name

解码器名称。

func_open_decoder

打开解码器的函数指针。

func_dec_frame

进行解码的函数指针。

func_get_frame_info

获取音频帧信息的函数指针。

func_close_decoder

关闭解码器的函数指针。

func_reset_decoder

清空缓存buffer,复位解码器。

【注意事项】

请参见《音频组件API参考》。

【相关数据类型及接口】

ss_mpi_adec_register_decoder

ot_audio_frame_info

【说明】

定义解码后的音频帧信息结构体。

【定义】

typedef struct {
    ot_audio_frame *frame;
    td_u32         id;
} ot_audio_frame_info;

【成员】

成员名称

描述

frame

音频帧指针。

id

音频帧的索引,范围:[0, 49]

【注意事项】

请参见《音频组件API参考》。

【相关数据类型及接口】

ot_adec_chn_state

【说明】

定义音频解码通道的数据缓存状态结构体。

【定义】

typedef struct {
    td_bool end_of_stream;
    td_u32  buf_total_num;
    td_u32  buf_free_num;
    td_u32  buf_busy_num;
} ot_adec_chn_state;

【成员】

成员名称

描述

end_of_stream

解码码流结束状态。

buf_total_num

解码通道总的缓存块数。

buf_free_num

可用的空闲缓存块数。

buf_busy_num

被占用缓存块数。

【注意事项】

无。

【相关数据类型及接口】

ss_mpi_adec_query_chn_status

ot_adec_buf_info

【说明】

定义解码器缓存信息结构体。

【定义】

typedef struct {
    td_u8 **in_buf;
    td_u32 *in_left_byte;
    td_u16 *out_buf;
    td_u32 out_max_len;
    td_u32 *out_valid_len;
} ot_adec_buf_info;

【成员】

成员名称

描述

in_buf

输入缓存地址的指针,解码后可能会被更新。

in_left_byte

输入数据长度的指针,解码后可能会被更新。

out_buf

输出缓存的指针。

out_max_len

输出缓存的最大容纳长度。

out_valid_len

输出数据的实际有效长度。

【注意事项】

详情请参见《音频组件API参考》。

【相关数据类型及接口】

ot_adec_decoder

内置Audio Codec

内置Audio Codec相关数据类型、数据结构定义如下:

ot_acodec_fs

【说明】

定义I2S接口的采样率选择。

【定义】

typedef enum {
    OT_ACODEC_FS_8000  =   0x1,
    OT_ACODEC_FS_11025 =   0x2,
    OT_ACODEC_FS_12000 =   0x3,
    OT_ACODEC_FS_16000 =   0x4,
    OT_ACODEC_FS_22050 =   0x5,
    OT_ACODEC_FS_24000 =   0x6,
    OT_ACODEC_FS_32000 =   0x7,
    OT_ACODEC_FS_44100 =   0x8,
    OT_ACODEC_FS_48000 =   0x9,
    OT_ACODEC_FS_64000 =   0xa,
    OT_ACODEC_FS_96000 =   0xb,
    OT_ACODEC_FS_BUTT = 0xc,
} ot_acodec_fs;

【成员】

成员名称

描述

OT_ACODEC_FS_48000

48kHz采样率。

OT_ACODEC_FS_24000

24kHz采样率。

OT_ACODEC_FS_12000

12kHz采样率。

OT_ACODEC_FS_44100

44.1kHz采样率。

OT_ACODEC_FS_22050

22.05kHz采样率。

OT_ACODEC_FS_11025

11.025kHz采样率。

OT_ACODEC_FS_32000

32kHz采样率。

OT_ACODEC_FS_16000

16kHz采样率。

OT_ACODEC_FS_8000

8kHz采样率。

OT_ACODEC_FS_64000

64kHz采样率。

OT_ACODEC_FS_96000

96kHz采样率。

【注意事项】

无

【相关数据类型及接口】

无

ot_acodec_mixer

【说明】

定义内置Audio Codec 输入选择。

【定义】

typedef enum {
    OT_ACODEC_MIXER_IN0   = 0x0,
    OT_ACODEC_MIXER_IN1   = 0x1,
    OT_ACODEC_MIXER_IN_D = 0x2,
    OT_ACODEC_MIXER_BUTT,
} ot_acodec_mixer;

【成员】

成员名称

描述

OT_ACODEC_MIXER_IN0

MICPGA选择IN0单端输入

OT_ACODEC_MIXER_IN1

MICPGA选择IN1单端输入

OT_ACODEC_MIXER_IN_D

MICPGA选择IN_D差分输入

【注意事项】

Hi3519DV500/Hi3516CV610的音频内置codec输入接口有2组,编号为0、1(每组包含一对左右声道),使用单端输入时,需要选择IN0或者IN1,使用差分输入时,分别从IN0、IN1的左右声道输入一路差分信号(最终输出立体声)。

【相关数据类型及接口】

无

ot_acodec_volume_ctrl

【说明】

定义内置Audio Codec音量控制结构体。

【定义】

typedef struct {
     /* volume control, 0x00~0x7e, 0x7F:mute */
     unsigned int volume_ctrl;
    /* adc/dac mute control, 1:mute, 0:unmute */
    unsigned int volume_ctrl_mute;
} ot_acodec_volume_ctrl;

【成员】

成员名称

描述

volume_ctrl

音量大小。

volume_ctrl_mute

静音控制。

【注意事项】

无

【相关数据类型及接口】

无

错误码

音频基础属性错误码

音频基础属性API错误码如表1所示。

表 1 音频基础属性API错误码

错误代码

宏定义

描述

0xa0148007

OT_ERR_AIO_ILLEGAL_PARAM

音频基础属性参数设置无效

0xa014800a

OT_ERR_AIO_NULL_PTR

输入参数空指针错误

0xa014800d

OT_ERR_AIO_NOT_PERM

操作不允许

0xa0148018

OT_ERR_AIO_NOT_READY

音频基础系统未初始化

0xa0148022

OT_ERR_AIO_BUSY

音频基础系统忙

0xa0148041

OT_ERR_AIO_REGISTER_ERR

注册失败

音频输入错误码

音频输入API错误码如表1所示。

表 1 音频输入API错误码

错误代码

宏定义

描述

0xa0158001

OT_ERR_AI_INVALID_DEV_ID

音频输入设备号无效

0xa0158003

OT_ERR_AI_INVALID_CHN_ID

音频输入通道号无效

0xa0158007

OT_ERR_AI_ILLEGAL_PARAM

音频输入参数设置无效

0xa0158010

OT_ERR_AI_NOT_ENABLED

音频输入设备或通道没有使能

0xa015800a

OT_ERR_AI_NULL_PTR

输入参数空指针错误

0xa015800b

OT_ERR_AI_NOT_CFG

音频输入设备属性未设置

0xa015800c

OT_ERR_AI_NOT_SUPPORT

操作不支持

0xa015800d

OT_ERR_AI_NOT_PERM

操作不允许

0xa0158014

OT_ERR_AI_NO_MEM

分配内存失败

0xa0158015

OT_ERR_AI_NO_BUF

音频输入缓存不足

0xa0158016

OT_ERR_AI_BUF_EMPTY

音频输入缓存为空

0xa0158017

OT_ERR_AI_BUF_FULL

音频输入缓存为满

0xa0158018

OT_ERR_AI_NOT_READY

音频输入系统未初始化

0xa0158022

OT_ERR_AI_BUSY

音频输入系统忙

0xa0158041

OT_ERR_AI_VQE_ERR

AI VQE处理错误

音频输出错误码

音频输出API错误码如表1所示。

表 1 音频输出API错误码

错误代码

宏定义

描述

0xa0168001

OT_ERR_AO_INVALID_DEV_ID

音频输出设备号无效

0xa0168003

OT_ERR_AO_INVALID_CHN_ID

音频输出通道号无效

0xa0168007

OT_ERR_AO_ILLEGAL_PARAM

音频输出参数设置无效

0xa0168010

OT_ERR_AO_NOT_ENABLED

音频输出设备或通道没使能

0xa016800a

OT_ERR_AO_NULL_PTR

输出空指针错误

0xa016800b

OT_ERR_AO_NOT_CFG

音频输出设备属性未设置

0xa016800c

OT_ERR_AO_NOT_SUPPORT

操作不被支持

0xa016800d

OT_ERR_AO_NOT_PERM

操作不允许

0xa0168014

OT_ERR_AO_NO_MEM

系统内存不足

0xa0168015

OT_ERR_AO_NO_BUF

音频输出缓存不足

0xa0168016

OT_ERR_AO_BUF_EMPTY

音频输出缓存为空

0xa0168017

OT_ERR_AO_BUF_FULL

音频输出缓存已满

0xa0168018

OT_ERR_AO_NOT_READY

音频输出系统未初始化

0xa0168022

OT_ERR_AO_BUSY

音频输出系统忙

0xa0168041

OT_ERR_AO_VQE_ERR

AO VQE处理错误

音频编码错误码

音频编码API错误码如表1所示。

表 1 音频编码API错误码

错误代码

宏定义

描述

0xa0178001

OT_ERR_AENC_INVALID_DEV_ID

音频设备号无效

0xa0178003

OT_ERR_AENC_INVALID_CHN_ID

音频编码通道号无效

0xa0178007

OT_ERR_AENC_ILLEGAL_PARAM

音频编码参数设置无效

0xa0178008

OT_ERR_AENC_EXIST

音频编码通道已经创建

0xa0178009

OT_ERR_AENC_UNEXIST

音频编码通道未创建

0xa017800a

OT_ERR_AENC_NULL_PTR

输入参数空指针错误

0xa017800b

OT_ERR_AENC_NOT_CFG

编码通道未配置

0xa017800c

OT_ERR_AENC_NOT_SUPPORT

操作不被支持

0xa017800d

OT_ERR_AENC_NOT_PERM

操作不允许

0xa0178014

OT_ERR_AENC_NO_MEM

系统内存不足

0xa0178015

OT_ERR_AENC_NO_BUF

编码通道缓存分配失败

0xa0178016

OT_ERR_AENC_BUF_EMPTY

编码通道缓存空

0xa0178017

OT_ERR_AENC_BUF_FULL

编码通道缓存满

0xa0178018

OT_ERR_AENC_NOT_READY

系统没有初始化

0xa0178040

OT_ERR_AENC_ENCODER_ERR

音频编码数据错误

0xa0178041

OT_ERR_AENC_VQE_ERR

AENC VQE处理错误

音频解码错误码

音频解码API错误码如表1所示。

表 1 音频解码API错误码

错误代码

宏定义

描述

0xa0188001

OT_ERR_ADEC_INVALID_DEV_ID

音频解码设备号无效

0xa0188002

OT_ERR_ADEC_INVALID_CHN_ID

音频解码通道号无效

0xa0188007

OT_ERR_ADEC_ILLEGAL_PARAM

音频解码参数设置无效

0xa0188008

OT_ERR_ADEC_EXIST

音频解码通道已经创建

0xa0188009

OT_ERR_ADEC_UNEXIST

音频解码通道未创建

0xa018800a

OT_ERR_ADEC_NULL_PTR

输入参数空指针错误

0xa018800b

OT_ERR_ADEC_NOT_CFG

解码通道属性未配置

0xa018800c

OT_ERR_ADEC_NOT_SUPPORT

操作不被支持

0xa018800d

OT_ERR_ADEC_NOT_PERM

操作不允许

0xa0188014

OT_ERR_ADEC_NO_MEM

系统内存不足

0xa0188015

OT_ERR_ADEC_NO_BUF

解码通道缓存分配失败

0xa0188016

OT_ERR_ADEC_BUF_EMPTY

解码通道缓存空

0xa0188017

OT_ERR_ADEC_BUF_FULL

解码通道缓存满

0xa0188018

OT_ERR_ADEC_NOT_READY

系统没有初始化

0xa0188040

OT_ERR_ADEC_DECODER_ERR

音频解码数据错误

0xa0188041

OT_ERR_ADEC_BUF_LACK

解码输入缓存空间不够

Resampler错误码

Resampler API错误码如表1所示。

表 1 Resampler API错误码

错误代码

宏定义

描述

0x80000001

OT_ERR_RESAMPLE_HANDLE

重采样模块句柄无效

0x80000002

OT_ERR_RESAMPLE_PCMBUF

重采样输入输出缓存无效

0x80000003

OT_ERR_RESAMPLE_SAMPLE_NUMBER

输入采样点数错误

0x80000004

OT_ERR_RESAMPLE_OUTPCM_SPACE

输出缓存空间不够

0x80000005

OT_ERR_PCM_CHANNEL

输入通道数错误

0x80000006

OT_ERR_PCM_FORMAT

输入位宽错误

0x80000007

OT_ERR_INVALID_BYPASSFLAG

无效的透传标志

0x80000009

OT_ERR_INPUT_EMPTY_POINTER

输入参数空指针错误