音频
C202 的 sdk中,关于1302音频的处理,头文件里有audio_player_stop_and_wait、audio_player_stop_speak和audio_player_raw_write_finish 这三个有什么区别?
- audio_player_raw_write_finish 这个是音频下发结束,数据流结束通知 (流式TTS结束)
- audio_player_stop_speak 快速响应异步停止请求(类似按键暂停)
- audio_player_stop_and_wait 强制停止并阻塞等待完成(唤醒打断)
在C202 的使用过程中,会出现这个报错,“ci13002_protocol:Deal recv frame too slow”,这个报错是什么原因?
当 xQueueSend 在 10ms 超时时间内无法将接收到的帧数据放入队列时,就会触发这个错误
表示 uart_buffer_queue 队列已满,通常有以下几种情况:
1、消费速度过慢: 在 ci1302.c 的 ci1302_deal_task() 函数中,从队列取数据并处理的速度跟不上串口接收速度
2、队列容量不足: 虽然代码中没有显示队列创建部分,但如果队列深度设置过小,在数据高峰期容易满
3、处理任务阻塞: 消费任务可能在某些操作上阻塞了(如文件操作、网络请求等),导致无法及时从队列取数据
4、串口数据突发: CI1302 芯片短时间内发送大量数据(如音频流、唤醒事件等),超过处理能力
如何将 AMR 格式的录音数据先缓存到 PSRAM,再根据实际情况写入到 SPI Flash?
可以使用 heap_caps_malloc(size, MALLOC_CAP_SPIRAM) 分配一块 PSRAM 缓冲区,先将 AMR 录音数据写入该缓冲区。
当录音结束,或者达到需要写入 Flash 的条件时,再将缓冲区中的数据一次性或分段写入 SPIFFS/Flash。这种方式可以有效减少频繁写 Flash 的次数,并优化录音存储流程。
C302 修改唤醒词后,上电播报“我是小明”如何取消?是否支持自定义唤醒词和声学模型升级?
如果需要取消上电播报,可参考 chat_notify_list.c。该文件中包含多个本地自带的音频标识,找到“你好小明”对应的那一句后,继续检查它对应的标识头在什么位置被调用,将相关调用屏蔽即可。
其中,chat_notify_audio_play() 是实际执行播放的函数。
关于唤醒词和模型部分,目前不能开放声学模型在线升级:
- 只能使用与当前方案对应的模型,模型部分无法通过 OTA 升级。
- 如果需要升级模型,只能通过串口自行升级。
- 如果采用串口升级方式,SDK 中也需要同步将
ota1302相关功能屏蔽掉。