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而言创建创建文件时能直接返回文件号:
调用encoder_io实现对编码的启动,此函数会自动适应当前ADC工作的频率;
当录音到一定时间后,需要关闭录音可以调用stop_encode实现停止录音;
注:录音只是支持一路录音,所以不需要获取管理编码句柄,这里会和解码有区别!
9.2. 编码功能控制接口函数
9.2.1. void encoder_io(u32(* fun)(void* ), void* pfile)
此函数实现注册编码相关中断和启动编码:
u32(* fun)(void* ),传递不同的编码函数只恨可以实现编写不同格式的音频文件:
a_encode_api,A格式的编码启动接口函数, 如果使用的是支持MMU的芯片(如AD23),则会申请算法需要的资源;
mp3_encode_api,标准mp2编码启动接口函数, 如果使用的是支持MMU的芯片(如AD23),则会申请算法需要的资源;
ump3_encode_api,ump2编码启动接口函数, 如果使用的是支持MMU的芯片(如AD23),则会申请算法需要的资源;
void* p_file,创建文件时,获取到的文件句柄。
9.2.2. void stop_encode(void* pfile, u32 dlen)
此函数可以停止编码, 如果使用的是支持MMU的芯片(如AD23),则会释放算法申请到的资源:
void* p_file,创建文件时,获取到的文件句柄;
u32 dlen,停止解码时,抛弃文件结尾部分数据的长度;