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歌音响-调音标准流程
  • 无线话筒产测流程

无线麦相关应用

📎 原始文档:https://www.kdocs.cn/l/cltwUF4L6O2y 无线麦相关应用

各系列问题问题整理文档
链接:https://pan.baidu.com/s/1kjhBSPTfegAm3xRpuVv8NA
提取码:fxq3

第一章 功能DEMO及注意点

  1. 过产测就近连接功能的使用注意 当客户使用130版本1t1SDK需要过产测就近配对功能时,可以按照文档注释来配置配对名,但有一下注意点
    #define SPECIFIC_STRING "#@#@#@"//用户可自定义修改该特殊字符不可以低于3个字符
    需要注意配对名除去特殊字符后是否完全一致, 默认SDK中,由于配置工具中的蓝牙配对名是:“AC697N” 而程序中的配对名为“WL_MIC_V0”,故而默认的配对名为“AC697N_V0” 而增加了特殊字符后的配对名会使得除掉配对名后的名字与原有名字对应不上,导致匹配不上的问题故可将
    #define WL_MIC_PAIR_NAME "WL_MIC_V0"
    修改为
    #define WL_MIC_PAIR_NAME "WL_MIC"
    并且是收发双方都做同步修改
  2. 使用发送自定义命令的方法 MJW 方式1:调用已有发送命令接口,向RX发送1byte的命令
    方式2:调用回调函数的方式,向RX发送多个byte的自定义数据命令(131版本SDK之后的SDK才支持该方式)

1.2.1. 方式1:每次发送 1 byte

1、使用发送命令接口发送一个byte字节
2、①TX端增加发送命令长度为1
image ②TX端发送自定义命令接口,
image ③RX端解析命令,增加解析回调
image

1.2.2. 方式2:每次发送 n byte

“131版本之后的SDK才支持该方式”
调用回调函数的方式,发送多个数据的方法(不建议携带过多命令数据)
①TX端
增加数据长度和数据回调接口,发送命令的回调里面的数据可以灵活去写,不一定是写死
image 或者如下图的灵活写法:
imageimage ②RX接收数据,增加解析回调
image 注意点:
在141 2T1增加命令字节数大于或等于5byte,需要在RX段增加如下截图修改:如果有需要增加大于4个byte的命令长度,需要同步修改如下位置的大小,默认是55,如需多加5个byte的命令,则需要修改为56,该数值代表RX接收每一包数据的长度限制。
image

1.2.3. duplex 形态的sdk 包双向的数据收发详情可看下列文档:

duplex sdk 中 双向数据收发说明.otl

1.2.4. 2T1的RX回传命令给TX端,可以查看下列文档中的内容:

2T1的RX回传命令给TX端,可以查看下列文档中的内容:
无线麦SDK用户自定义数据收发接口说明文档.pdf

  1. 通用版RX端增加mictodac功能(适用1T1/2T1/1TN形态) 功能描述:RX端多开一个mic,mic数据跟TX发送过来的数据做混合处理
    【金山文档】 wireless_mic_sdk-v1.4.0_2t1(rx_mic_mixer做法)方法实现
    https://kdocs.cn/l/ccDSqGGntlD0
    注意:
    当使用wireless_mic_sdk-v1.4.1_2t1 增加RX开mic功能时,注意以下文件的变更
    image
  2. 实现上电之后,固定降噪等级的方法实现 针对某些产品不需要通过按键去控制设置实际需要的降噪等级,而采用固定降噪等级的设计的方法
    直接设置初始化降噪节点的参数
    image
  3. 手机通话打开的是手机麦的问题解决 或者需要耳机标识的修改办法 该问题是怎么引起的?
    默认SDK中USB麦录音和微信语音都是开的发射器的mic,但是手机通话却是开的手机本身的mic 要是产品需要通话也使用发射端的mic可做以下修改
    解决办法:
    在USB配置中,增加speaker class
#define USB_DEVICE_CLASS_CONFIG             (MIC_CLASS | SPEAKER_CLASS)

该修改带来的副作用 1、手机插上USB麦之后,会在通知栏出现一个耳机的标识 2、手机声音无法做到外放。
注意:像全民K歌这种K歌软件,单纯使用MIC_CLASS 是无法录音的,需要增加SPEAKER_CLASS 手机才会使用USB mic
6. 增加提示音在1t1、2t1、1tN等系列的SDK中,并且RX在连接上播放提示音后会无声音的问题解决办法 20220209 MJW 130版本的各种形态的SDK,只有wireless_mic_sdk-v1.3.0_duplex SDK有做好的完整的提示音功能,其他1t1、2t1、1tN系列都没有做好的提示音功能,需要用到的时候可以参考wireless_mic_sdk-v1.3.0_duplex的earphone文件夹自行添加
解决办法:
以1t1的TX为例,
相关代码如下文件,可供复制:
【金山文档】 wireless_tone_patch1
https://kdocs.cn/l/ccCMOvc1kmGH
1、在1t1_tx.c中加入如下接口
image

#include "tone_player.h"
extern void audio_fade_in_fade_out(u8 left_gain, u8 right_gain, u8 fade);
static s32 cur_music_vol = -1;
static s32 cur_mic_vol = -1;
#define EARPHONE_TONE_DEFAULT_VOL  12
static void earphone_tone_play_callback(void *priv)
{
    printf("earphone_tone_play_callback\n");
    audio_fade_in_fade_out(0, 0, 0);
    //这里要加点延时,等声音输出完
    os_time_dly(15);
    cur_music_vol = -1;
    cur_mic_vol = -1;
}

static int earphone_tone_play(const char *list, u8 preemption)
{
    while (wl_mic_tone_get_dec_status() == TONE_START) {
        os_time_dly(5);
    }
    wl_mic_tone_play_stop();

    int err = wl_mic_tone_play(list, 0, earphone_tone_play_callback, NULL);
    if (0 == err)   {
        audio_fade_in_fade_out(EARPHONE_TONE_DEFAULT_VOL, EARPHONE_TONE_DEFAULT_VOL, 1);
    }
    return err;
}

2、在void app_main_run(void)接口中加入dac初始化,就可以使用earphone_tone_play接口调用提示音了
image

 if (audio_dac_init_status() == 0) {
        app_audio_output_init();
        /* app_audio_state_switch(APP_AUDIO_STATE_MUSIC, 15); */
        /* app_audio_set_volume(APP_AUDIO_STATE_MUSIC, 15, 0); */
    }
earphone_tone_play(TONE_POWER_ON, 1);

3、RX连接上之后无声音问题做如下修改
image

    u8 user_curr_vol = app_audio_get_volume(APP_AUDIO_STATE_MUSIC);
    audio_fade_in_fade_out(user_curr_vol, user_curr_vol, 0);

4、wireless_mic_sdk-v1.4.1_2t1 TX端上电不播放开机提示音,仅仅通过按键播放提示音,存在看门狗复位问题,修改如下。(去掉原本的app_audio_output_init,增加adc初始化,

extern struct audio_adc_hdl adc_hdl;
extern struct adc_platform_data adc_data;

audio_adc_init(&adc_hdl, &adc_data);

image 案例:144 2T1 SDK 关于打断播放的修改:
image

  1. RX端控制dac输出音量的调节接口 MJW

  2. 1、在使用140版本SDK之前的所有SDK版本都可以使用该接口实现音量等级调节(适用于br30 SDK) app_audio_set_volume(APP_AUDIO_STATE_MUSIC, X, 0);(其中X的取值为0-15)

  3. 在140 版本的2T1SDK,和duplex SDK上,实现音量等级调节的接口如下:(适用于br28SDK) 模拟音量调节接口:
    audio_sound_dac_set_analog_gain(audio->dac1, MAX_ANA_VOL);//设置音量
    数字音量调节接口:
    audio_sound_dac_set_digital_gain(audio->dac1, 16384);
    image 参考示例:
    【金山文档】 140_duplex_SDK_earphone动态调节音量
    140_duplex_SDK_earphone动态调节音量.docx

TX端控制MIC音量的调节接口

  1. TX端控制MIC音量的调节接口

8.1 采用自行改变mic数据音量大小的办法

image

#define USER_DIGITAL_VOL_MAX        10
u8 user_dig_vol_step = USER_DIGITAL_VOL_MAX;
const u16 user_dig_vol_table[USER_DIGITAL_VOL_MAX + 1] = {
    0    , //0
    1347, //1
    2751, //2
    3930, //3
    5616, //4
    6713, //5
    8025, //6
    9592, //7
    11466,//8
    15200,//9
    16384 //10改小 15000?
};
//单/双声道数字音量处理
// vol:0~16384(大于16384会把数据放大,有可能出现失真)
int user_audio_digital_vol_run(void *data, u32 len, u32 l_vol,u32 r_vol)
{
    s32 valuetemp;
    s16 *buf;

    buf = data;     //数据
    len >>= 1; //byte to point      //
    for (u32 i = 0; i < len; i += 2) {
        ///left channel
        valuetemp = buf[i];
        if (valuetemp < 0) {
            valuetemp = -valuetemp;
            valuetemp = (valuetemp * l_vol) >> 14 ;     //除以16384
            valuetemp = -valuetemp;
        } else {
            valuetemp = (valuetemp * l_vol) >> 14 ;
        }
        if (valuetemp < -32768) {
            valuetemp = -32768;
        } else if (valuetemp > 32767) {
            valuetemp = 32767;
        }
        buf[i] = (s16)valuetemp;
        ///right channel
        valuetemp = buf[i + 1];
        if (valuetemp < 0) {
            valuetemp = -valuetemp;
            valuetemp = (valuetemp * r_vol) >> 14 ;
            valuetemp = -valuetemp;
        } else {
            valuetemp = (valuetemp * r_vol) >> 14 ;
        }
        if (valuetemp < -32768) {
            valuetemp = -32768;
        } else if (valuetemp > 32767) {
            valuetemp = 32767;
        }
        buf[i + 1] = (s16)valuetemp;
    }
    return 0;
}


user_audio_digital_vol_run(in->data, in->data_len, user_dig_vol_table[user_dig_vol_step], user_dig_vol_table[user_dig_vol_step]);

增加按键切换音量表:
image

    case  KEY_USER_SET_DIG_VOL_UP:
    printf("KEY_USER_SET_DIG_VOL_UP\n");
        user_dig_vol_step++;
        if(user_dig_vol_step>=USER_DIGITAL_VOL_MAX){
            user_dig_vol_step = USER_DIGITAL_VOL_MAX;
        }
        break;
    case  KEY_USER_SET_DIG_VOL_DOWN:
    printf("KEY_USER_SET_DIG_VOL_UP\n");
        if(user_dig_vol_step==0){
           break;
        }
        user_dig_vol_step--;
        break;

1.8.2 采用动态调节mic增益的方法

在adapter_adc.c中定义如下函数接口,分别调用增加mic增益和降低mic增益接口可以实现功能。

static u8 mic_gain = 0;
//增加mic增益
void adapter_adc_mic_gain_increase()
{
    if (mic_gain < 13 && adapter_adc_mic->start) {
        mic       _gain ++;
        printf("mic_gain == %d\n", mic_gain);
        audio_set_mic_mute(0);
        audio_adc_mic_set_gain(&adapter_adc_mic->mic_ch, mic_gain);
    }
}
//降低mic增益
void adapter_adc_mic_gain_decrease()
{
    if (mic_gain > 0 && adapter_adc_mic->start) {
        mic_gain --;
        printf("mic_gain == %d\n", mic_gain);
        if (mic_gain == 0) {
            audio_set_mic_mute(1);
        }
        audio_adc_mic_set_gain(&adapter_adc_mic->mic_ch, mic_gain);
    }
}

1.8.3 调用接口做mute__mic功能

调用一下两个接口,分别可以mute掉mic0和mic1
image

1.8.4 直接清除 mic 数据达到 静音的功能

image

  1. 代码省内存的方法 ,在开启多个功能之后报错ASSERT: 0 No enough physics memory死机问题解决 MJW 如果打印时出现 “ASSERT: 0 No enough physics memory” 内存不足的情况。可以做以下操作省内存。
    不打算做RF测试,可以缩减RF测试用到的BUF的数值大小。
    image
  2. TX端开启EQ调节的配置方式 需要打开EQ总使能TCFG_EQ_ENABLE,和 通话上行EQ (phone_EQ) TCFG_PHONE_EQ_ENABLE,
    需要在线调试自行开关在线调试宏 TCFG_EQ_ONLINE_ENABLE
    image 打开在线调试后,仅仅支持串口调试,USB通信方式暂时不支持。
    imageimage 工具中选择通话宽带上行EQ。
    image
  3. 在TX端将原有调节的宽带上行EQ段数从3个点增加到10个点的方式 ①将下图的3改成10即可
    image
  4. 在697无线麦系列中RX端增加10段音频EQ节点的方法 ①增加音频EQ节点
    image
#if TCFG_EQ_ENABLE
struct audio_eq_drc_parm miceq_parm = {
    .sr = WIRELESS_CODING_SAMPLERATE,
    .ch_num = 1,
};
#endif

image

#if TCFG_EQ_ENABLE
    {
        .attr  = ADAPTER_STREAM_ATTR_MUSICEQ,
        .value = {
            .musiceq = {
                .parm = &miceq_parm,
                .data_handle = NULL,//如果要关注处理前的数据可以在这里注册回调
            },
        },
    },
#endif

自行增加使能音频EQ
image

#define TCFG_MUSIC_EQ_ENABLE                1   ///DISABLE //音频EQ

下面提供wireless_mic_sdk-v1.4.3_2t1 RX端实现增加10段音频EQ实现demo(供参考使用):
wireless_mic_sdk-v1.4.3_2t1_RX端增加10段音频EQdemo.rar
13. 在701无线麦系列中RX端增加10段music音频EQ节点的方法(以wireless_mic_sdk-v1.4.2_2t1 的 RX实现为例) ①增加音频EQ节点
image

#if TCFG_EQ_ENABLE&&TCFG_MUSIC_EQ_ENABLE
    {
        .attr  = ADAPTER_STREAM_ATTR_MUSICEQ,
        .value = {
            .musiceq = {
                .samplerate = WIRELESS_DECODE_SAMPLERATE,
#if TCFG_AUDIO_DAC_CONNECT_MODE == DAC_OUTPUT_MONO_LR_DIFF
                .ch_num = 1,
#else
                .ch_num = 2,
#endif
                .data_handle = NULL,//如果要关注处理前的数据可以在这里注册回调
            },
        },
    },
#endif

②自行增加使能音频EQ
image

#define TCFG_MUSIC_EQ_ENABLE                1   ///DISABLE //音频EQ

③增加配置工具在线调试使能(原SDK带有可省略,直接打开即可)


#if 1
//*********************************************************************************//
//                          新音箱配置工具 && 调音工具                             //
//*********************************************************************************//
#define TCFG_EFFECT_TOOL_ENABLE                1///DISABLE              //是否支持在线音效调试,使能该项还需使能EQ总使能TCFG_EQ_ENABL,
#define TCFG_NULL_COMM                        0                //不支持通信
#define TCFG_UART_COMM                        1                //串口通信
#define TCFG_USB_COMM                        2                //USB通信
#if (TCFG_CFG_TOOL_ENABLE || TCFG_EFFECT_TOOL_ENABLE)
#define TCFG_COMM_TYPE                        TCFG_UART_COMM    //通信方式选择
#else
#define TCFG_COMM_TYPE                        TCFG_NULL_COMM
#endif
#define TCFG_TOOL_TX_PORT                    IO_PORT_DP      //UART模式调试TX口选择
#define TCFG_TOOL_RX_PORT                    IO_PORT_DM      //UART模式调试RX口选择
#define TCFG_ONLINE_ENABLE                  (TCFG_EFFECT_TOOL_ENABLE)    //是否支持音效在线调试功能


#endif
  1. 增加动态切换EQ文件的方法 调用该接口即可动态切换EQ配置文件
    注意:其中eq_cfg_hw.bin、eq_cfg_hw1.bin、eq_cfg_hw2.bin根据实际在download.bat中加入的资源文件为准。
    可以调用该接口去改变需要切换的EQ效果文件
    image
void eq_mode_delay_change(void *mode)
{
    int err = 0;
    err = syscfg_write(CFG_USER_EQ_MODE, mode, 1);
    printf("mode is %d\n", (int)mode);
    if((int)mode == 0){
        eq_file_get_cfg(get_eq_cfg_hdl(), SDFILE_RES_ROOT_PATH"eq_cfg_hw.bin");
    }else if((int)mode == 1){
         eq_file_get_cfg(get_eq_cfg_hdl(), SDFILE_RES_ROOT_PATH"eq_cfg_hw1.bin");
    }else if((int)mode == 2){
         eq_file_get_cfg(get_eq_cfg_hdl(), SDFILE_RES_ROOT_PATH"eq_cfg_hw2.bin");
    }
}

wireless_mic_sdk-v1.4.1_duplex 701实现切换EQ效果文件功能注意点:
更换接口为:
image 同时需要替换下面的effect_adj.c文件【金山文档】 141_701_切换EQ效果文件替换_effects_adj
https://kdocs.cn/l/cbluWdrWAsvn
15. 在增加音频EQ节点的基础上 增加drc功能(AC697N) 打开drc功能使能,程序流程已经加好DRC,但是需要在EQ效果文件调节DRC模块才有具体效果
image drc功能开启注意:由于drc功能需要耗费的资源,所以不可以配置成立体声输出,不然会有卡顿现象出现
可以提高系统时钟
image

#if 1///(APP_MAIN == APP_WIRELESS_DUPLEX)
    //无线麦双工系统时钟需要跑144MHz, BR30这里PLL要配置成144
    clock_set_pll_target_frequency(240);
#endif

image

clk_set("sys", 160000000);
  1. TX端增加DRC节点的方法(JL701N) wireless_mic_sdk-v1.4.1_duplex SDK添加DRC.rar
  2. TX端动态调节混响效果的方法 增加调节混响效果的接口,可通过该接口控制混响效果的深度
void echo_vol_test(u8 gain)//参数范围可以控制在0-10
{
    if (wireless_mic_media) {
        adapter_decoder_ioctrl(wireless_mic_media->downdecode, ADAPTER_DEC_IOCTRL_CMD_ECHO_SET_PARM, 1, (int *)(gain));
    }
}

image 增加控制更新事件

    case ADAPTER_DEC_IOCTRL_CMD_ECHO_SET_PARM:
        value = (int)argv;
        printf("ADAPTER_DEC_IOCTRL_CMD_ECHO %d\n",value);
        if (__this->stream && __this->stream->echo) {
            // pause_echo(__this->stream->echo, 1);
            // void update_echo_gain(ECHO_API_STRUCT *echo_api_obj, int wetgain, int drygain);
            update_echo_gain(__this->stream->echo, value*4096/10, 4096);
        }
        break;

imageimage 18. 修改USB麦设备名称方法 在该接口处修改USB设备的设备名称,24代表整一个数组的字节大小,名称长度有变化的,应做对应修改,修改后一定要先卸载设备,重新插入后才会更新设备名。
PC相关应用.otl
image 19. 修改USB麦设备的PID和VID image 1.14 修改USB麦设备的USB描述名称
imageimage 20. 通过调用接口使能USB上下线的接口 接口功能描述:使能USB设备在PC端取消挂载和重新挂载。
image 21. 立体声输入,需要在软件更换左右声道的方法

  1. 在对mic数据增加数据调换处理 image
void LR_change(s16 *data, int len)
{
    s16 *ddata = data;
    u32 points = len/2;
    for(int i = 0; i < points; i+=2){
        s16 tmp = ddata[i];
        ddata[i] = ddata[i+1];
        ddata[i+1] = tmp;
    }
}
  1. 在双工SDK,中对earphone端增加声道转换处理 image

  2. 1TN 音质优化 提高码率到128K

  3. RX端控制USB输出音量的调节方法 20220209 MJW

  4. 增加数据handle处理办法 在USB麦编码节点处增加数据处理,然后通过调节传进去的音量大小可以分等级,0---16384,就是无声到原来声音大小
    image

u32 user_uac_vol_ctrl = 16384;
void rx_uac_data_handle(struct audio_stream_entry *entry, struct audio_data_frame *in)
{
    int rlen = in->data_len;
    s32 tmp32;

    user_audio_digital_vol_run(in->data, in->data_len, user_uac_vol_ctrl, user_uac_vol_ctrl);
   
}

音量数据处理接口:

//单/双声道数字音量处理
// vol:0~16384(大于16384会把数据放大,有可能出现失真)
int user_audio_digital_vol_run(void *data, u32 len, u32 l_vol,u32 r_vol)
{
    s32 valuetemp;
    s16 *buf;

    buf = data;     //数据
    len >>= 1; //byte to point      //
    for (u32 i = 0; i < len; i += 2) {
        ///left channel
        valuetemp = buf[i];
        if (valuetemp < 0) {
            valuetemp = -valuetemp;
            valuetemp = (valuetemp * l_vol) >> 14 ;     //除以16384
            valuetemp = -valuetemp;
        } else {
            valuetemp = (valuetemp * l_vol) >> 14 ;
        }
        if (valuetemp < -32768) {
            valuetemp = -32768;
        } else if (valuetemp > 32767) {
            valuetemp = 32767;
        }
        buf[i] = (s16)valuetemp;
        ///right channel
        valuetemp = buf[i + 1];
        if (valuetemp < 0) {
            valuetemp = -valuetemp;
            valuetemp = (valuetemp * r_vol) >> 14 ;
            valuetemp = -valuetemp;
        } else {
            valuetemp = (valuetemp * r_vol) >> 14 ;
        }
        if (valuetemp < -32768) {
            valuetemp = -32768;
        } else if (valuetemp > 32767) {
            valuetemp = 32767;
        }
        buf[i + 1] = (s16)valuetemp;
    }
    return 0;
}

在 2T1 132 版本SDK之后,可直接加到如下位置实现功能:
image

  1. 除双工earphone端外,其他形态RX端增加auto_mute 方式 20220809 MJW
  2. 增加 宏定义 #define WIRELESS_AUTO_MUTE 1 //auto mute 功能 image
  3. 增加auto mute处理节点 image
#if WIRELESS_AUTO_MUTE
    {
        .attr = ADAPTER_STREAM_ATTR_AUTO_MUTE,
        .value = {
            .auto_mute = {
                .parm = &auto_mute_parm,
                .data_handle = NULL,//如果要关注处理前的数据可以在这里注册回调
            }
        },
    },
#endif

image

#if WIRELESS_AUTO_MUTE
/*
注!!!:由于提示音不是走的同一路解码,所以需要在提示音播放前需要判断一下是否mute住了,
   解mute之后再播放提示音,在播放完提示音后判断mute状态,再mute
 */
//用户在此修改自己功放mute脚控制
#define DAC_MUTEapp_audio_mute(AUDIO_MUTE_DEFAULT)
#define DAC_UNMUTEapp_audio_mute(AUDIO_UNMUTE_DEFAULT)
//auto_mute 事件处理,用户可以根据需求添加mute处理
void auto_mute_handler(u8 event, u8 ch)
{
    printf(">>>> ch:%d %s\n", ch, event ? ("MUTE") : ("UNMUTE"));
    flag_mute_dac = event;
    if (flag_mute_dac) {
         printf("DAC_MUTE\n");
        DAC_MUTE;
    } else {
        printf("DAC_MUTE\n");
        DAC_UNMUTE;
    }
}
static const audio_energy_detect_param auto_mute_parm = {
    .mute_energy = 5,
    .unmute_energy = 10,
    .mute_time_ms = 1000,
    .unmute_time_ms = 100,
    .count_cycle_ms = 10,
    .sample_rate = WIRELESS_DECODE_SAMPLERATE,
    .event_handler = auto_mute_handler,
#if TCFG_AUDIO_DAC_CONNECT_MODE
    .ch_total = 2,//app_audio_output_channel_get(),
#else
    .ch_total = 1,//app_audio_output_channel_get(),
#endif
    .dcc = 1,
};
#endif
  1. 如果需要USB 数据也有一个auto mute功能,可以增加数据处理接口 image
void user_usb_mute_prohandler(struct audio_stream_entry *entry,  struct audio_data_frame *in)
{
    if (flag_mute_dac) {
        memset(in->data, 0x00, in->data_len);
    }
}
  1. dongle端或者USB RXmic 动态调节 MJW

  2. 增加 数据处理data_hangdle

//单/双声道数字音量处理
// vol:0~16384(大于16384会把数据放大,有可能出现失真)
int user_audio_digital_vol_run(void *data, u32 len, u32 l_vol,u32 r_vol)
{
    s32 valuetemp;
    s16 *buf;

    buf = data;     //数据
    len >>= 1; //byte to point      //
    for (u32 i = 0; i < len; i += 2) {
        ///left channel
        valuetemp = buf[i];
        if (valuetemp < 0) {
            valuetemp = -valuetemp;
            valuetemp = (valuetemp * l_vol) >> 14 ;     //除以16384
            valuetemp = -valuetemp;
        } else {
            valuetemp = (valuetemp * l_vol) >> 14 ;
        }
        if (valuetemp < -32768) {
            valuetemp = -32768;
        } else if (valuetemp > 32767) {
            valuetemp = 32767;
        }
        buf[i] = (s16)valuetemp;
        ///right channel
        valuetemp = buf[i + 1];
        if (valuetemp < 0) {
            valuetemp = -valuetemp;
            valuetemp = (valuetemp * r_vol) >> 14 ;
            valuetemp = -valuetemp;
        } else {
            valuetemp = (valuetemp * r_vol) >> 14 ;
        }
        if (valuetemp < -32768) {
            valuetemp = -32768;
        } else if (valuetemp > 32767) {
            valuetemp = 32767;
        }
        buf[i + 1] = (s16)valuetemp;
    }
    return 0;
}


void user_usb_vol_prohandler(struct audio_stream_entry *entry,  struct audio_data_frame *in)
{
    user_audio_digital_vol_run(in->data, in->data_len, 16384, 16384);
}

image 26. 140 2T1 修改为1T1 的方式方法 MJW rx端增加如下修改
增加控制宏WIRELESS_2t1_RX_ONLY_CONN_1TX 定义
imageimageimage 27. 2T1按键配对功能的修改方式 ,通过绑定配对实现,连接成功过后不清除配对信息无法连接新设备,所以一定要增加清除配对按键。MJW 参考以下文档实现:
无线麦2T1 做按键绑定配对功能实现demo.otl
28. 强制开启数据流跑通,实现无连接时监听功能有声音 MJW 实现思路:让输入输出设备在没有连接时直接跑通,并且在断开连接之后,不关闭数据流

  1. 以wireless_mic_sdk-v1.4.1_duplex earphone端实现为例 ①确定默认earphone端的输入设备IDEV为BT,输出设备ODEV为DAC,可更快定位修改的地方
    image ②由于输出设备ODEV为DAC 不需要连接,即earphone端会默认初始化好并OPEN等待,增加IDEV的OPEN处理。此时即可实现,强行跑通数据流。
#if WIRELESS_TX_ALWAYS_RUN_STREAM
    adapter_process_event_notify(ADAPTER_EVENT_IDEV_MEDIA_OPEN, 0);
#endif

image

  1. 为避免断开连接后,默认程序关闭输入设备IDEV的数据流后,导致无声现象,增加取消关闭IDEV和处理。
#if !WIRELESS_TX_ALWAYS_RUN_STREAM
    adapter_process_event_notify(ADAPTER_EVENT_IDEV_MEDIA_CLOSE, 0);
#endif
#if !WIRELESS_TX_ALWAYS_RUN_STREAM
    adapter_process_event_notify(ADAPTER_EVENT_IDEV_MEDIA_OPEN, 0);
#endif

image 增加:开启降噪模式后,会出现无声现象,修改如下:
image 同理:可有以下实现方法的参考:
【金山文档】 wireless_mic_sdk-v1.3.1_1t1_patch1 TX端强制打开数据流实现方式
wireless_mic_sdk-v1.3.1_1t1_patch1 TX端强制打开数据流实现方式.otl
【金山文档】 wireless_mic_sdk-v1.4.4_2t1 TX端强制打开数据流实现方式
wireless_mic_sdk-v1.4.4_2t1 TX端强制打开数据流实现方式.otl
【金山文档】 wireless_mic_sdk-v1.4.1_2t1 RX端强制打开数据流实现方式
wireless_mic_sdk-v1.4.1_2t1 RX端强制打开数据流实现方式(1).otl
【金山文档】 wireless_mic_sdk-v1.4.2_duplex dongle端强制打开数据流实现方式
wireless_mic_sdk-v1.4.2_duplex dongle端强制打开数据流实现方式.otl
29. 关于 wireless_mic_sdk-v1.3.1_1t1_patch1 启用两个mic的做法 解析 MJW

  1. TX和RX都需要打开立体声输入的宏,此时实现的是linein输入,会使用到mic0和mic1两个ADC的口(PA1和PB8)做数据采集,但是mic0_bias 和 mic1_bias 是没有供电电压输出的 TX 和人RX都要打开,如果有些SDK RX端板级配置没有找到该宏需要自己添加
#define    WIRELESS_MIC_STEREO_EN            1///0

imageimage 2. TX端要修改为mic0_bias 和 mic1_bias 是有供电电压输出的 ,就是两个mic正常供电工作的修改需要修改如下: 就是保证要使用audio_adc_mic1_open、audio_adc_mic_open 接口,而不是使用audio_adc_linein_open、audio_adc_linein1_open接口
image 30. 无线麦复杂功能补丁包汇总 MJW 【金山文档】 无线麦复杂功能补丁包汇总
无线麦复杂功能补丁包汇总.otl

  1. 无线麦1t1 tx主动断开与rx的连接 调用接口:wlm_clear_pair();
    不需要开启绑定配对功能也可实现
  2. 无线麦TX 端在线调试EQ配置方式说明
  3. 使能 EQ总开关 #define TCFG_EQ_ENABLE 1///DISABLE_THIS_MOUDLE
  4. 使能 #define TCFG_PHONE_EQ_ENABLE 1///DISABLE_THIS_MOUDLE (不使能该项TX端的EQ不生效)
  5. 使能#define TCFG_EQ_ONLINE_ENABLE 1 (该项是在线调试EQ使能,在线调试完毕后使用离线文件中的EQ配置可关闭) image
  6. 使能在线调音工具 #define TCFG_EFFECT_TOOL_ENABLE 1///DISABLE
  7. 选用串口通信方式#define TCFG_COMM_TYPE TCFG_UART_COMM //通信方式选择 image
  8. 工具里面对应调试EQ的地方为 宽带上行EQ,并非是普通音频EQ image
  9. 默认 宽带上行EQ 可调节的EQ点为3个,可修改一下代码将器修改为10个,看实际开发需要 image
  10. 无线麦TX 端单端输入更换mic组口修改说明 ①697系列修改 ,697只有两组mic口,分别对应 PA1 和 PB8
    默认是PA1 口,代码对应如下:
    image 需要修改为PB8组口,代码修改如下(更换对应mic口的open接口):
    image
    audio_adc_mic1_open(&hdl->mic_ch, AUDIO_ADC_MIC_CH, &adc_hdl);
    audio_adc_mic1_set_gain(&hdl->mic_ch, gain);
  1. 701系列修改 ,701有四组mic口,701n的4路ladc分别对应PA1 PA3 PG8 PG6 PA1 对应:
    audio_adc_mic_open
    audio_adc_mic_set_gain
    PA3 对应:
    audio_adc_mic1_open
    audio_adc_mic1_set_gain
    PG8 对应:
    audio_adc_mic2_open
    audio_adc_mic2_set_gain
    PG6 对应:
    audio_adc_mic3_open
    audio_adc_mic3_set_gain
    默认是PA1 口,代码对应如下:
    image 需要修改为PG8组口,代码修改如下(更换对应mic口的open接口):
    image
    audio_adc_mic2_open(&hdl->mic_ch, AUDIO_ADC_MIC_CH, &adc_hdl);
    audio_adc_mic2_set_gain(&hdl->mic_ch, gain);
  1. 无线麦测试进入DUT模式的配置说明
  • 打开DUT测试使能 image
  • 修改并调用DUT进入接口,如下截图所示: imageimage
  1. TX端实现mic to dac,不连接,中途可穿插降噪混响等音效节点。 【金山文档】 wireless_mic_sdk-v1.4.4_2t1_实现TX端mictodac_增加降噪节点demo
    https://kdocs.cn/l/ccUm6n6An6yU
  2. 实现两发一收的绑定配对跟一发一收一样,TX端要绑定,RX端任意连接。 解决办法:将RX的绑定配对的宏打开
    image 2、并将如下两处强制修改为0,实测能实现功能
    image 补充说明:按照上述修改,会引发一个问题,当第一个TX连接上一个RX后,再用第二个TX去连接相同的RX,这时候,第一个TX将会连接不上任何RX
    处理办法:代码上面取消匹配已经连接上的设备的连接信息
    image
  3. wireless_mic_sdk-v1.4.2_2t1 tx端使能pa延长距离后做动态开关切换问题 修改办法:在没有映射,默认使用PC2/PC3作为pa引脚的情况下,在外面直接调用下面接口,修改最后一位参数即可。(0是关闭pa,1是开启pa)
    SFR(JL_WL->CON0,3,1,0);
    SFR(JL_WL->CON0,4,1,0);
  4. wireless_mic_sdk-v1.4.2_2t1 br28 tx端动态设置发射功率等级问题 解决办法:补丁包如下
    wireless_mic_sdk-v1.4.2_2t1_br28_tx动态切换发射功率等级_20230821.rar
    wireless_mic_sdk-v1.4.3_2t1_br30_tx动态切换发射功率等级_20231121.rar
  5. wireless_mic_sdk-v1.4.2_duplex_patch1动态设置发射功率等级问题 解决办法:补丁包如下
    wireless_mic_sdk-v1.4.2_duplex_patch1_br30动态切换发射功率等级_20240815.rar
    wireless_mic_sdk-v1.4.2_duplex_patch1_br28动态切换发射功率等级_20240815.rar
  6. wireless_mic_sdk-v1.4.4_2t1 tx端硬件不做下拉电阻区分左右声道,并能区分识别左右TX发送过来的命令demo wireless_mic_sdk-v1.4.4_2t1 tx端硬件不做下拉电阻区分左右声道,并能区分识别左右TX发送过来的命令demo.otl
  7. 领夹麦 RX 端 带电池方案,插入拔出没有事件检测处理办法 带电池方案,插入和拔出没有插入和拔出事件检测到。需要增加代码如下:
    imageimage 就会有以下的插入拔出事件了
    image
  8. 无线麦系列开pa的方式,并提供IO口映射的接口 imageimage
  9. 无线麦系列做USB麦 需要将录音的数据修改为24bit 的,可参考以下修改 PS: 该方式ADC 输入仍旧是16bit 的数据来源,但是USB_mic是在上传数据时候,多做了16bit->24bit的数据转换
    修改办法:
    image

第二章

1.1 无线麦硬件设计指南
无线MIC硬件设计指南.pdf
1.2 无线麦硬件培训

声音大小调节说明:
本文档为保密信息,未经授权,请勿转发或告知第三方。非常感谢!
This electronic documentation and any attachments are confidential and may be legally privileged or otherwise protected from disclosure. If you are not the intended recipient, please do not disclose the contents to anyone。
Thank you for your cooperation!
解析权归杰理所有!
The analysis right belongs to JieLi Technology Co., Ltd.

本文档包含以下子页面

  • duplex sdk 中 双向数据收发说明
  • 无线麦SDK用户自定义数据收发接口说明文档
  • 140_duplex_SDK_earphone动态调节音量
  • 无线麦2T1 做按键绑定配对功能实现demo
  • wireless_mic_sdk-v1.3.1_1t1_patch1 TX端强制打开数据流实现方式
  • wireless_mic_sdk-v1.4.4_2t1 TX端强制打开数据流实现方式
  • wireless_mic_sdk-v1.4.1_2t1 RX端强制打开数据流实现方式(1)
  • wireless_mic_sdk-v1.4.2_duplex dongle端强制打开数据流实现方式
  • wireless_mic_sdk-v1.4.4_2t1 tx端硬件不做下拉电阻区分左右声道,并能区分识别左右TX发送过来的命令demo
  • 无线MIC硬件设计指南
Prev
无线麦硬件资料汇总
Next
无线麦复杂功能补丁包汇总