4. 各解码格式配置说明

AD16N、AW30N同时支持的解码格式有:F1A/B/C/X、UMP3、MIDI、A、标准MP3、WAV六种格式;

AW30N还支持OPUS、ADPCM-IMA、SBC/MSBC、SPEEX解码格式。

下面简要介绍一下各个格式配置:

文件流解码格式:

音频数据流解码格式:

同时支持文件流解码和数据流解码格式:


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.H
MIDI琴解码具体内容可以了解 midi_ctrl_api.c 和 MIDI_CTRL_API.H
midi解码 用户可参考toy_midi.c模式。
midi琴 用户可参考toy_midi_ctrl.c模式。
详细midi功能及说明请看SDK包里的《杰理AD1x-45678_MIDI应用说明文档.pdf》文档。
(注:该文档实际函数以AD14_voice_toy_v1.8.0工程为准,其余芯片SDK实际函数名会有出入,但实现原理不变)

备注

midi功能常涉及两部分文件,一个是 音色库 ,一个是用户自己的 midi乐曲文件
1. 音色库 只能 烧写放入内置flash里,不支持放在其他设备!!!
2. midi乐曲文件 用户可以任意放在其他设备。

格式

后缀名

otp 方案

flash 方案

midi

.mid .mfa .mda

不支持

支持

midi文件后缀名详情:

工具版本

乐谱后缀名

音色库后缀名

旧版无压缩

.mid

.mid

旧版有压缩

.mid

.mda

新版

.mfa

.mda

MIDI解码基本功能以及对应的命令如下:
  1. 配置midi使用模式(CMD_MIDI_CTRL_MODE)

  2. 配置OKON模式发声(CMD_MIDI_GOON / CMD_MIDI_OKON_MODE)

  3. 切换主旋律乐器(CMD_MIDI_SET_PROG)

  4. 配置主通道乐器或者所以通道的乐器(CMD_MIDI_SET_CHN_PROG)

  5. mark回调播放功能(CMD_MIDI_SET_MARK)

  6. 小节回调(CMD_MIDI_SEEK_BACK_N)

  7. 调节midi外部音量功能(CMD_MIDI_SET_EX_VOL)

  8. 移半音功能(CMD_MIDI_SET_SEMITONE)

  9. 更改节奏和衰减功能(CMD_MIDI_CTRL_TEMPO)

  10. 配置限幅器(CMD_MIDI_LIMITER_TRIGGER)

MIDI琴基本功能与对应的命令如下:
  1. 动态修改音色相关参数

  2. 更改节奏和衰减功能(CMD_MIDI_CTRL_TEMPO)

  3. 调节midi外部音量功能(CMD_MIDI_SET_EX_VOL)

  4. 移半音功能(CMD_MIDI_SET_SEMITONE)

  5. 配置限幅器(CMD_MIDI_LIMITER_TRIGGER)

  6. 琴键颤音功能

  7. 弯音轮功能

  8. 动态修改当前播放的乐器通道

  • 解码接口函数:

    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 输入输出量控制

  • 预测值与索引配置接口函数:
    与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解码格式选择"

sbc/msbc/usbc解码格式选择

  • 解码run返回值
    1、0x0:正常读到数据。
    2、0x60:算法input读不到数据,即读到数据长度为0
    3、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做解码格式时,只能解码对应参数的usbc编码。
所以用户需要配置usbc的参数和编码端的参数一致。
"usbc参数配置"

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淡入淡出配置

  • jla_lw_br_level 压缩档位(位于app_config.c)

    0档位适用于:

    16k采样率,36kbps,每帧编码间隔为20ms;
    32k采样率,72kbps,每帧编码格式为10ms;
    

    1档位适用于:

    16k采样率,72kbps,每帧编码间隔为10ms;
    
"JLA格式的jla_lw_br_level配置"

JLA格式的jla_lw_br_level配置

备注

在v1.4.0版本前,JLA格式只支持0档位的配置(该压缩档位没有开放出来)
在v1.4.0版本后,JLA格式才支持 0 和 1 档位的配置;
该配置需要编解码双方一致!!!!!!
  • 解码接口函数:

    u32 jla_lw_decode_api(void *strm, void **p_dec, void *p_dp_buf);