CI1302_FIX

CI1302 平台新增逻辑修复说明

本次新增修改主要涉及:

  • app_audio_handle\cias_audio_data_handle.c

  • 新增/优化 VAD 控制状态管理

  • 优化播放结束后的状态清理逻辑


一、修改文件

app_audio_handle\cias_audio_data_handle.c


二、修改一:GFW_SUB_CMD_VOICE_CFG 逻辑优化

修改位置

case GFW_SUB_CMD_VOICE_CFG:

修改后代码

case GFW_SUB_CMD_VOICE_CFG:
{
    uint8_t type = data[1];
    uint8_t ctrl = data[2];
    mprintf("\r\nVOICE_CFG: type=%u, ctrl=%u\r\n", type, ctrl);

    switch (type)
    {
    case 1:
        if (ctrl) {
            ciss_set(CI_SS_VOX_VAD_CLEAR, 1);
            ciss_set(CI_SS_NN_DENOISE_WORK_STATE, 1);
            cias_aiot_param_refresh();
            update_awake_time();

            gCiasAiotRunParam.is_vad_force_on_flag = false;
            gCiasAiotRunParam.is_wake_up_flag = true;
            gCiasAiotRunParam.is_vad_on_flag = true;

            gCiasAiotRunParam.cloud_parse_is_busy_flag = false;
            gCiasAiotRunParam.cloud_ans_time_out_flag = false;
            gCiasAiotRunParam.request_play_data_flag = false;
            gCiasAiotRunParam.play_cloud_data_flag = false;
            gCiasAiotRunParam.rcv_cloud_play_data_flag = false;
            gCiasAiotRunParam.cloud_play_data_total_len = 0;
        } else {
            ciss_set(CI_SS_VOX_WORK_STATE, 0);
            ciss_set(CI_SS_VOX_VAD_STATE, CI_SS_VAD_IDLE);

            gCiasAiotRunParam.is_vad_on_flag = false;
            gCiasAiotRunParam.is_wake_up_flag = false;
            gCiasAiotRunParam.stop_collect_pcm_flag = true;
            gCiasAiotRunParam.compress_pcm_to_wifi_flag = false;
            gCiasAiotRunParam.upload_pcm_to_wifi_flag = false;
        }
        break;

修改说明

ctrl = 1(开启语音)

  • 清除 VAD 状态

  • 打开降噪模块

  • 刷新 AI 参数

  • 更新时间戳

  • 重置云端播放/解析相关标志

  • 重新进入 VAD 工作状态

目的:

  • 确保每次语音启动时状态干净

  • 避免遗留标志导致异常流程

ctrl = 0(关闭语音)

  • 关闭 VOX 工作状态

  • VAD 状态设置为 IDLE

  • 停止 PCM 采集

  • 关闭压缩与上传

目的:

  • 强制停止语音流程

  • 防止残留上传行为


三、修改二:GFW_SUB_CMD_SPK_PLAY 播放结束逻辑优化

修改位置

修改后代码(spk_type == 2 分支)

修改说明

优化点如下(步骤化展示):

1

清除 request_play_data_flag(当未开启 VAD 时)

若当前未开启 VAD,则将 request_play_data_flag 置为 false,避免在播放结束时继续请求播放数据。

2

设置 play_cloud_end_flag 标志

标记云端播放已结束,供其他流程查询与同步使用。

3

重置播放缓冲区

调用 xStreamBufferReset 清空 pcm_play_data_stream_buffer,防止遗留音频数据影响后续播放或收音。

4

强制播放状态恢复为 IDLE

若当前播放状态仍为 PLAYING,则调用 set_audio_play_state 停止播放并将 CI_SS_PLAY_STATE 设置为 IDLE,确保播放状态机回到稳定初始态。

目的:

  • 避免播放结束后状态残留

  • 防止播放流未清空导致异常

  • 确保播放状态机回到稳定初始态

  • 确保 VAD 不会误判未播放完成而过滤掉收音


四、整体优化效果

修改点
优化效果

VOICE_CFG 状态重置

避免脏状态进入语音流程

强制关闭上传链路

防止异常上传

播放结束重置状态

修复播放残留问题

StreamBuffer Reset

防止旧数据干扰

最终效果:

  • VAD 状态管理更稳定

  • 播放流程更可控

  • 语音与播放状态完全解耦

  • 减少异常状态残留问题


文档生成时间:自动生成