9. 编码接口

各个芯片的编码差异比较:

1、支持MMU的芯片(如AD23)去掉了ld文件中编码使用的代码段,编码算法使用的资源通过malloc获取 2、本章节为支持MMU的芯片(如AD23)添加了编码资源申请和释放说明。编码功能控制接口函数

各芯片支持的编码情况如下:

格式

AD14N

AC104N

AD15N

AD17N

AD18N

AD24N

AD23N

支持最高ADC采样率

24000

24000

不支持ADC

不支持ADC

不支持ADC

48000

96000

标准MP2编码

不支持

支持

不支持

支持

ump2编码

支持

支持

支持

支持

a编码

支持

支持

支持

支持

编码前需要配置编码采样率以及码率,各编码格式支持的采样率以及码率如下:

标准MP2编码 码率(BR)/ 采样率(SR)对应关系

采样率(sr)

8000

12000

16000

22050

24000

32000

44100

48000

码率(BR)

+8kbps

32kbps

16kbps

48kbps

24kbps

56kbps

32kbps

64kbps

40kbps

80kbps

48kbps

96kbps

56kbps

112kbps

64kbps

128kbps

80kbps

160kbps

88kbps

160kbps

96kbps

224kbps

112kbps

256kbps

128kbps

320kbps

160kbps

384kbps

ump2编码 采样率(sr)/ 压缩比(cr)对应关系

采样率(SR)

8000

12000

16000

22050

24000

32000

44100

48000

压缩比(CR)

3

4

5

6

7

8

注:ump2码率(br)的范围为:采样率(sr) * 16 / 压缩比(CR) , 其中压缩比的范围为3 ~ 8; 例如SR = 24K,那么BR的范围为:(24 * 16 / 8) ~ (24 * 16 / 3)

A格式编码 码率(BR) / 采样率(SR)对应关系

采样率(SR)

8000

12000

16000

24000

32000

码率(BR)

32kbps

48kbps

64kbps

96kbps

128kbps

所有编码被统一管理。

编码用到的接口函数:

void encoder_io(u32(* fun)(void* ), void* pfile);
void stop_encode(void* pfile, u32 dlen);
u32 a_encode_api(void* p_file);
u32 ump3_encode_api(void* p_file);
u32 mp3_encode_api(void* p_file);

9.1. 编码应用流程

在启动录音前需要先调用函数 rec_phy_init,此函数实现对编码管理器进行初始化,会初始化编码控制器里面的一些变量资源。

在编码之前要确保已经完成了设备以及文件系统的初始化,以及在设备中创建好了录音文件,并获取到了相应的文件句柄,对于NOR_FS而言创建创建文件时能直接返回文件号:

  1. 调用encoder_io实现对编码的启动,此函数会自动适应当前ADC工作的频率;

  2. 当录音到一定时间后,需要关闭录音可以调用stop_encode实现停止录音;

注:录音只是支持一路录音,所以不需要获取管理编码句柄,这里会和解码有区别!


9.2. 编码功能控制接口函数

9.2.1. void encoder_io(u32(* fun)(void* ), void* pfile)

此函数实现注册编码相关中断和启动编码:

  1. u32(* fun)(void* ),传递不同的编码函数只恨可以实现编写不同格式的音频文件:

    1. a_encode_api,A格式的编码启动接口函数, 如果使用的是支持MMU的芯片(如AD23),则会申请算法需要的资源;

    2. mp3_encode_api,标准mp2编码启动接口函数, 如果使用的是支持MMU的芯片(如AD23),则会申请算法需要的资源;

    3. ump3_encode_api,ump2编码启动接口函数, 如果使用的是支持MMU的芯片(如AD23),则会申请算法需要的资源;

  2. void* p_file,创建文件时,获取到的文件句柄。

9.2.2. void stop_encode(void* pfile, u32 dlen)

此函数可以停止编码, 如果使用的是支持MMU的芯片(如AD23),则会释放算法申请到的资源:

  1. void* p_file,创建文件时,获取到的文件句柄;

  2. u32 dlen,停止解码时,抛弃文件结尾部分数据的长度;