1. 编码接口
AW30N目前支持的编码格式包含:UMP3、A、OPUS、标准MP2、ADPCM_IMA、sbc、msbc、speex 和 JLA_LW格式。所有编码格式被统一管理。编码前需要配置编码采样率以及码率等相关配置,各编码格式支持的采样率以及码率如下:
- 编码划分为:
文件编码(encoder_file.c)
音频传输编码(encoder_stream.c)
1.1. 编码功能控制函数
编码功能控制函数::
enc_obj \*encoder_io(u32(*fun)(void *, void *, void *), void *input_func, void *output_func, void *pfile) void stop_encode(void \*pfile, u32 dlen);各个格式的编码接口函数:
u32 mp3_encode_api(void \*p_file, void *input_func, void *output_func); u32 ump3_encode_api(void *p_file, void *input_func, void *output_func); u32 a_encode_api(void *p_file, void *input_func, void *output_func); u32 opus_encode_api(void *p_file, void *input_func, void *output_func); u32 ima_encode_api(void \*p_file, void \*input_func, void \*output_func); u32 sbc_encode_api(void \*p_file, void \*input_func, void \*output_func); u32 speex_encode_api(void \*p_file, void \*input_func, void \*output_func); u32 jla_lw_decode_api(void *strm, void **p_dec, void *p_dp_buf);
1.1.1. 编码使用一般流程
在开始编码前需要调用函数u32 audio_adc_init_api(u32 sr, AUDIO_ADC_MODE mode, u32 ch)配置AUDIO_ADC采样率;
在编码之前要确保已经打开存放编码文件的设备,并创建新的文件进行编码,指定需要编码的格式,即可以按照预先设定的采样率以及码率进行编码流程:
调用encoder_io实现对编码器的控制,此函数的传参可以控制:
a.初始化指定编码格式; b.将编码数据,写入新创建的文件中;经过上面的一步已经完成了对编码的启动,此时可以调用stop_encoder实现停止编码的功能;
1.1.2. 文件编码功能控制接口函数
1.2. 函数void encoder_file(u32(*fun)(void *, void *, void *), void *pfile)
此函数实现初始化编码器并启动编码,其中参数:
1、(*fun)(void *, void *, void *):编码器初始化回调,传入指定解码器格式并进行初始化; 2、void *pfile,需要写入编码数据的文件句柄;
1.3. 函数void stop_encode_file(enc_obj *p_enc_obj, u32 dlen)
此函数实现停止编码器,其中参数:
1、enc_obj *p_enc_obj:当前使用的编码句柄; 2、dlen:对于nor_fs文件系统编码,该参数指定编码文件末尾舍弃的字节数;
1.3.1. 音频传输编码功能控制接口函数
1.4. 函数enc_obj *audio2rf_encoder_io(u32(*enc_fun)(void *, void *, void *), void *p_queue_ops, void *ops)
备注
该函数实现初始化编码器,用于音频传输应用;
初始化编码器后,再将编码链路挂载到AUDIO_ADC中断;
调用该函数前需确保AUDIO_ADC已工作
- enc_fun:编码器选择,可传入ump2或者opus等编码器初始化接口;
ump3_encode_api:ump2编码器初始化api;
opus_encode_api:opus编码器初始化api;
sbc_encode_api:sbc/msbc/usbc编码器初始化api;
speex_encode_api:speex编码器初始化api;
ima_encode_api:ima编码器初始化api;
jla_lw_encode_api:jla_lw编码器初始化api;
p_queue_ops:编码输出使用的队列对应句柄指针;
void *ops:蓝牙发送接口集合指针,如果ops为非空,将会注册的发送队列中断;
返回值:编码句柄
1.5. 函数u32 audio2rf_encoder_start(enc_obj *obj)
备注
该函数实现启动音频编码发送; 1. 返回值:启动成功 0;
1.6. 函数u32 rf_enc_output(void *priv, u8 *data, u16 len)
备注
该函数实现编码器输出数据并进行无线传输,由编码器回调;
无线传输模块出错导致无法正常发送时停止编码,发送繁忙时等待下次编码输出
该函数在启动编码器时传入编码器output参数;
priv:私有结构体,此处为编码句柄;
data:输出数据buff;
len:输出数据长度;
返回值:本次消耗的编码数据字节长度;
1.7. 函数void audio2rf_encoder_stop(queue_obj *p_queue, ENC_STOP_WAIT wait)
备注
该函数实现停止编码和数据发送,并发送停止包给远端;
p_queue:编码输出使用的发送队列指针;
wait:是否等待编码数据消耗完成;
返回值:无