KDocs 研发资料库
  • 音频技术应用文档入口汇总
  • 杰理WINDOWS环境安装及其他事项
  • LINUX安装和编译
  • Linux环境编译SDK教程(ubuntu18.04)
  • 音频类补丁汇总表
  • 认证资料获取汇总(最新资料后台会更新)
  • 《Hi-Res申请指南v1.0》
  • FreeRTOS 开源协议版本
  • uCOS 开源协议版本信息
  • 各个模块关键资料汇总
  • 软件调试方法
  • Makefile编译
  • 提bug的规范
  • 常规设备使用指导
  • 对外特别发布开发注意点信息汇总
  • AD697X软件问题整理
  • AC700N软件问题整理
  • AC701X耳机软件问题整理
  • 951&961软件问题整理
  • AC104X软件问题整理
  • AC128N问题整理文档
  • 可视化工具调试问题整理
  • 耳机资料汇总
  • AC704N、 AC705N相关应用
  • AC695N&AC696N&AC608N音箱问题整理
  • JL701N音箱问题整理
  • AC692X软件问题整理
  • AC706N音箱问题整理
  • JL701N音箱问题整理(可视化工具SDK)
  • JL703N音箱问题整理
  • JL709N(JL689N)音箱问题整理
  • JL7094系列-入门到进阶开发指导
  • AC210N音箱问题整理
  • 无线麦系列版本支持指南
  • AW32N无线麦问题整理
  • lAD697X&JL701X 无线麦软件共性问题整理
  • AC706N无线麦问题整理
  • AW36N无线麦问题整理
  • AC710X无线麦问题整理
  • 唤醒源获取及唤醒IO设置
  • 电源
  • LVD
  • 长按复位配置方法
  • 低功耗应用
  • TIMER
  • UART
  • SPI
  • 内部FLASH空间添加用户自定义区域
  • IIC
  • GPIO
  • MCPWM
  • SD&U盘
  • 时钟&晶振
  • GPCNT
  • IO口crossbar映射功能
  • 文件系统使用总结
  • 复用应用
  • LINEIN_AUX相关应用
  • IIS音频接口应用
  • SPDIF模式相关(HDMI_ARC、光纤、同轴)
  • PDM LINK
  • 外设相关应用
  • 蓝牙相关
  • 杰理蓝牙距离调试文档
  • TWS耳机配对方式使用及生产把控指南
  • GFP谷歌快连及其认证流程指引
  • 蓝牙发射器(bt_emitter)相关
  • BLE应用
  • 关于提升BLE传输速率说明
  • BLE测试数据
  • MUSIC 模式相关应用
  • MIDI音乐实现
  • PC相关应用
  • FM相关应用
  • AC695N_AC696N FM天线ESD静电防护措施说明V2.0_20250107
  • fm应用详细设计说明书
  • 杰理FM硬件指南-20230315
  • ADC模块
  • AUDIO相关应用
  • 新Tools的音效调试使用
  • 混响应用使用说明
  • 音效调式
  • 音箱耳机低音小音量增强实现方法
  • DAC输出功率调试
  • DAC性能测试指南
  • 针对各类底噪、电流声分析流程
  • 录音相关应用
  • OPUS编解码相关
  • RTC相关应用
  • 升级相关
  • UI相关应用
  • 通话调试流程指南
  • 通话相关应用
  • 省电容mic使用手册
  • 如何测试验证手表通话系统的语音失真 V1.0
  • AC695X_AC696X_AD697X 常见通话问题处理参考资料
  • 通话调试问题确定步骤
  • 内置触摸调试指南
  • 低功耗内置触摸介绍V2.2
  • 触摸相关文档
  • AC697X、AC698X内置触摸调试及整改方法V1.0
  • 产测相关应用
  • AC63X BLE DUT测试介绍
  • 兆华序列使用简易说明
  • JL_1T2蓝牙测试盒音频文件更换说明
  • ENC相关应用入口汇总
  • ANC相关应用入口汇总
  • JL DMS通话调试手册-V3.9.4
  • ANC-ENC结构设计要点-20240407
  • 半入耳式ANC耳机器件选型与结构设计指南V1.0
  • JL 耳道自适应调试指南
  • ANC相关问题处理
  • ANC调试文档
  • 评估蓝牙耳机通话上行降噪性能的方法 V1.0 (2)
  • FCC 或者 BQB 认证相关应用
  • BQB profile 测试中常遇到的问题点汇总
  • 蓝牙参数整理20210811
  • 杰理科技认证问题参考
  • 无线音频产品开发指南
  • 无线麦系列从入门到进阶开发指导
  • 量产烧录相关说明
  • 一拖八烧录器远程过程调用说明
  • 量产相关建议
  • EffectTool(eq)调试工具说明文档
  • AC897AD697系列的EQ调试方法-V3
  • 杰理调音指南-20220622
  • 音效模块总结
  • 简要调音步骤指引(可视化)
  • 耳机充电与通信调试指南
  • 充电仓硬件调试指南
  • 充电仓软件问题整理
  • AC951常用说明
  • AC951_AC961_开发板使用说明V1.0
  • 彩屏仓AC982 入门指导及FAQ
  • 蓝牙音频APP相关应用
  • 手机APP的简介和开发流程
  • 蓝牙音频系列-硬件设计指南
  • 静电测试及整改方法-20220706
  • TWS耳机底噪整改指南V1.2
  • 杰理蓝牙距离调试文档
  • 蓝牙RF硬件设计与调试V1.1-20250219
  • AC695N_AC696N FM天线ESD静电防护措施说明V2.0_20241228
  • 音效调试指南
  • 无线话筒K歌音箱标准开发流程
  • 杰理科技 700N TWS耳机产品标准-202303
  • 杰理科技 701N 广播产品标准-202303
  • JL-HAT ANC高效产测自适应
  • 无线话筒测试板使用介绍
  • 一拖八频偏校准使用说明
  • 领夹麦产测工具使用介绍
  • Dongle量产测试说明
  • Dongle+Tws或头戴式 SDK通过工具绑定配对功能说明文档
  • 双麦ENC产测宏配置验证方法 V1.0
  • JL耳机方案麦克风声学测试指令_V1.0
  • JL耳机方案麦克风声学测试指令_V2.0
  • JL_ENC自动测试命令_V0.0.1
  • JL蓝牙测试盒用例说明
  • LDAC自测环境搭建_ubuntu
  • 延迟小板使用手册
  • 杰理库文件的制作及添加实现过程
  • 关于 AC635N&AC636N系列免晶振兼容性补丁 说明
  • 关于 AC63系列VM兼容性修复补丁_20250224 说明
  • 关于 AC632N &AE632N_ 蓝牙& 低功耗兼容性修复补丁 说明
  • AD698N和AC638N电压优化补丁V3说明
  • 关于 AC635N&AC636N漏电和E&G版兼容联合补丁 说明
  • AD698N和AC638N电压优化补丁V2说明
  • 702相关应用
  • 2024-4-30 发布歌词显示SDK开发注意事项
  • BQB RF & FCC 认证测试固件问题汇总及源码
  • BQB profile 测试中常遇到的问题点汇总
  • 进dut测试模式方法及固件
  • 704-频偏修改bin文件合集
  • 701手表BQB PROFILE认证注意事项
  • 认证的干扰规避整改
  • 海外CRA认证报告生成说明
  • JL700N可视化工具问题处理文档
  • JL701X可视化工具问题处理文档
  • JL701N_earphone_release_v1.6.0_ANC 低功耗问题补丁
  • JL708X可视化工具问题处理文档
  • JL709N可视化工具问题处理文档
  • JLstudio可视化工具使用说明
  • 一拖二-串口_蓝牙_app在线EQ、通话参数及调试方式和内置触摸调试
  • 可视化JL701M_DONGLE_SDK添加MIC为发射源
  • 可视化JL701M_DONGLE_SDK添加按键切换usb audio与MIC发射源
  • JL701M_DONGLE_SDK_1.0.0_dongle输入linein输出dac
  • 701可视化_a2dp_to_le_demo说明
  • 耳机系列demo汇总
  • JL7018F&JL7006F_7003F AUX IIS
  • 一键连接应用
  • 普通SDK动态开关一拖二功能
  • 蓝牙分析仪(EllisysBluetoothAnalyzer)抓包例程
  • TWS配对常见应用
  • APP自定义按键的demo
  • AC700N 播歌双EQ DEMO示例及说明
  • AC698V164 MIC与蓝牙音乐共同输出DAC demo
  • 添加第三方算法以及多算法授权流程
  • 空间音频配置方法
  • 普通高低电平TWS耳机控制通讯
  • 入耳检测状态更新demo解析
  • 资源优化(非可视化的SDK)
  • 资源优化(可视化SDK)
  • 翻译耳机、语音识别应用demo
  • 耳机抗干扰问题排查和优化
  • AC698D2 抗干扰优化
  • AC696X软件问题整理
  • AC695X软件问题整理
  • AC695X软件问题整理_1722249702
  • AC608X软件问题整理
  • JL701N_2T1_DUPLEX 应用软件问题汇总
  • le_audio_1.0.0_patch05 以及之前的版本IRkey 功能异常修改
  • AC706N-le_audio-200SDK有线_无线麦录音demo
  • jl701n_le_audio_v200patch02 IO串口升级修改串口单次发送字节长度的修改办法
  • 703创建IIS 输入dac输出音频流demo
  • 703将媒体流音频同时上传PC_mic录音demo实现
  • 703四路IIS输入输出demo
  • 底噪调试
  • AW328A烧录说明
  • 文档合集
  • AC706N_wireless_mic_release_PATCH_20240712 补丁 说明
  • AC706N_wireless_mic_release_PATCH_20240726 补丁 说明
  • AC706N_wireless_mic_release_V1.0.0、1.0.1、1.0.2 补丁 说明
  • AC706N_wireless_mic_release_V1.1.2 中的2T1应用 RX端不绑定配对,TX端实现绑定配对的修改方法
  • 各系列省晶振实现方法
  • iis tx rx说明文档
  • spdif信号
  • 蓝牙电话本
  • 安卓手机同步时间补丁
  • CDC配置
  • PC模式下增加Teams唤起功能
  • 杰理HDMIARC开发实现过程
  • AC701N patch06之前的版本用第三方算法节点实现新版本的pcm delay节点功能
  • (K歌音箱)各SDK音效配置相关说明
  • 长文件录音
  • 点阵屏歌词字库相关(蓝牙歌词,普通歌词)
  • 字模提取工具说明
  • 音箱可视化彩屏-入门到进阶开发指导
  • 彩屏LVGL UI设计及工具使用
  • 使用内部UI框架进行UI调试的系列步骤
  • AD101C使用强制升级工具spi 烧录不了问题处理(测试版本)
  • AD161扩展灯板说明文档
  • 歌词显示器开发注意项
  • 使用硬件数字增益控制通话下行音量(可视化)
  • 杰理小牛产测资料
  • ENC配置说明
  • 通话调试流程指引
  • ANC相关功能demo
  • 无线麦硬件资料汇总
  • 无线麦相关应用
  • 无线麦复杂功能补丁包汇总
  • 无线话筒形态SDK程序&开发经验&问题点分享
  • 双模式结合应用问题汇总
  • 无线麦距离优化案例
  • 无线麦系列中的双工形态(duplex)演变开发对讲机方案开发资料
  • 音箱入门到进阶指导文档(编写中)
  • 蓝牙耳机品控和生产技巧
  • 982过_欠压标志获取异常
  • 如何获取最新涂鸦SDK及库文件
  • 无线话筒K歌音响-调音标准流程
  • 无线话筒产测流程

JL703N音箱问题整理

📎 原始文档:https://www.kdocs.cn/l/citAkChzyMoo JL703N音箱问题整理
前言:本文档整理将以各个SDK遇到的共性问题做整理汇总,可直接根据所使用的sdk版本及功能快速索引相关问题点

开发注意点

  1. (必读)可视化工具项目帮助文档 项目的帮助文档位于:项目——项目帮助文档

image 2. 编译出现报错:syntax error 如图:
image

  • 原因: image
  • 解决方法: 设置git config --global core.autocrlf false之后重新拉下来
  1. 703 maskrom io在rom时的状态设置 image
  2. 703 多输出时候的主从设备设置注意事项 例如:
  3. IIS 和DAC 同时输出,dac 做主设备,就必须挂到分流器的最下面 image
  4. 每一个数据流都要设置标签,用以区分不同数据流的多输出 imageimage
  5. 媒体流下的蓝牙时钟需要同步修改。 imageimage
  6. 703 数据流对应节点参数更新办法及如何修改设置默认参数 703数据流对应节点参数更新办法及如何修改设置默认参数.otl

共性问题

  1. 蓝牙测试盒子无线升级失败,报KEY错误 image 测试到以下两个版本的SDK会出现问题:
    imageimage 原因:读key接口有问题
    替换cpu.a库:
    Le_audio:
    leaudio_cpu.rar
    soundbar:
    sounbar_cpu.rar
  2. 703 soundbox 1.0.0(patch_00.11)版本 SDK,关闭混响使能后 增加 MDRC 节点在媒体音频流中会导致死机问题 处理办法,替换一下media.a库文件:(注意该版本后续正式更新会跟随新版本SDK出来)
    JL703N_soundbox_1.0.0(patch_00.11)_media_处理MDRC异常问题.zip
    另一种临时处理办法就是:打开混响使能配置
    image
  3. 703 soundbox 1.0.0(patch_00.11)版本 SDK,tws对箱煲机死机复位问题 处理办法,替换一下media.a库文件:(注意该版本后续正式更新会跟随新版本SDK出来)
    【金山文档 | WPS云文档】 JL703N_soundbox_1.0.0(patch_00.11)_media_处理tws煲机异常死机问题
    https://kdocs.cn/l/cmVzfdWzsp8q
  4. 703 soundbox 1.0.0(patch_00.11/0.12)版本 SDK,蓝牙播歌时,拔卡卸载SD触发重复删除信号量异常 处理:替换最新编译的cpu.a库
    【金山文档 | WPS云文档】 br27_sdk_100_patch0010_修复重复删信号量的问题_20240814_cpu
    https://kdocs.cn/l/ckIVR1FByIUu
  5. 703 soundbox 1.0.0(patch_0.12)版本 SDK,苹果手机蓝牙通话时,BLE会自动断连 处理方法:
    将config_le_high_priority这个控制变量置为1,使得在esco通话的时候,ble优先级最高。
    image 并替换btctrler.a、cpu.a两个库。
    JL703N_soundbox_1.0.0(patch_00.12)_处理苹果手机蓝牙通话时BLE断连问题.rar
  6. 703-soundbox-2.0.0(patch01),关机报 "ASSERT-FAILED:pin portD no pin:0x0 error!"断言死机后,无法唤醒/开机 SDK版本:
    image 问题原因:
  • 程序进入软关机之前,默认将IO口都设置成高阻状态
  • 其中power_port.c会调用soff_gpio_protect保护SPI0-内部flash的 PD0-PD6引脚
  • 因PD组只有 PD0-PD6 引脚,且均被保护。但驱动配置了 GPIO_D组 的参数为 0xffff,即表示有16个引脚,所以复位时设置了除PD0-PD6外的所有PD引脚为高阻状态
  • (实际上没有PD7-PD15,所以导致程序错误)

问题修改如下:

  • 配置 GPIO_D组 的参数0xffff改为0x007f
  • 由于PD组引脚只有PD0-PD6,复位时不设置PD组引脚高阻态即可 image
  1. 703-soundbox-2.0.0(patch01),spdif_out 节点和dac 节点同时输出,会出现卡顿问题,在U盘模式和FM模式下spdif_out 无声问题、在提示音数据流播放无声问题。 针对卡顿问题,需要增加多设备输出的主从配置,具体配置如下:
    imageimageimageimageimage 在U盘模式和FM模式下spdif_out 无声问题,需要修改 audio_spdif_master.c
    具体修改点对比一下修改好的文件:
    audio_spdif_master(703_soundbox_2.0.0_patch1_修复spdif_outU盘模式下输出无声问题).rar
    spdif_out在提示音播放无声 问题修改
    增加代码
    image
    if (in_fmt->channel_mode != AUDIO_CH_LR) {
        in_fmt->channel_mode = AUDIO_CH_LR;
        ret = NEGO_STA_CONTINUE;
    }

spdif_out在使用48K24bit采样输出时候声音卡顿,一直打印“DDDDDDD"
增加buff,修改如下,48K24bit 则修改为 4即可,但是需要 96K24bit 输出,则可以修改为8
image 在U盘或TF卡模式下,按键PP ,暂停时候概率复现暂停时一直有杂音问题
可按照下面方式处理,处理后会有杂音,但是持续时间很短,不会一直存在杂音。
imageimage

  1. 703-soundbox-2.0.0(patch01.01)使能不了外部FM 现象:
    image 处理方法:
  • 修改工具缓存配置
if(src.name == '内置FM配置'){
  let dest = find('外置FM配置')
  if(src.groupEnable && dest.groupEnable) {
    dest.groupEnable = 1;
    src.groupEnable = 0;
    show('内置FM和外置FM互斥');
  }
}

if(src.name == '外置FM配置'){
  let dest = find('内置FM配置')
  if(src.groupEnable && dest.groupEnable) {
    dest.groupEnable = 1;
    src.groupEnable = 0;
    show('内置FM和外置FM互斥');
  }
}

image

  • 重新创建项目 image
  • 关掉内置FM之后可打开外置FM image
  1. 703-soundbox-2.0.0(patch01.01)外置FM与linein使用同一组AD通道但io口不同 原因:JLStudio工具没法配置linein与外置FM使用同一组的不同io
    方法:在FM时代码中替换配置工具中ADC通道的io
    相关知识:
  • 工具配置与代码对应关系 image
  • 宏的值与工具引脚配置的关系 image
  • 工具配置 imageimageimage
  • 代码修改 image
#include "app_main.h"

    u8 ad_ch_talbe[AUDIO_ADC_LINEIN_MAX_NUM]={
        1,/*ch0:1(PB9)、2(PB7)、3(PA0)*/
        1,/*ch1:1(PB10)、2(PB8)、3(PA1)*/
        0,/*ch2:1(PC9)、2(PC10)*/
        0/*ch3:1(PA2)、2(PA3)*/
    };
    
    if(app_in_mode(APP_MODE_FM) && ad_ch_talbe[ch_index])linein_param.linein_ain_sel=ad_ch_talbe[ch_index];

image 10. 703-soundbox-2.0.0(patch01和patch01.01)IRKEY功能异常修改 处理方法:

  • 可视化工具配置IRKEY引脚不会同步到代码,需自行修改。 image
  • 修改irkey.c和ir_decoder.c文件,可对比修改或直接替换
  • IRKEY修改文件.rar
  1. 703-soundbox-2.0.0(patch01.01)软关机会重启 原因:
  • soff_gpio_config初始化与头文件的宏对应不上,在驱动里面会异常复位 image
  • 传了一个非法值给gpio_set_mode导致gpio驱动异常复位 image 修改方法:
  1. 修改soff_gpio_config初始化 image
  2. 添加非法值判断 image
    if(soff_gpio_config.gpioa )gpio_set_mode(PORTA, soff_gpio_config.gpioa, PORT_HIGHZ);
    if(soff_gpio_config.gpiob )gpio_set_mode(PORTB, soff_gpio_config.gpiob, PORT_HIGHZ);
    if(soff_gpio_config.gpioc )gpio_set_mode(PORTC, soff_gpio_config.gpioc, PORT_HIGHZ);
    if(soff_gpio_config.gpiod )gpio_set_mode(PORTD, soff_gpio_config.gpiod, PORT_HIGHZ);
    if(soff_gpio_config.gpiop )gpio_set_mode(PORTP, soff_gpio_config.gpiop, PORT_HIGHZ);

    if(soff_gpio_config.gpiousb)gpio_set_mode(PORTUSB, soff_gpio_config.gpiousb, PORT_HIGHZ); //dp dm
  1. 703-soundbox-2.0.0(patch01.01)软关机RTC不跑时 原因:软关机会关晶振没有保持RTC
    处理方法:
power_config_rtc_clk(1);

image 13. 703-soundbox-2.0.0(patch01)蓝牙模式下人声消除效果差 原因:soundbox_JL703N_2.0.0 (patch_01)这个版本sdk,蓝牙解码器后输出的是假立体声(左右声道混合了),导致人声消除效果异常。
整改方法:软件修改下图位置重新配置为真立体声。
image 14. 703-soundbox-1.0.0(patch00.13)人声消除节点无法通过按键进行开关切换 原因:

  1. 应用层缺少bypass配置的命令。 2、media库逻辑不完整。 处理方法:
  • 按下面截图修改代码 image
  • 替换media.a库 人声消除bugfix.zip
  1. 703-soundbox-1.0.0(patch00.13)媒体配置iis输出,在音乐模式下播放音乐一首歌曲结束后会出现异常死机 软件修改如下:
    image 原因是数据流stop 了两次, 这个版本同步节点每次 stop 都会往后面发一个 命令, iis 节点执行这个命令导致死机了。
  2. 703-soundbox-2.0.0(patch01)SDK 当样机使用2脚晶振蓝牙测试盒无线升级失败问题 修改办法:按照补丁修改替换OTA.bin 即可
    【金山文档 | WPS云文档】 2024-11-22_BR27_2脚晶振无法升级_蓝牙连接异常.zip
    2024-11-22_BR27_2脚晶振无法升级_蓝牙连接异常.zip
  3. 703-soundbox-2.0.0(patch01.04)SDK JL703N 变声接口异常死机问题 更新变音的参数接口里面
void audio_voice_changer_mode_switch(u16 uuid, char *name, VOICE_CHANGER_MODE mode)

image VOICECHANGER_PARM 的定义如下
image 结果会导致
image 修改方法:
image 18. 703-soundbox-2.0.0(patch01.04)SDK JL703N 音量调到0,或从0调到1,蓝牙模式下,上下曲都会有杂音 修改办法:关闭 dac mute
image 19. 703-soundbox-2.0.0(patch01.04)场景切换函数无效

  1. 使用effect_scene_set进行媒体音频场景切换,切换效果无效。原因是该函数在修改节点音效时无法正确输入节点名称,需自己手动修改。 image 2、切换音效后,通过打断方式播放提示音,音效会恢复成默认音效。可通过在节点默认配置中对相应节点进行修改。(通过测试,发现该配置会被保存,重启后会保持关机前设置的状态,若不需要则需自己进行修改逻辑)
    image
  2. 703-soundbox-1.0.0(patch00.13)蓝牙测试盒升级失败 解决方法:更换ota.bin和ota_debug.bin。
    ota_BR27_20241224_修复维持IO.rar
  3. 703 不使用DAC 输出,但是却有ADC输入的功能(linein或者mic)会触发死机问题 原因:ADC 和DAC 的公共电源初始化部分无法完全割裂开,而没有DAC 节点就会缺少 ADC 的初始化
    修改办法:直接打开 ADC和DAC 的初始化
    image
  4. TWS 功能,声道怎么设置不区分左右声道。TWS配对后,单个也要输出立体声 image
    jlstream_ioctl(player->stream, NODE_IOC_SET_CHANNEL, AUDIO_CH_LR);
  1. local_TWS流程图改IIS输出后没有声音。提示音有声音。 localtws改IIS没声音的是流程图不匹配导致,一个是声道,一个是位宽,去掉了一个声道合并,增加了一个位宽转换
    image
  2. APE部分格式无法播放,打印FORMAT_OK_BUT_NO_SUPPORT。 APE格式分为几种类型,对应HIGH格式的默认没有打开,复杂度很高,占用内存过大,需要根据实际音效数量评估是否打开。
    image
  3. 获取歌词死机。 image 接口不匹配导致,替换这部分内容。
u32 lrc_fseek(FILE *file, int offset, int orig)
{
    u32 pos = fseek(file, offset, orig);
    return pos;
}

u32 lrc_fread(FILE *file, void *buf, u32 len)
{
    u32 rlen = fread(buf, len, 1, file);
    return rlen;
}

static LRC_FILE_IO lrc_file_io = {
    /* .seek = fseek, */
    /* .read = fread, */

    .seek = lrc_fseek,
    .read = lrc_fread,
};
// static LRC_FILE_IO lrc_file_io = {
//     .seek = fseek,
//     .read = fread,
// };
  1. 修复四线模式播放SD卡挂载不上问题。 解决办法:更换cpu.a
    AC703_soundbox_2.0.0_patch01.06_4bit_sdmmc_20250314_cpu.rar
  2. 修改IRKEY红外按键快速按一直触发wakeup导致流程异常问题。 如果需要关机之后唤醒,要改下图2,关机前要把唤醒开回来
    imageimage
  3. 703-soundbox-2.0.0(patch01.07)增加频谱获取节点后触发死机断言 问题点描述:增加频谱获取节点后,U盘播歌第一首结束后会触发断言信息 spec255 info unknow
    image 解决办法:更换下面媒体库
    media_JL703N_soundbox_2.0.0(patch_01.07)_修复增加频谱获取节点后播放U盘一首歌曲结束后断言死机问题.rar
    相同问题在703-leaudio-2.0.0(patch01)版本sdk 同样能复现到
    解决办法:更换下面媒体库
    media_JL703N_leaudio_2.0.0(patch_01)_修复增加频谱获取节点后播放U盘一首歌曲结束后断言死机问题.rar
  4. 703-soundbox-2.0.0(patch01.07)MCPWM模块异常 问题原因:由于LSB时钟改变,重新设定频率和占空比函数有问题。
    处理办法:
    替换以下函数或者固定时钟频率(如果客户要求pwm波形一点都不能抖动,如有电机、升压、舵机等场景,需要让客户固定时钟频率,重新设定寄存器有短暂pwm没有或者不对的情况)
void mcpwm_set_frequency(int mcpwm_cfg_id, mcpwm_aligned_mode_type align, u32 frequency)
{
    ASSERT(mcpwm_info[mcpwm_cfg_id] != NULL, "func:%s(), line:%d\n", __func__, __LINE__);
    int id = mcpwm_cfg_id;
    u32 ch = (u32)mcpwm_info[id]->cfg.ch;
    MCPWM_TIMERx_REG *timer_reg = mcpwm_get_timerx_reg(ch);

    u32 tmr_con = timer_reg->tmr_con;
    u16 tmr_pr = 0;
    asm("csync");

    u32 i = 0;
    u32 mcpwm_div_clk = 0;
    u32 mcpwm_tmr_pr = 0;
    u32 mcpwm_fre_min;
    u32 clk = MCPWM_CLK;
    for (i = 0; i < 16; i++) {
        mcpwm_fre_min = clk / (65536u << i);
        if ((frequency >= mcpwm_fre_min) || (i == 15)) {
            break;
        }
    }
    tmr_con &= ~(0x78);
    tmr_con |= (i << MCPWM_TMR_CKPS); //div 2^i
    mcpwm_div_clk = clk / (1 << i);
    if (frequency == 0) {
        mcpwm_tmr_pr = 0;
    } else {
        if (align == MCPWM_CENTER_ALIGNED) { //中心对齐
            mcpwm_tmr_pr = mcpwm_div_clk / (frequency * 2) - 1;
        } else {
            mcpwm_tmr_pr = mcpwm_div_clk / frequency - 1;
        }
    }
    tmr_pr = mcpwm_tmr_pr;
    //timer mode
    if (align == MCPWM_CENTER_ALIGNED) { //中心对齐
        tmr_con |= 0b10; //递增-递降循环模式,中心对齐
    } else {
        tmr_con |= 0b01; //递增模式,边沿对齐
    }
    spin_lock(&mcpwm_lock);
    timer_reg->tmr_con = tmr_con;
    timer_reg->tmr_pr = tmr_pr;
    spin_unlock(&mcpwm_lock);
}

static void clock_critical_exit(void)
{
    u32 new_mcpwm_clk = MCPWM_CLK;
    if (new_mcpwm_clk == old_mcpwm_clk) {
        return;
    }
    MCPWM_CHx_REG *ch_reg;
    for (u8 ch = 0; ch < MCPWM_CH_MAX; ch++) {
        ch_reg = mcpwm_get_chx_reg(ch);
        if (ch_reg->ch_con0 & (BIT(MCPWM_CH_H_EN) | BIT(MCPWM_CH_L_EN))) {
            int id = mcpwm_get_cfg_id(ch);
            if (id != -1) {
                mcpwm_set_frequency(id, mcpwm_info[id]->cfg.aligned_mode, mcpwm_info[id]->cfg.frequency);
                mcpwm_set_duty(id,mcpwm_info[id]->cfg.duty);
            }
        }
    }
}
  1. 703-soundbox-2.0.0(patch01.07)播放U盘/sd卡 MP3 音频时获取id3 信息概率获取失败问题修改 问题原因:获取id3信息时候的seek 后, 另一个解码线程会有可能使得文件重新seek 到0位置了。
    image

#if TCFG_DEC_ID3_V1_ENABLE || TCFG_DEC_ID3_V2_ENABLE
static int file_name_match_mp3(char *file_name)
{
    const char *ext_name;
    for (int i = 0; file_name[i] != '\0'; i++) {
        if (file_name[i] == '.') {
            ext_name = file_name + i + 1;
            goto __match;
        }
    }
    return 0;
__match:
    if (!strncasecmp(ext_name, "mp3", 3)) {
        return 1;
    }
    return 0;
}
#endif
  1. le_audio 1.0.0(patch_02.08)拔卡死机 当插卡之后打印“sd0 dev entry lowpower !“此时拔掉T卡死机
    image修复卡驱动删除重复信号量导致死机补丁
  2. br27PDMMIC 采样只能达到20K的水平。 修改点:
    imageimage
  3. 703-soundbox-2.0.0(patch01.07)AutoDuck 闪避节点参数更新结构体。 使用参考echo 参数更新自行封装autoduck 的参数更新使用接口。
    image
struct autoduck_update_parm{
    int duck_amount; //背景音乐闪避的音量值(dB)
    int attack;     //启动时间(ms)
    int release;    //释放时间(ms)
    int hold_time;  //闪避之后的保持时间 (ms)
};

typedef struct __AutoDuckParam_TOOL_SET__ {
    int is_bypass;
    struct autoduck_update_parm parm;
}autoduck_param_tool_set;
  1. JL703N-SOUNDBOX-2.0.0-JL703N-demo-patch_01.07,开TWS本地转发 24BIT,主机插拔U盘,从机较高概率出现无声情况(主机声音正常,无异常打印) 问题流程图:
    image 问题现象:
    [DAC_NODE]dac node timestamp error : 4260595998, 3721866394, 0, diff : 16835300
    问题原因:
    1、switch节点初始丢数据时后续节点状态错误导致时间戳异常问题(对应rx无声)
    2、编码器位宽设置问题(对应一直uuuuuu)
    处理方法:
    jl703_soundbox_200p107_local_tws_24BIT从机时间戳不对问题_media.7z
  2. soundbox 2.0.0P01.07 music模式下获取音频码率、比特率、解码类型 703添加获取文件码率等信息的接口.7z
  3. leaudio 2.0.0P01开混合录音插设备播放不了 image 默认没开启《录音》音频流,手动打开即可
    image
  4. leaudio 2.0.0P01/soundbox 2.0.0P01.07有些设备混合录音时概率丢帧 703leaudio2.0.0P01-录音结束概率死机-录音掉帧-吴泽邦media.7z
    soundbox-JL703N-2.0.0-JL703N-demo-patch_01.07-吴泽邦media
    丢帧打印:
    image 修改缓存buff大小优化丢帧概率:
    注意:缓存大小不能超过u16类型的大小
    imageimage
  5. leaudio 2.0.0P01混合录音时在结束保存文件时概率死机 原因:文件关闭之后还往文件句柄写数据导致
    处理思路:先关闭流在关掉写文件
    死机log:
    imageimage 修改方法:
  6. 替换库文件 703leaudio2.0.0P01-录音结束概率死机-录音掉帧-吴泽邦media.7z
  7. 添加接口 image
int mix_recorder_close_file(void)
{
    struct file_recorder *recorder = (struct file_recorder *)g_rec_hdl.recorder;
    printf(">>>>>>>>>>> mix_recorder_close_file\n");
    if(recorder) {
        if (recorder->fops) {
            if (!recorder->fops->close) {
                return -EINVAL;
            }
            putchar('A');
            return recorder->fops->close(recorder->file);
        }
        putchar('B');
        return fclose((FILE *)recorder->file);
    }
    return 0;
}
  1. 修改接口 image
void mix_recorder_stop()
{
    // 先停掉录音,会有淡出操作
    g_rec_hdl.status = 0;
    file_recorder_stop(g_rec_hdl.recorder, 50);
    // 再关闭音源
    // g_rec_hdl.status = 0;
    os_time_dly(1);

    if (g_rec_hdl.old_file) {
        fclose(g_rec_hdl.old_file);
        g_rec_hdl.old_file = NULL;
    }
    if (g_rec_hdl.new_file) {
        fdelete(g_rec_hdl.new_file);
        g_rec_hdl.new_file = NULL;
    }
    file_recorder_release(g_rec_hdl.recorder);
    g_rec_hdl.recorder = NULL;
}

image 39. 703_leaudio 2.0.0(patch_01)默认sdk 打开TWS 会无法配对问题 解决办法:
增加切换到TWS mode 代码。
image 40. 703_leaudio 2.0.0(patch_01) 打开TWS 使能后,设置四声道输出时,单箱连接手机并没有真立体输出问题 在没有连接上TWS处理处加一个四声道输出的判断,也需要设置为 AUDIO_CH_LR
image

player->channel = ((TCFG_AUDIO_DAC_CONNECT_MODE == DAC_OUTPUT_LR)||(TCFG_AUDIO_DAC_CONNECT_MODE == DAC_OUTPUT_FRONT_LR_REAR_LR)) ? AUDIO_CH_LR : AUDIO_CH_MIX;
  1. 703 soundbox-JL703N-2.0.0-JL703N-demo-patch_01.07混合录音导致音频、录音卡顿丢帧问题 703_soundbox_200_p107_混合录音卡音问题_media.a.7z
  2. 703 soundbox-JL703N-2.0.0-JL703N-demo-patch_01.07 AAC格式音频无法播放 使用了TCFG_DEC_M4A_ENABLE的编解码,需要同时打开TCFG_DEC_M4A_ENABLE的宏
  3. 703 soundbox-JL703N-2.0.0-JL703N-demo-patch_01.07 RTC概率读错写错导致时间丢失的问题(多线程读取时间容易出现): 问题现象:
    image 处理方法:(月德修改读写RTC接口加锁)
    jl703_soundbox_200_P107_修改RTC时间异常问题.7z
  4. 703 soundbox-JL703N-2.0.0-JL703N-demo-patch_01.07 TWS 下在linein 模式下打开混合录音关闭录音时候会导致从机无声问题: 问题点:log显示 触发关闭转发命令
    image 处理办法:如下图修改,注释掉关闭的位置
    image
  5. 703_leaudio 2.0.0(patch_01) 设备跳转升级IO维持只有第一个IO能维持住,其余IO无法维持的问题 问题描述:PB02&1_PB08&1 ,PB2 是可以维持的,PB8 是无法维持的
    image 问题解决:修改INI文件
    image
  6. 703N_soundbox_2.0.0(patch_01.07)编译没有生成db_update_data.bin 文件 问题描述:打开双备份升级,使能了CONFIG_DB_UPDATE_DATA_GENERATE_EN后没有生成db_update_data.bin 文件
    image 根本原因:isd_download.exe的版本不够,需要更新tools路径下的isd_download.exe
    处理方案:替换SDK的tools目录下的isd_download.exe,可以用下载目录工具更新的脚本,把脚本放到SDK isd_download.exe同级目录下,双击运行就可以自动更新isd_download.exe
    脚本:下载目录工具更新脚本

45、703_leaudio 2.0.0(patch_01.04) 在扩音器模式下,打断播放提示音后又杂音问题处理:

打断前调用loudspeaker_stop() 关闭音频流,提示音结束后loudspeaker_start 重新打开
imageimage 47. 703无法进入蓝牙SNIFF低功耗模式 解决方案:换btctrler.a
觉栋_btctrler_703_蓝牙进低功耗.7z
48. le_audio-JL703N-2.0.0-JL703N-demo-patch_01.10 BIG广播从机无声音问题 image gitlab:http://192.168.1.245/freebrand/support/visualization/le_audio/JL703Nle_audio_2.0.0/-/tree/bugfix_703_le_01.10_BIG%E5%B9%BF%E6%92%AD%E4%BB%8E%E6%9C%BA%E6%97%A0%E5%A3%B0%E9%97%AE%E9%A2%98
49. le_audio-JL703N-2.0.0-patch_01.08 /le_audio-JL703N-2.0.0-patch_01.10 部分U盘挂载慢问题处理 问题表现:部分U盘挂载慢导致解码慢出声音慢:
打印有以下log:
image 解决办法:自行对比下面压缩包中修改前的文件和修改后的文件。
e_audio-JL703N-2.0.0-patch_01.10部分U盘挂载慢问题处理.rar
gitlab:
文件 · bugfix_703_le_P01.10_部分U盘挂载解码慢 · 自由品牌 / 客户支持 / JLStudio / le_audio / JL703Nle_audio_2.0.0 · GitLab
50. le_audio_JL703N_2.0.0_patch01.09 广播 24 bit 异常 异常日志:
image 解决:
同步 patch01.10 三个源文件
image 51. le_audio_JL703N_2.0.0_patch01.08 、le_audio_JL703N_2.0.0_patch01.09、和le_audio_JL703N_2.0.0_patch01.10 和le_audio_JL703N_2.0.0_patch01.11 版本sdk PC 模式下播放spk无声问题处理,若是16bit无声,24bit有声同样是这个处理办法处理。 替换 _spk_file.c文件,然后添加另外两文件的修改
pc_spk_file.c
image

// pc spk 数据流 暂停/继续接口,仅挂起stream.
// pc spk 数据流 暂停/继续接口,仅挂起stream.
int pc_spk_player_pp(void)
{
    if (g_pc_spk_player && g_pc_spk_player->stream) {
        jlstream_pp_toggle(g_pc_spk_player->stream, 0);
        return 0;
    } else {
        return -1;
    }
}

image

int pc_spk_player_pp(void);

demo:JL703Nle_audio_2.0.0-bugfix_703_le_P01.10_PC模式播放spk无声.zip
内部 gitlab链接
52. le_audio_JL703N_2.0.0_patch01.10 广播问题处理 1. 广播主机音乐暂停后,不停开关广播,容易死机 2. 固定主机,在暂停音乐的时候开启广播,之后打开音乐播放,在一段时间之后DAC断断续续播空 补丁:可视化AC703patch10_广播问题处理.7z
内部gitlab:文件 · feature_703_200_P10_BIS · 自由品牌 / 客户支持 / JLStudio / le_audio / JL703Nle_audio_2.0.0 · GitLab
53. le_audio_JL703N_2.0.0_patch01.10 PC模式,在24BIT/96K高码率情况下会死机。 image PCSPK给定的buf太小是固定值,后续改为动态lbuf申请的方式。
buf大小需要满足公式计算结果,如9600024/82/1000这个大小。
54. le_audio_JL703N_2.0.0_patch01.05 第二次通话后回音消除失效 修改方法:替换media.a
【金山文档 | WPS云文档】 media_修复通话回音消除失效
https://www.kdocs.cn/l/cvBRcXjPu239
55. le_audio_JL703N_2.0.0_patch01.10 配置linein叠加输出的时候注意事项:

  • 改蓝牙同步配置为本地时钟同步: image
  • 配置linein为数据流为流控 image
  1. le_audio_JL703N_2.0.0_patch01.10 local_tws的情况下linein没有声音。 联动失效了,需要手动将流程图中DAC的缓存是100ms,需要在音频配置中将DAC的延时也改成100ms。
    imageimage
  2. le_audio_JL703N_2.0.0_patch01.10 杰理之家获取到文件目录是空白。 image
  3. le_audio_JL703N_2.0.0_patch01.05 TWS本地转发去除EQ等音效,会出现异常 复现环境:
    image 处理方法:
    1、localtws 模式,dac/iis 的通道延时要配置100。
    imageimage 2、24bit时,TWS本地音乐转发的编解码位宽也要改为24位
    image
  4. le_audio_JL703N_2.0.0_patch01.10 串口升级
TX PB7
RX PB10

从机:
Files · feature_串口从机升级 · JL-Studio / Leaudio / 703N / JL703N_le_audio_2.0.0 · GitLab
主机:
Files · feature_串口主机升级 · JL-Studio / Leaudio / 703N / JL703N_le_audio_2.0.0 · GitLab
60. le_audio_JL703N_2.0.0_patch01.10 USB SPK位宽设置24bit,插PC会死机 处理方法:
spk_double_buf的大小没有根据位宽和采样率变化,导致数组越界,按如下公式计算自己需要的buf大小并修改即可,后续新版本会增加公式计算。
imageimage 61. le_audio_JL703N_2.0.0_patch01.10 连接部分MAC电脑时出现假链接现象(电脑上先显示连上,十几秒后断开回连) btctrler_志英_修改703leaudio连接MAC电脑假链接问题.7z
62. le_audio_JL703N_2.0.0_patch01.10 关闭AAC使能后,播歌拉距远距离会出现异常声音 兆涛_703_leaudio_P10_media_修改关闭AAC后拉距出现滋滋声.7z
63. le_audio_JL703N_2.0.0_patch01.10 先开广播再切换SPDIF光纤输入,会打印‘a’,无法播放和广播。 修改方法:
具体参考git链接对应demo修改。
外网:Files · bugfix_sdk_2.0.0_p01.10_修复SPDIF广播异常问题 · JL-Studio / Leaudio / 703N / JL703N_le_audio_2.0.0 · GitLab
内网:Files · bugfix_sdk_2.0.0_p01.10_修复SPDIF广播异常问题 · 可视化SDK / le_audio / JL703Nle_audio_SDK / JL703Nle_audio_2.0.0 · GitLab
64. le_audio_JL703N_2.0.0_patch01.10 媒体流和mic_effect 数据流同时增加spectrum频谱获取节点导致死机问题。 修改办法:替换media.a
65. le_audio_JL703N_2.0.0_patch01.10 先开广播再进HDMI输入模式,重复切换模式会死机 原因:打开广播后,进入SPDIF模式会多初始化一遍CEC模块。
修改办法:
在CEC初始化模块增加限制,避免重复初始化。

    if (__this->time_id != 0 && __this->time_id != -1) {
        return;
    }

image 66. le_audio_JL703N_2.0.0_patch01.08 在线调音修改魔音节点EffectV参数无效 原因:相关算法未使能
修改办法:
将相应算法使能即可,后续版本会将该使能放到可视化工具的对应音效节点上。
image 67. le_audio_JL703N_2.0.0_patch01.09 测试盒连接蓝牙后测试盒直接断开会有杂音出现。 问题描述:测试盒连接703蓝牙后直接断电测试盒703会有杂音出现,且出现下列的异常打印。
image 修改办法:更换media.a
media_铜霭_703_leaudio_P109_直接断开测试盒有杂音问题.rar
gitlab链接:
68. CIS主从连接,BT模式下连接主从能出声,切换到Linein模式,概率出现只有主机能出声、从机无法出声 image 一、根本原因:
时序竞争问题:CIG_EVENT_CENTRAL_CONNECT的CIG连接事件 早于linein的LE_AUDIO_APP_OPEN出来,则从机无声。因为没有打开linein的广播发射
二、处理方案:
1、关闭蓝牙后台后,暂不打开CIG。等到LE_AUDIO_APP_OPEN事件后,再执行恢复app_connected_resume();
2、在 app_connected_open_in_other_mode() 中检查是否有挂起的 CIS(模式切换场景),如果有则跳过
image 69. le_audio-JL703N-2.0.0-JL703N-demo-patch_01.10 PC模式广播会出现哒哒声 处理方案:
Files · bugfix_sdk_p01.10_PC广播 · JL-Studio / Leaudio / 703N / JL703N_le_audio_2.0.0 · GitLab

问题处理

  1. JL703N 音频流程FAQ

  2. PC SPK配置IIS输出配置图 需要把PC的解码链接到音频的媒体输出
    imageimage

  3. DAC四声道输出配置(四声道独立EQ) 框图如下:
    image 注意:如果开了消人声模块,则经过模块处理后,LR的声音会一样。
    导入.x6flow文件
    【金山文档】 四声道
    金山文档
    image 每个EQ对应的声道如下:
    image

  4. 播放不了多通道(大于2音轨/声道)的WAV格式音频 现象:直接退出播放
    原因:默认sdk设置了不支持播放 大于sdk最大音轨/声道的音频文件
    image log:
    image 工具自己的需求修改对应宏参数

  5. JL703最大支持DEC采样率修改 部分歌曲的采样率有192KHZ,这种歌曲无法播放,需要修改DEC解码库默认支持的最大采样率范围
    imageimage 需要修改解码支持的最大采样率配置

案例分享

  1. JL703N spdif 信息位给过来的采样率信息不正确兼容性问题处理 问题描述:由于spdif 信号携带的信息位表明采样率与实际波形不相符,所以我们不去解码这种不正规的信号
    image 解决办法:用实际的采样率作为解码的采样率,而不是使用信号位信息给过来的采样率信息作为解码的采样率,对比修改文件:
    spdif_file(JL703N_soundbox_处理spdif信息位采样率不正确的兼容性问题)
    另外有一些非标准采样率的信号的兼容性措施
    例如:信息位给过来的信号采样率为44.1K,但是实际的采样率为93750 ,而93750是非标准的采样率,相对于96K 有较大误差。
    image 这个时候,可以增加多一个采样,同样对比修改文件:
    spdif_file(JL703N_soundbox_处理spdif信息位采样率不正确的兼容性问题)
    并增加多一组93700采样率设置,这样可以做到在纠错误差为100的时候:
    image
  2. JL703N 四声道输出,每一个声道音量独立控制的实现 由于默认固定模拟增益,采用调节数字音量方式实现音量调节
    image 所以可以通过调用接口直接对每一个声道设置独立的数字音量
    image
  3. JL703N 创建IIS 输入dac 输出数据流参考demo 703创建IIS 输入dac输出音频流demo.otl
  4. JL703N 经典蓝牙连接,需要使用pin_code连接的设置接口 image
  5. JL703N 做特殊按键只响应单击事件处理的参考实现办法 image
  6. JL703N 做媒体数据流同时上传给到PC的参考实现办法 703将媒体流音频同时上传PC_mic录音demo实现.otl
  7. JL703N 两路PDMMIC上传PC的参考 jl703_pdmmic改立体声两路demo.7z
  8. 多文件叠加无缝循环播放 多文件叠加无缝循环播放修改说明.zip
    主要看multi_file_play.md 文件(工具主要给提示音节点加了个可配置名字,然后加了 数据流程)
    添加流程图
    image 代码上面播放的示例
    image
  9. 703 le audio 播放提示音文件 注意:
  10. 多提示音同时播放时需要相同采样率音频文件
  11. 建议使用le audio 2.0.0P01.11及以后的版本去做
  12. 测试使用到的提示音0~9时间都是一样长,如果同时播放只有其中一个有声音数据其他都是静音数据 0~9WAV-48K采样
    0~9MP3-8K采样
    image
  13. le audio 2.0.0P01.05同时播放多个提示音 内存、算力足够:测试可以同时播放8个
  14. demo: Files · feature_播放多路音频文件_sdk_p0105 · JL-Studio / Leaudio / 703N / JL703N_le_audio_2.0.0 · GitLab
    内部git
  15. 提示音播放路径设置
  16. 播放路径设置:
    1. 注意事项 tone_table.c中chinese_tone_files变量的路径是包含了一层目录“tone_zh/”或者“tone_en/”,需要根据实际情况在SD卡中创建对应的文件夹
//play_ex_dev  PLAY_DEV_FLASH:内部flash PLAY_DEV_EX_FLASH:外部flash  PLAY_DEV_SD:sd PLAY_DEV_USB:usb
static play_dev_t play_ex_dev = PLAY_DEV_FLASH;
  1. 代码以及工具修改 默认sdk支持多文件叠加播放
    imageimage
//播放接口
void multifile_play_demo(void);
//停止接口
//指定需要关闭的文件播放器
void fileplay_close(struct tone_player *player);
//关闭所有文件播放器
void fileplay_close_all();

//避免系统播放低电、模式等接口与多文件播放接口添加“互斥” 需要修改接口
struct tone_player *play_fileplay_file(const char *file_name, u8 index)
{
    struct tone_player *player;
#ifdef  CONFIG_FPGA_ENABLE
    /* return -ENOMEM; */
#endif

    if(tone_player_runing())tone_player_stop();//播放提示音时播放 多路播放文件死机
    ....
}
int play_tone_file(const char *file_name)
{
    struct tone_player *player;
#ifdef  CONFIG_FPGA_ENABLE
    /* return -ENOMEM; */
#endif
    fileplay_close_all();
    
    player = tone_player_create(file_name);
    if (!player) {
        return -ENOMEM;
    }
    return tone_player_add(player);
}
  1. 测试接口:
    case APP_MSG_TONE_PLAYER:
        r_printf("APP_MSG_TONE_PLAYER");
        u_play_tone_file(get_tone_files()->max_vol);
        break;
    case APP_MSG_TONE_PLAYER_START:
        r_printf("APP_MSG_TONE_PLAYER_START");
        u_multifile_play_demo();
        break;
    case APP_MSG_TONE_PLAYER_STOP:
        r_printf("APP_MSG_TONE_PLAYER_STOP");
        u_fileplay_close_all();
        break;
  1. le audio 2.0.0P01.11 同时播放多个提示音 注意:
  2. 内存、算力足够:测试可以同时播放10个
  3. 支持flash、sd、usb播放路径设置,且在播放结束之后软件切换路径
    1. 在app_task_loop中添加u_tone_player_init 程序下载地址:Files · feature_同时播放多个提示音_sdk_p0111 · JL-Studio / Leaudio / 703N / JL703N_le_audio_2.0.0 · GitLab
  4. 修改文件列表: 下载文件地址word/file
    1. 库文件:media.a
    2. tone_player.c、tone_player.h
  5. 工具上在系统模式中添加多文件播放音频流 注意:音频流节点名称必须与代码保持一致
    image
  6. 避免没有找到任务配置导致断言,需要在app_main.c中增加多个音频流任务配置
{"jlstream_d",          5,     0,  768,   0 },
{"jlstream_e",          5,     0,  768,   0 },
{"jlstream_f",          5,     0,  768,   0 },
{"jlstream_g",          5,     0,  768,   0 },
{"jlstream_h",          5,     0,  768,   0 },
{"jlstream_i",          5,     0,  768,   0 },
{"jlstream_j",          5,     0,  768,   0 },
{"jlstream_k",          5,     0,  768,   0 },
{"jlstream_l",          5,     0,  768,   0 },
{"jlstream_m",          5,     0,  768,   0 },
{"jlstream_n",          5,     0,  768,   0 },
{"jlstream_o",          5,     0,  768,   0 },
{"jlstream_p",          5,     0,  768,   0 },
{"jlstream_q",          5,     0,  768,   0 },
{"jlstream_r",          5,     0,  768,   0 },
{"jlstream_s",          5,     0,  768,   0 },

imageimage 4. 在app_task_loop中添加u_tone_player_init

static void app_task_loop(void *p){
    struct app_mode *mode;

    mode = app_task_init();
    //添加提示音播放器初始化
    u_tone_player_init();
}
  1. 添加如下接口工外部调用
/**
 * @brief 多文件提示音播放接口
 * 
 * @param file_name 提示音文件名
 * @param index 提示音节点名索引
 * @return struct tone_player* 提示音播放器指针
 */
struct tone_player *u_play_fileplay_file(const char *file_name);

/**
 * @brief 多文件提示音播放接口
 * 
 * @param file_name 提示音文件名
 * @return true 提示音播放器是否运行中
 * @return false 提示音播放器是否未运行中
 */
bool u_play_fileplay_file_runing(const char *file_name);
/**
* @brief 多文件提示音播放测试demo
* 
*/
void multifile_play_demo(void);

/**
 * @brief 提示音资源存放路径切换接口
 * 
 * @param dev 提示音资源存放设备,
 * PLAY_DEV_FLASH flash 
 * PLAY_DEV_SD sd 
 *PLAY_DEV_USB usb
 */
void u_set_play_ex_dev(play_dev_t dev);

/**
 * @brief 提示音播放器初始化
 * 上电开机时判断设备是否上线,上线失败则切换为flash设备播放提示音,避免提示音无法播放
 * 
 */
void u_tone_player_init(void);

  1. 添加多个自定义io唤醒 内部git
  2. 在key_wakeup_init中调用user_wakeup_init image
  3. 唤醒io配置 image
  4. 新增代码如下

static struct _p33_io_wakeup_config user_wakeup_port[]={
    [0]={
        .pullup_down_mode =  PORT_KEEP_STATE,
        .filter              = PORT_FLT_DISABLE,
        .edge               = FALLING_EDGE,
        .gpio               = IO_PORTB_07,
        .callback            = user_wakeup_callback,
    },
    [1]={
        .pullup_down_mode =  PORT_KEEP_STATE,
        .filter              = PORT_FLT_DISABLE,
        .edge               = FALLING_EDGE,
        .gpio               = IO_PORTB_08,
        .callback            = user_wakeup_callback,
    },
};
static void user_wakeup_callback(P33_IO_WKUP_EDGE edge)
{
    // key_active_set(0);
}
static u8 user_sleep_enter(void)
{
    //进入低功耗打开唤醒
    for(int i=0;i<ARRAY_SIZE(user_wakeup_port);i++){
        p33_io_wakeup_enable(user_wakeup_port[i].gpio, 1);
    }
    return 0;
}

static u8 user_sleep_exit(void)
{
    //退出低功耗打开唤醒
    for(int i=0;i<ARRAY_SIZE(user_wakeup_port);i++){
        p33_io_wakeup_enable(user_wakeup_port[i].gpio, 0);
    }
    return 0;
}

SLEEP_TARGET_REGISTER(user_pdown_tag) = {
    .name = "userwakeup",
    .enter = user_sleep_enter,
    .exit = user_sleep_exit,
};

static void user_soff_enter(void)
{
    //软关机前打开唤醒使能
    r_printf("user_soff_enter");
    for(int i=0;i<ARRAY_SIZE(user_wakeup_port);i++){
        p33_io_wakeup_enable(user_wakeup_port[i].gpio, 1);
        soff_gpio_protect(user_wakeup_port[i].gpio);
    }
}

platform_uninitcall(user_soff_enter);

int user_wakeup_init_number(struct _p33_io_wakeup_config *wakeup_port){
    if(!wakeup_port)return-1;

    switch (wakeup_port->edge){
    case FALLING_EDGE:
        gpio_set_mode(IO_PORT_SPILT(wakeup_port->gpio), PORT_INPUT_PULLUP_10K);
        break;
    case RISING_EDGE:
        gpio_set_mode(IO_PORT_SPILT(wakeup_port->gpio), PORT_INPUT_PULLDOWN_10K);
        break;    
    default:
        break;
    }
    if(PORT_KEEP_STATE!=wakeup_port->pullup_down_mode){
        gpio_set_mode(IO_PORT_SPILT(wakeup_port->gpio), wakeup_port->pullup_down_mode);
    }

    p33_io_wakeup_port_init(wakeup_port);
    p33_io_wakeup_enable(wakeup_port->gpio, 1);        //默认adkey、irkey开机唤醒不常开,进入低功耗和关机的时候再打开,避免电压抖动一直触发中断
    return 0;
}

int user_is_wakeup(u8 index){
    if(index<ARRAY_SIZE(user_wakeup_port)){
        return is_gpio_wakeup(user_wakeup_port[index].gpio);
    }
    return -1;
}
void user_wakeup_init(void){
    r_printf("user_wakeup_init %d",ARRAY_SIZE(user_wakeup_port));

    for(int i=0;i<ARRAY_SIZE(user_wakeup_port);i++){
        g_printf("user is index %d wakeup : %d",i,user_is_wakeup(i));
        user_wakeup_init_number(user_wakeup_port+i);
    }

    reset_source_dump();
}
  1. 703 le audio 2.0.0P01.05 EQ表切换 内部git
  • 默认music eq0节点的eq表切换
    case APP_MSG_MUSIC_CHANGE_EQ:
        u8 music_eq_preset_index = get_music_eq_preset_index();
        music_eq_preset_index ^= 1;
        set_music_eq_preset_index(music_eq_preset_index);
        eq_update_parm(get_current_scene(), "Eq0Media", music_eq_preset_index);
        app_send_message(APP_MSG_EQ_CHANGED, get_music_eq_preset_index() + 1); //显示EQ从1开始
        printf("APP_MSG_MUSIC_CHANGE_EQ:%d\n", music_eq_preset_index);
        break;
  • 自己拉取eq节点的eq表切换
    • 添加eq节点 image
    • 编辑eq节点并添加多个eq表 imageimageimage
    • 切换eq表

        static u8 music_eq_preset_index = 0;
        music_eq_preset_index=(music_eq_preset_index+1)%3/*eq节点中的序号*/;
        eq_update_parm(get_current_scene(), "EQ134"/*节点名称*/, music_eq_preset_index);
        printf("APP_MSG_MUSIC_CHANGE_EQ:%d\n", music_eq_preset_index);
  1. 703 le audio 2.0.0P01.05 场景(分组)表切换 内部git
  • 新建多个场景(分组) image
  • 切换场景(分组)
        r_printf("APP_MSG_MUSIC_SCENE_SW 切换场景(分组)");
        effect_scene_set((get_current_scene()+1)%get_mode_scene_num());
        g_printf("scene loat num =%d cur=%d",get_mode_scene_num(),get_current_scene());
  1. 703 le audio 2.0.0P01.04/2.0.0P01.05扩音器输入源的选择 内部git
  • 扩音器音频流有两条个流程 image
  • 默认选择为iis输入的音频流
  • 如果在进LOUDSPEAKER(扩音器)模式,时需要切换可以使用如下接口切换
/**
*source:
*0:ADC MIC
*1:IIS MIC
*/
void set_loudspeaker_source(u8 source);
  • 修改默认扩音器模式的音乐流程图
u8 loudspeaker_source_flag = 0;//1:IIS MIC  0:ADC MIC

14. 使用场景切换更新3D 节点参数

内部git
案例使用:APP_MSG_SWITCH_SOUND_EFFECT
修改文件:scene_switch.c
image

static char *threeD_name[] = {"ThreeD0"};

/*
 *媒体模块节点参数更新
 * */
static int module_node_update_parm_by_uuid(
    int (*node_update)(unsigned short uuid, u8 mode_index, char* node_name, u8 cfg_index), unsigned short uuid,
    u8 mode_index, char* son_node_name, u8 cfg_index)
{
    int ret;
    char tar_name[16];
    for (int j = 0; j < ARRAY_SIZE(father_name); j++) {
        effects_name_sprintf_to_hash(tar_name, son_node_name, father_name[j]);
        if (node_update) {
            ret = node_update(uuid, mode_index, tar_name, cfg_index);
            if (ret < 0) {
                continue;
            } else {
                break;
            }
        }
    }
    return ret;
}

void effect_scene_set(u8 scene)
{
    // user add
#if TCFG_THREE_D_EFFECT_NODE_ENABLE
    for (int i = 0; i < ARRAY_SIZE(threeD_name); i++) {
        effects_name_sprintf(tar_name, threeD_name[i], music_mode[cur_mode]);
        ret = node_param_update_parm(NODE_UUID_THREE_D, scene, tar_name, 0);
        if (ret < 0) {
#if MEDIA_MODULE_NODE_UPDATE_EN
            module_node_update_parm_by_uuid(node_param_update_parm, NODE_UUID_THREE_D, scene, threeD_name[i], 0);
#endif
        }
    }
#endif
}

  1. 703 le audio 2.0.0P01.05 写vm之后关机开机时vm数据不是原来写入的数据 内部git
    测试代码如下:

#define USER_WRITE_0    0//默认sdk,每次写vm都是写入到ram中,只有在软关机时才会把存在ram中的vm数据写到flash中
#define USER_WRITE_1    1//每次写入vm都需要调用调用类似Linux下的sync命令 写入到flash
#define USER_WRITE_2    2//所有的写vm操作直接操作flash

#define USER_WRITE  USER_WRITE_1
#define USER_VM_ID  37//(CFG_USER_DEFINE_BEGIN+4)
void u_wr_vm(void *p){
    int ret=0;
    u8 data[4]={
        4,5,6,7
    };
    ret=syscfg_read(USER_VM_ID,&data,sizeof(data));
    r_printf("------vm_ram=%d--read--ret=%d",get_vm_ram_direct_2_flash_switch() ,ret);
    for(int i=0;i<sizeof(data)/sizeof(data[0]);i++){
        r_printf("data[%d]=%d",i,data[i]);        
    }
    data[0]=(data[0]+1)%0xff;
    data[1]=(data[1]+1)%0xff;
    data[2]=(data[2]+1)%0xff;
    data[3]=(data[3]+1)%0xff;
    ret=syscfg_write(USER_VM_ID,&data,sizeof(data));
    g_printf("------vm_ram=%d--write--ret=%d",get_vm_ram_direct_2_flash_switch() ,ret);
    for(int i=0;i<sizeof(data)/sizeof(data[0]);i++){
        g_printf("data[%d]=%d",i,data[i]);        
    }
    #if(defined(USER_WRITE)&&(USER_WRITE==USER_WRITE_1))
    vm_flush2flash(0);//每次写入都需要调用一次
    #endif
}
//*----------------------------------------------------------------------------*/
/**@brief   开机启动
  @param    无
  @return
  @note
 */
/*----------------------------------------------------------------------------*/
static void poweron_task_start()
{
    #if(defined(USER_WRITE)&&(USER_WRITE==USER_WRITE_2))
    vm_ram_direct_2_flash_switch(1);//总的开关
    #endif
    sys_timer_add(NULL,u_wr_vm,1000);
#if TCFG_APP_BT_EN
    app_send_message(APP_MSG_GOTO_MODE, APP_MODE_BT);
#else
    /* app_send_message(APP_MSG_GOTO_MODE, APP_MODE_IDLE); */
    app_send_message(APP_MSG_GOTO_NEXT_MODE, 0);
#endif
}
  1. aw32+JL7034_扩音器项目 源码 aw23a_TX链接:
    内部git
    wireless_mic_aw32n_1.0.0_tx-case_aw32+JL7034_扩音器项目.zip
    aw23a_RX链接:
    内部git
    wireless_mic_aw32n_1.0.0_rx-case_aw32+JL7034_扩音器项目.zip
    JL7034A程序链接:
    内部git
    JL703Nle_audio_2.0.0-case_aw32+JL7034_扩音器项目.zip
    标准原理图获取途径:
    image
  2. JL703N 扩音器iis输入录音 录音的音频流修改如下:
    image 修改下面的内容:
    image 如果全局采样率不是16k,需增加下面的内容:
    imageimage
  3. 703_le_audio_2.0.0_P01.10_四路IIS输入输出demo 703四路IIS输入输出demo.otl
    image gitlab:Files · feature_703_le_200_01.10_4路IIS输入输出 · 自由品牌 / 客户支持 / JLStudio / le_audio / JL703Nle_audio_2.0.0 · GitLab
  4. 703_le_audio_2.0.0_P01.11 广播关掉本地同步播放之后获取能量 相关信息:
  5. LE_AUDIO配置->公共配置->本地同步播放关掉之后
  6. 广播模式使用的是LE_Aduio音频流,非广播模式使用的是媒体音频流
  7. 所以获取广播模式与非广播模式Energy(能量节点)的值,需要在两个音频流中添加Energy节点 image dmeo:Files · feature_获取广播与非广播模式下的能量值 · JL-Studio / Leaudio / 703N / JL703N_le_audio_2.0.0 · GitLab
  8. 703_le_audio_2.0.0_P01.10 SPDIF+DAC+IIS输出demo 内网:Files · feature_sdk_2.0.0_p01.10_SPDIF+IIS+DAC输出 · 可视化SDK / le_audio / JL703Nle_audio_SDK / JL703Nle_audio_2.0.0 · GitLab
    demo:Files · feature_sdk_2.0.0_p01.10_SPDIF+IIS+DAC输出 · JL-Studio / Leaudio / 703N / JL703N_le_audio_2.0.0 · GitLab
    修复问题:
  9. 优化U盘、linein、SPDIF模式,SPDIF输出无声
  10. 优化SPDIF不同采样率兼容性问题
  11. 优化U盘、linein模式SPDIF输出声道概率异常问题
  12. 优化音乐模式暂停时SPDIF输出有尾音问题
  13. 修复先开广播再切光纤输入模式,会出现光纤音频无法播放的问题。
  14. 修复先开关广播再插入光纤线会打印c且无声的问题
  15. 修复SPDIF模式PP键异常问题

本文档包含以下子页面

  • 703数据流对应节点参数更新办法及如何修改设置默认参数
  • 703创建IIS 输入dac输出音频流demo
  • 703将媒体流音频同时上传PC_mic录音demo实现
  • 703四路IIS输入输出demo
Prev
JL701N音箱问题整理(可视化工具SDK)
Next
JL709N(JL689N)音箱问题整理