查看: 1105|回复: 1

ASRPRO -4M 出现使用一会后,无法识别的语言的问题

[复制链接]

1

主题

2

帖子

21

积分

注册会员

Rank: 2

积分
21
发表于 2025-9-16 13:25:12 | 显示全部楼层 |阅读模式
  1. #define SEND_BUF_LEN 5

  2. #include "asr.h"
  3. extern "C"{ void * __dso_handle = 0 ;}
  4. #include "setup.h"
  5. #include "myLib/asr_event.h"
  6. #include "HardwareSerial.h"

  7. uint8_t mylist[SEND_BUF_LEN];
  8. uint32_t snid;
  9. void ASR_CODE();
  10. void UART_RX();

  11. //{speak:小蝶-清新女声,vol:10,speed:10,platform:haohaodada}
  12. //{playid:10001,voice:开机替换}
  13. //{playid:10002,voice:}

  14. /*描述该功能...
  15. */
  16. void ASR_CODE() {
  17.   //本函数是语音识别成功钩子程序
  18.   //运行时间越短越好,复杂控制启动新线程运行
  19.   //唤醒时间设置必须在ASR_CODE中才有效
  20.   uint16_t vid = ((snid)&0xFFFF);
  21.   mylist[0] = 0xFA;
  22.   mylist[1] = vid;
  23.   mylist[2] = (vid >> 8);
  24.   mylist[3] = mylist[1] + mylist[2];
  25.   mylist[4] = 0xAF;
  26.   for (int i = (0); i < SEND_BUF_LEN; i = i + 1) {
  27.     Serial1.write(mylist[i]);
  28.   }
  29.   Serial.print(vid, 10);
  30. }

  31. void UART_RX_Task() {
  32.   while (1) {
  33.     if(Serial1.available() > 0) {
  34.       String rxdata = Serial1.readString();
  35.       //Serial.print(rxdata);
  36.       int val;
  37.       if (sscanf(rxdata.c_str(), "voice %d", &val) == 1) {
  38.         play_audio(val);
  39.       } else if (sscanf(rxdata.c_str(), "start %d", &val) == 1) {
  40.         play_audio(205);
  41.         play_num(val*100, 1);
  42.         play_audio(131);
  43.       }
  44.       else if (sscanf(rxdata.c_str(), "temp %d", &val) == 1) {
  45.         play_audio(130);
  46.         play_num(val*100, 1);
  47.         play_audio(131);
  48.       }
  49.     }
  50.     delay(2);
  51.   }
  52.   vTaskDelete(NULL);
  53. }

  54. void hardware_init(){
  55.   //需要操作系统启动后初始化的内容
  56.   //音量范围1-7
  57.   vol_set(5);
  58.   setPinFun(2,FORTH_FUNCTION);
  59.   setPinFun(3,FORTH_FUNCTION);
  60.   Serial1.begin(38400);
  61.   setPinFun(13,SECOND_FUNCTION);
  62.   setPinFun(14,SECOND_FUNCTION);
  63.   Serial.begin(115200);
  64.   Serial.setTimeout(10);
  65.   Serial.setTimeout(10);
  66.   xTaskCreate(UART_RX_Task,"UART_RX_Task",128,NULL,4,NULL);
  67.   vTaskDelete(NULL);
  68. }

  69. void setup()
  70. {
  71.   //需要操作系统启动前初始化的内容
  72.   //播报音下拉菜单可以选择,合成音量是指TTS生成文件的音量
  73.   //欢迎词指开机提示音,可以为空
  74.   //退出语音是指休眠时提示音,可以为空
  75.   //休眠后用唤醒词唤醒后才能执行命令,唤醒词最多5个。回复语可以空。ID范围为0-9999
  76.   set_wakeup_forever();
  77.   //{ID:0,keyword:"命令词",ASR:"小浴小浴",ASRTO:""}
  78. //.... 其他语言省略
  79.   //{playid:10084,voice:零}
  80.   //{playid:10085,voice:一}
  81.   //{playid:10086,voice:二}
  82.   //{playid:10087,voice:三}
  83.   //{playid:10088,voice:四}
  84.   //{playid:10089,voice:五}
  85.   //{playid:10090,voice:六}
  86.   //{playid:10091,voice:七}
  87.   //{playid:10092,voice:八}
  88.   //{playid:10093,voice:九}
  89.   //{playid:10094,voice:十}
  90.   //{playid:10095,voice:百}
  91.   //{playid:10096,voice:千}
  92.   //{playid:10097,voice:万}
  93.   //{playid:10098,voice:亿}
  94.   //{playid:10099,voice:负}
  95.   //{playid:10100,voice:点}
  96. }

复制代码
代码如上,大概流程是语言识别后通过串口发送命令到MCU,MCU收到后再发送应答的播报语言,在测试过程中经常出现说到某个识别词后(随机出现),再无无法识别的情况,但是还能播报;
回复

使用道具 举报

1

主题

2

帖子

21

积分

注册会员

Rank: 2

积分
21
 楼主| 发表于 2025-9-22 18:35:03 | 显示全部楼层
线程堆栈问题,改大就好
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|手机版|小黑屋|好好搭搭在线 ( © 好好搭搭在线 浙ICP备19030393号 )

GMT+8, 2026-8-9 18:38 , Processed in 0.091818 second(s), 23 queries .

Powered by Discuz!

© 2001-2026 Comsenz Inc.

快速回复 返回顶部 返回列表