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已工作

  1. 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;

  2. p_queue_ops:编码输出使用的队列对应句柄指针;

  3. void *ops:蓝牙发送接口集合指针,如果ops为非空,将会注册的发送队列中断;

  4. 返回值:编码句柄

1.5. 函数u32 audio2rf_encoder_start(enc_obj *obj)

备注

该函数实现启动音频编码发送; 1. 返回值:启动成功 0;

1.6. 函数u32 rf_enc_output(void *priv, u8 *data, u16 len)

备注

该函数实现编码器输出数据并进行无线传输,由编码器回调;

  • 无线传输模块出错导致无法正常发送时停止编码,发送繁忙时等待下次编码输出

  • 该函数在启动编码器时传入编码器output参数;

  1. priv:私有结构体,此处为编码句柄;

  2. data:输出数据buff;

  3. len:输出数据长度;

  4. 返回值:本次消耗的编码数据字节长度;

1.7. 函数void audio2rf_encoder_stop(queue_obj *p_queue, ENC_STOP_WAIT wait)

备注

该函数实现停止编码和数据发送,并发送停止包给远端;

  1. p_queue:编码输出使用的发送队列指针;

  2. wait:是否等待编码数据消耗完成;

  3. 返回值:无