4. 各解码格式配置说明
AD16N、AW30N同时支持的解码格式有:F1A/B/C/X、UMP3、MIDI、A、标准MP3、WAV六种格式;
AW30N还支持OPUS、ADPCM-IMA、SBC/MSBC、SPEEX解码格式。
- 下面简要介绍一下各个格式配置:
文件流解码格式:
音频数据流解码格式:
同时支持文件流解码和数据流解码格式:
11. “ump3 解码格式”
4.1. f1a 解码格式
f1a解码格式为我司特有的音频解码格式。具体内容可以了解 f1a_api.c 和 f1a_api.h
格式
后缀名
otp 方案
flash 方案
f1a
.f1a .f1b .f1c .f1x
不支持
支持
- 解码接口函数:
u32 f1a_decode_index(void *strm, u32 index, dec_obj **p_dec, void *p_dp_buf, f1x_data *p_f1x_data);
4.2. ump3 解码格式
ump3解码格式为我司特有的音频解码格式。具体内容可以了解 ump3_api.c 和 ump3_api.h
格式
后缀名
otp 方案
flash 方案
ump3
.ump3
不支持
支持
- 解码接口函数:
u32 ump3_decode_api(void *strm, void **p_dec, void *p_dp_buf);
4.3. midi 解码和 midi琴解码格式
midi解码和 midi琴解码格式MIDI解码具体内容可以了解 midi_api.c 和 MIDI_DEC_API.HMIDI琴解码具体内容可以了解 midi_ctrl_api.c 和 MIDI_CTRL_API.Hmidi解码 用户可参考toy_midi.c模式。midi琴 用户可参考toy_midi_ctrl.c模式。详细midi功能及说明请看SDK包里的《杰理AD1x-45678_MIDI应用说明文档.pdf》文档。(注:该文档实际函数以AD14_voice_toy_v1.8.0工程为准,其余芯片SDK实际函数名会有出入,但实现原理不变)
备注
格式
后缀名
otp 方案
flash 方案
midi
.mid .mfa .mda
不支持
支持
midi文件后缀名详情:
工具版本
乐谱后缀名
音色库后缀名
旧版无压缩
.mid
.mid
旧版有压缩
.mid
.mda
新版
.mfa
.mda
- MIDI解码基本功能以及对应的命令如下:
配置midi使用模式(CMD_MIDI_CTRL_MODE)
配置OKON模式发声(CMD_MIDI_GOON / CMD_MIDI_OKON_MODE)
切换主旋律乐器(CMD_MIDI_SET_PROG)
配置主通道乐器或者所以通道的乐器(CMD_MIDI_SET_CHN_PROG)
mark回调播放功能(CMD_MIDI_SET_MARK)
小节回调(CMD_MIDI_SEEK_BACK_N)
调节midi外部音量功能(CMD_MIDI_SET_EX_VOL)
移半音功能(CMD_MIDI_SET_SEMITONE)
更改节奏和衰减功能(CMD_MIDI_CTRL_TEMPO)
配置限幅器(CMD_MIDI_LIMITER_TRIGGER)
- MIDI琴基本功能与对应的命令如下:
动态修改音色相关参数
更改节奏和衰减功能(CMD_MIDI_CTRL_TEMPO)
调节midi外部音量功能(CMD_MIDI_SET_EX_VOL)
移半音功能(CMD_MIDI_SET_SEMITONE)
配置限幅器(CMD_MIDI_LIMITER_TRIGGER)
琴键颤音功能
弯音轮功能
动态修改当前播放的乐器通道
- 解码接口函数:
u32 midi_decode_api(void *strm, void **ppdec, void *p_dp_buf); u32 midi_ctrl_decode_api(void *strm, void **ppdec, void *p_dp_buf)
4.4. a 解码格式
a解码格式为我司特有的音频解码格式。a解码具体内容可以了解 a_api.c 和 a_api.h
格式
后缀名
otp 方案
flash 方案
a
.a .b .e
不支持
支持
- 解码接口函数:
u32 a_decode_api(void *strm, void **p_dec, void *p_dp_buf);
4.5. 标准MP3 解码格式
标准MP3解码格式MP3解码具体内容可以了解 mp3_standard_api.c 和 a_amp3_standard_apipi.h
格式
后缀名
otp 方案
flash 方案
标准MP3
.mp3 .mp2 .mp1
支持
支持
- 解码接口函数:
u32 mp3_st_decode_api(void *strm, void **p_dec, void *p_dp_buf);
4.6. WAV 解码格式
WAV解码格式WAV解码具体内容可以了解 wav_api.c 和 wav_api.h
格式
后缀名
otp 方案
flash 方案
WAV
.wav
支持
支持
- 解码接口函数:
u32 wav_decode_api(void *strm, void **p_dec, void *p_dp_buf);
4.7. OPUS 解码格式
OPUS解码格式为数据流解码格式。目前的OPUS解码仅支持百度格式。OPUS解码具体内容可以了解 opus_api.c 和 opus_api.h
- 解码接口函数:
u32 opus_decode_api(void *strm, void **p_dec, void *p_dp_buf);
4.8. ADPCM-IMA 解码格式
ADPCM-IMA解码格式为数据流解码格式。ADPCM-IMA解码具体内容可以了解 ima_api.c 和 ima_api.h
- 解码run返回值
1、 0x0:正常情况;2、 0x60:读不到数据;
- 输入输出量控制
ima_dec_stream_max_input:一次算法run input处理最大数据量(单位:byte)ima_dec_stream_max_output:一次算法run output解码出来的最大数据量(单位:样点数)两者会影响ADPCM-IMA里运行buff的大小。adpcm-ima 输入输出量控制
- 预测值与索引配置接口函数:
与adpcm_ima编码输出header功能对应,用户在使用前需要先用config配置CMD_SET_PRE_IDX命令config 配置说明:CMD_SET_PRE_IDX //配置每包预测值与步长表索引,在每包解码前配置使用方式 ima_test->dec_confing(ima_work_buf, CMD_SET_PRE_IDX, &prevalue_index_info)prevalue_index_info 是ima_dec_stream_pre_idx变量其中 prevalue_index_info.valpred = head[0] << 8 | head[1];prevalue_index_info.index = head[2];head是 unsigned char 类型注意:在配置之前需要暂停解码,配置之后才能开始解码(保证解码当前包开始,是使用的头中的valpred与index)
- 解码接口函数:
u32 ima_decode_api(void *strm, void **p_dec, void *p_dp_buf);
4.9. SBC/MSBC/USBC 解码格式
SBC/MSBC/USBC解码格式为数据流解码格式。sbc / msbc /usbc 共用一个算法库,用户需要注意的是选择sbc解码、msbc解码还是usbc解码,三者不可混用。即sbc的解码格式只能解码sbc的编码数据,msbc的解码格式只能解码msbc的编码数据,usbc的解码格式只能解码usbc的编码数据;sbc/msbc/usbc解码具体内容可以了解 sbc_api.c 和 sbc_stddec_api.h
sbc / msbc / usbc 解码选择
sbc/msbc/usbc解码格式选择
- 解码run返回值
1、0x0:正常读到数据。2、0x60:算法input读不到数据,即读到数据长度为03、0x61:错误的采样率/声道模式信息4、0x62:错误的bitpool/subband信息5、0x63:错误的bitpool+suband+channel mode组合6、0x64:目标帧长超出范围
- 解码接口函数:
u32 sbc_decode_api(void *strm, void **p_dec, void *p_dp_buf);
备注
usbc参数配置
4.10. speex 解码格式
speex解码格式为数据流解码格式,该格式主要用于人声场景。speex解码具体内容可以了解 speex_api.c 和 speex_api.h
- 解码接口函数:
u32 speex_decode_api(void *strm, void **p_dec , void *p_dp_buf);
4.11. jla_lw 解码格式
jla_lw解码格式为数据流解码格式JLA_LW编解码共用同一个算法库,解码的采样率 和 码率需要与编码一致。该格式目前主要应用在对讲机应用上,用来和蓝牙连接间隔对齐。jla_lw解码具体内容可以了解 jla_lw_api.c 和 jla_lw_api.h 和 jla_lw_codec_ctrl.h
- 丢包修复
JLA_LW 解码格式自带有丢包修复功能。即该格式10ms处理一包数据,若该10ms的数据丢失,则会根据前文数据生成一包新的数据来弥补这10ms的音频。//具体修复多少包数据可以查看 trans_unpacket.c 里的 fill_empty_frames() 函数。//代码实现为通过计算蓝牙传输每包数据的index序号,根据本包数据的index序号与上一包数据的index序号相差多少就填以0x55aa为头的空包进入解码器(目前应用层当设置丢失超过5包时,只填充5包数据)
- 淡入淡出功能
当蓝牙信号弱时出现丢包现象,如果打开了淡入淡出功能,JLA_LW格式除了在库里面会做丢包修复,还会使得丢包处的声音尽量平滑过度不至于出现明显的卡音。
jla_lw淡入淡出配置
jla_lw_br_level 压缩档位(位于app_config.c)
0档位适用于:
16k采样率,36kbps,每帧编码间隔为20ms; 32k采样率,72kbps,每帧编码格式为10ms;1档位适用于:
16k采样率,72kbps,每帧编码间隔为10ms;JLA格式的jla_lw_br_level配置
备注
- 解码接口函数:
u32 jla_lw_decode_api(void *strm, void **p_dec, void *p_dp_buf);