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

AC706N-le_audio-200SDK有线_无线麦录音demo

📎 原始文档:https://www.kdocs.cn/l/ca4cWEEsOC9L AC706N-le_audio-200SDK有线/无线麦录音demo

一、添加补丁程序:

【金山文档 | WPS云文档】 241104_706N_LE_AUDIO_200sdk_解决 package node 节点释放导致写异常的问题_media
https://kdocs.cn/l/cfwc1ivUZQbz
【金山文档 | WPS云文档】 le_audio_AC706N_2.0.0_patch_04_录音数据流修改补丁
https://kdocs.cn/l/cbdmZTiOqLR5
image

二、数据流修改:

1、目前资源限制,开启有线无线录音功能后,ram资源效果较多,demo修改限制为单无线麦连接
image 2、demo 有线无线单声道 :
imageimage 有线无线立体声 :
imageimageimage

三、程序修改:

app_main.c
image app_config.h
image

#define USER_EX_RECORD_MODE_EN               1//有线无线麦外部录音功能使能

record.c
image

struct app_recode_handle {
    struct file_recorder *recorder;
    FILE *file;
    char logo[20];
};

image

extern int get_rec_stream_state();
extern int ex_record_stream_open();
extern void ex_record_stream_close(void);

#define USER_RECORD_BACK_MUSIC          1//录音结束后返回音乐模式

static bool rec_back_music_flag = 0;
bool get_rec_back_music_flag(void){
    y_printf("get_rec_back_music_flag:%d\n",rec_back_music_flag);
    return rec_back_music_flag;
}
void set_rec_back_music_flag(bool flag){
    rec_back_music_flag = flag;
}

void record_end_back_to_music(void) {
    set_rec_back_music_flag(1);
    app_send_message(APP_MSG_REC_BACK_TO_MUSIC, 0);
    // sys_timeout_add(NULL, back_to_music_mode, 300);
}



static u8 record_mutex_create_flag = 0;
static u8 record_stream_dev_type = 0;
//rec_dev_type  0:rec_close,1:le_audio_mic,2:wire_mic_effect

void ex_record_mutex_init(void)
{
    if(record_mutex_create_flag == 1) {
        r_printf("record_mutex had creat...\n");
        return;
    }
    os_mutex_create(&record_mutex);
    record_mutex_create_flag = 1;
}

u8 u_get_stream_dev_type(){
    y_printf("get-rec_dev_type:%d\n",record_stream_dev_type);
    return record_stream_dev_type;
}

void u_set_stream_dev_type(u8 type){
    y_printf("set-rec_dev_type:%x\n",type);
    record_stream_dev_type = type;
}

image

    if (record_mutex_create_flag != 1) {
        y_printf("record_mutex creat\n");
        os_mutex_create(&record_mutex);
        record_mutex_create_flag = 1;
    }

imageimage

        extern int get_rec_stream_state();
        extern int ex_record_stream_open();
        extern void ex_record_stream_close(void);
        if(get_rec_stream_state()) {
            ex_record_stream_close();
        } else {
            ex_record_stream_open();
        }

image


static int rec_stream_open_flag = 0;
extern int file_recorder_close_without_Stream(struct file_recorder *recorder, bool close_file);

static struct jlstream *stream_temp = NULL;
struct jlstream *u_get_record_stream_temp(){
    y_printf("get-stream_temp:%x\n",stream_temp);
    return stream_temp;
}

void u_set_record_stream_temp(struct jlstream *stream){
    y_printf("set-stream:%x\n",stream);
    stream_temp = stream;
}

#if 0
void ex_record_stream_init(struct jlstream *stream)
{
    y_printf(">>>> Enter Func: ex_record_stream_init!!\n");
    extern void ex_record_mutex_init(void);
    ex_record_mutex_init();
    if(g_rec_hdl.recorder == NULL) {
        r_printf("g_rec_hdl.recorder is NULL!\n");
        struct file_recorder *recorder;
        recorder = zalloc(sizeof(*recorder));
        if (!recorder) {
            /* jlstream_release(stream); */
            r_printf("--> err:%s, %d!\n", __func__, __LINE__);
            return;
        }
        g_rec_hdl.recorder = recorder;
    }
    
    if(stream != NULL) {
        y_printf("init stream:%x\n",stream);
        stream_temp = stream;
        g_rec_hdl.recorder->stream = stream_temp;
        y_printf("---> get new stream\n");
    } else if(stream == NULL && stream_temp!=NULL) {
        g_rec_hdl.recorder->stream = stream_temp;
        y_printf("--->rec_init use stream_temp\n");
    }else if(stream == NULL && stream_temp == NULL) {
        r_printf("err stream=NULL,stream_temp=NULL\n");
        g_rec_hdl.recorder = NULL;
        return;
    }
}
#else
void ex_record_stream_init(struct jlstream *stream)
{
    y_printf(">>>> Enter Func: ex_record_stream_init!!\n");
    if(stream != NULL) {
        y_printf("init stream:%x\n",stream);
        stream_temp = stream;
        y_printf("---> get new stream\n");
    } else if(stream == NULL && stream_temp!=NULL) {
        y_printf("--->rec_init use stream_temp\n");
    }else if(stream == NULL && stream_temp == NULL) {
        r_printf("err stream=NULL,stream_temp=NULL\n");
        return;
    }
}
#endif

int ex_record_stream_open()
{
    if (!dev_manager_get_total(0)) {
        r_printf("--> err:%s, %d!\n", __func__, __LINE__);
        return -1;
    }

    if ((get_cur_le_audio_player_cnt()==0) && (mic_effect_player_runing()==0)) {
        r_printf("ex_record_stream_open err!!!  no record_mic online\n");
        return -1;
    }

    if(rec_stream_open_flag == 0) {
        if(g_rec_hdl.recorder == NULL) {
            r_printf("g_rec_hdl.recorder is NULL!\n");
            struct file_recorder *recorder;
            recorder = zalloc(sizeof(*recorder));
            if (!recorder) {
                /* jlstream_release(stream); */
                r_printf("--> err:%s, %d!\n", __func__, __LINE__);
                return -1;
            }
            g_rec_hdl.recorder = recorder;
        }

        if(stream_temp != NULL) {
            y_printf("open stream:%x\n",stream_temp);
            g_rec_hdl.recorder->stream = stream_temp;
            y_printf("--->rec_open use stream_temp\n");
        } else {
            r_printf("--> err:%s, %d!\n", __func__, __LINE__);
            g_rec_hdl.recorder = NULL;
            return -1;
        }

        struct stream_enc_fmt fmt;
        g_printf("0000 open stream:%x\n",g_rec_hdl.recorder->stream);
        int err = file_recorder_get_fmt(g_rec_hdl.recorder, &fmt);
        if (err) {
            file_recorder_close(g_rec_hdl.recorder, 0);
            r_printf("--> err:%s, %d!\n", __func__, __LINE__);
            return -1;
        }
        printf("recorder_fmt: ch %d, sample rate %d\n", fmt.channel, fmt.sample_rate);

        const char *suffix;
        switch (fmt.coding_type) {
            case AUDIO_CODING_PCM:
            case AUDIO_CODING_WAV:
                suffix = "wav";
                break;
            case AUDIO_CODING_MP3:
                suffix = "mp3";
                break;
            default:
                suffix = "bin";
                break;
        }
        char folder[] = {TCFG_REC_FOLDER_NAME};         //录音文件夹名称
        char filename[] = {TCFG_REC_FILE_NAME};     //录音文件名,不需要加后缀
#if (TCFG_NOR_REC)
        char logo[] = {"rec_nor"};        //外挂flash录音
#elif (FLASH_INSIDE_REC_ENABLE)
        char logo[] = {"rec_sdfile"};        //内置flash录音
#else
        char *logo = dev_manager_get_phy_logo(dev_manager_find_active(0));//普通设备录音,获取最后活动设备
#endif
        char *root_path = dev_manager_get_root_path_by_logo(logo);
        char path[64] = {};
        snprintf(path, sizeof(path), "%s%s/%s.%s", root_path, folder, filename, suffix);
        g_rec_hdl.recorder->file = fopen(path, "w+");
        extern const struct stream_file_ops recorder_fops;
        jlstream_set_enc_file(g_rec_hdl.recorder->stream, g_rec_hdl.recorder, &recorder_fops);

        snprintf(g_rec_hdl.logo, sizeof(g_rec_hdl.logo), "%s", logo);
        g_rec_hdl.file      = g_rec_hdl.recorder->file;

        //记录播放录音需要的信息
        memcpy(g_rec_play_hdl.path, path, sizeof(path));
        memcpy(g_rec_play_hdl.suffix, suffix, strlen(suffix));
        y_printf("ex_record_stream_open_suscess!!\n");
        rec_stream_open_flag = 1;
    }
    return 0;
}


void ex_record_stream_close(void)
{
    if(rec_stream_open_flag == 1) {
        rec_stream_open_flag = 0;
        y_printf(">> Func: ex_record_stream_close!\n");
        os_mutex_pend(&record_mutex, 0);
        //只关文件不关数据流
        file_recorder_close_without_Stream(g_rec_hdl.recorder, 1);
        g_rec_hdl.recorder = NULL;
        os_mutex_post(&record_mutex);
    }
}

//获取录音数据流状态
int get_rec_stream_state()
{
    // y_printf("rec_stream:%d\n",rec_stream_open_flag);
    return rec_stream_open_flag;    
}

jlstream_event_handler.c
image

#if TCFG_APP_RECORD_EN && TCFG_KBOX_1T3_MODE_EN && USER_EX_RECORD_MODE_EN
extern int get_rec_stream_state();
static int wirless_rec_switch_get_status()
{
    int state = get_rec_stream_state();
    extern int get_cur_le_audio_player_cnt();
    if(get_cur_le_audio_player_cnt() == 0) {
        // putchar('6');
        state = 0;    
    }
    if(state == 0) {
        // putchar('0');
    }
    // else {
    //     putchar('1');
    // }
    return state;
}

static int mic_effect_rec_switch_get_status()
{
    int state = get_rec_stream_state();
    extern bool mic_effect_player_runing();
    if(mic_effect_player_runing() == 0) {
        // putchar('7');
        state = 0;    
    }
    if(state == 0) {
        // putchar('2');
    }
    // else {
    //     putchar('3');
    // }
    return state;
}
#endif






#if TCFG_APP_RECORD_EN && TCFG_MIC_EFFECT_ENABLE && USER_EX_RECORD_MODE_EN
    if(!strcmp(arg, "Sw_micEffRec")) {
        return (int)mic_effect_rec_switch_get_status;    
    }
#endif

#if TCFG_APP_RECORD_EN && TCFG_KBOX_1T3_MODE_EN && USER_EX_RECORD_MODE_EN
    if(!strcmp(arg, "Sw_wirlessRec")) {
        return (int)wirless_rec_switch_get_status;    
    }
#endif

mic_effect.c

#if TCFG_APP_RECORD_EN && USER_EX_RECORD_MODE_EN
#include "file_recorder.h"
extern int get_rec_stream_state();
extern int ex_record_stream_open();
extern void ex_record_stream_close(void);
extern void ex_record_stream_init(struct jlstream *stream);
extern void u_set_stream_dev_type(u8 type);
#endif

image

#if TCFG_APP_RECORD_EN && USER_EX_RECORD_MODE_EN
    if(get_rec_stream_state()) {
        r_printf(">>> mic_effect_player_open, close rec!!\n");
        ex_record_stream_close();
    }
    ex_record_stream_init(player->stream);
    u_set_stream_dev_type(2);
#endif

image

#if TCFG_APP_RECORD_EN && USER_EX_RECORD_MODE_EN
    if(get_rec_stream_state()) {
        r_printf(">>> mic_effect_player_close, close rec!!\n");
        ex_record_stream_close();
        u_set_stream_dev_type(0);
    }
#endif

le_audio_player.c
image

#if TCFG_APP_RECORD_EN && USER_EX_RECORD_MODE_EN
#include "file_recorder.h"
extern int get_rec_stream_state();
extern int ex_record_stream_open();
extern void ex_record_stream_close(void);
extern void ex_record_stream_init(struct jlstream *stream);
extern void u_set_stream_dev_type(u8 type);
extern u8 u_get_stream_dev_type();
#endif

//获取连接le_audio的个数
int get_cur_le_audio_player_cnt()
{
    int le_audio_cnt = 0;
    for (int i = 0; i < 2; i++) {
        if (g_le_audio_player_file[i].inused) {
            le_audio_cnt++;
        }
    }
    // g_printf(">> le_audio_cnt: %d\n", le_audio_cnt);
    return le_audio_cnt;
}

image

#if TCFG_APP_RECORD_EN && TCFG_KBOX_1T3_MODE_EN && USER_EX_RECORD_MODE_EN
                if (g_le_audio_player_file[i].stream == u_get_record_stream_temp()) {
                    r_f_printf("cur_close_stream == cur_record_stream !!!\n")
                    if (g_le_audio_player_file[(i+1)%2].inused) {
                        y_printf("V0001 set_le_audio_num:%d\n",g_le_audio_player_file[(i+1)%2].le_audio_num);
                        y_printf("V0001 set_stream:%x\n",g_le_audio_player_file[(i+1)%2].stream);
                        u_set_record_stream_temp(g_le_audio_player_file[(i+1)%2].stream);
                    } else {
                        y_printf("V0002 nomore le_audio\n");
                        u_set_record_stream_temp(NULL);
                    }
                }
#endif

image

#if TCFG_APP_RECORD_EN && USER_EX_RECORD_MODE_EN
    y_printf("le_audio_player_create, stream:%x\n", player->stream);
    if(get_rec_stream_state()) {
        r_printf("le_audio_player_create, close rec!!\n");
        if (u_get_stream_dev_type() != 1) {
            ex_record_stream_close();
        } else {
            r_printf("le_audio_player_create, le_audio:recording!!!  do not close record\n");
        }
    }
    u_set_stream_dev_type(1);
    ex_record_stream_init(player->stream);
#endif
    r_printf("le_audio_open_now\n");

image

#if TCFG_APP_RECORD_EN && USER_EX_RECORD_MODE_EN
    int le_audio_mic_num = get_cur_le_audio_player_cnt();
    if(get_rec_stream_state()) {
        if (le_audio_mic_num != 2) {
            r_printf("le_audio_mic_num!=2, close_le_audio_record\n");
            ex_record_stream_close();
            u_set_stream_dev_type(0);
        } else {
            r_printf("le_audio_mic_num==2, do not close_le_audio_record\n");
        }
    }
#endif

file_recorder.c
imageimage

#if TCFG_APP_RECORD_EN && USER_EX_RECORD_MODE_EN
//只关文件编码不关数据流
int file_recorder_close_without_Stream(struct file_recorder *recorder, bool close_file)
{
    int err = 0;

    if (!recorder) {
        return -EINVAL;
    }
    //不关流
    /* jlstream_stop(recorder->stream, 50); */
    /* jlstream_release(recorder->stream); */

    if (close_file) {
        err = recorder_fclose(recorder);
    }

    free(recorder);
    jlstream_event_notify(STREAM_EVENT_CLOSE_RECODER, (int)"recorder");
    return err;
}
#endif

本文档包含以下子页面

Prev
le_audio_1.0.0_patch05 以及之前的版本IRkey 功能异常修改
Next
jl701n_le_audio_v200patch02 IO串口升级修改串口单次发送字节长度的修改办法