大大通开发板评测专区
直播中

vince

7年用户 10经验值
擅长:可编程逻辑 电源/新能源 嵌入式技术 模拟技术 存储技术 处理器/DSP 控制/MCU
私信 关注

【大联大品佳 Nuvoton ISD9160语音识别试用体验】基于 ISD9160的语音控制灯具场景模式

` 本帖最后由 hivince 于 2020-10-19 10:42 编辑

      试用ISD9160有一段时间了,由于工作也比较忙,所以断断续续的进行。
先说下试用感受,ISD9160相比市面见得多的LD3320A来说,多了语音反馈功能,这样交互性会更好些。
      对于语音识别效果来说,这两款感觉差别不大。LD3320A的资料容易找些,编程自由度大些,因为是非特定语音识别,可以使用拼音方式进行编程识别。ISD9160需要原厂的支持,进行定制语音识别,虽然麻烦些,但是可以进行误别训练,应该是可以训练得更加提高识别精度。

     下面说说我试用的项目,使用ISD9160进行语音交互,用于设置灯光的不同场景模式,语音识别使用ISD9160,灯光场景控制使用其它的单片机,使用串口对接,ISD9160识别到语音场景控制后,通过串口发送场景命令,然后单片机进行灯光控制。这里主要介绍语音识别部分,要不然给跑题啦!
     先介绍下识别部分的源代码程序:  
  1.   while (1)      
  2.     {
  3.         
  4.         if ((i32ID = DoVR_sep((uint32_t)pchm_lppbyModel[0], (uint32_t)pchm_lppbyModel[1], 0, 1000, 0, NULL)) < 0)    //timeout时间600*10ms=6s
  5.         {
  6.             break;  
  7.         }
  8.         else if(i32ID > 0 && VR_ENABLE==1)
  9.         {
  10.             if((1 == i32ID)||(2 == i32ID)||(3 == i32ID)||(4 == i32ID))  //wakeup 唤醒  小光/阿光/好光时代
  11.             {
  12.                 g_vrstate = 1;
  13.                 uartsend = 0;
  14.                                                                 timeout_quiet=0;
  15.                 DrvGPIO_ClrBit(GPA,7);                                                                                                                                                                 //点亮唤醒指示灯
  16.                                                                 //LedTurnOn();                                                                                                                                                                                                    //上电默认开灯
  17.                 DrvUART_Write(UART_PORT0,(uint8_t *)VR_Command1,CMD_LENGTH);    //UART0 Send
  18.                 PlayAdpcm((uint32_t)lppbyPrompt[0], TRUE);                                                                                        //Play Voice +getRamdonNumber(3)
  19.             }
  20.             else if(g_vrstate)  //other
  21.             {
  22.                 //LedVRCmd(i32ID);
  23.                                                                 timeout_quiet=1;
  24.                                                                 switch(i32ID)   //功能指令
  25.                                                                 {
  26.                                                                         case 5:  //睡眠模式
  27.                                                                                 DrvGPIO_ClrBit(GPB,1);                                                               
  28.                                                                           SysTimerDelay(50);
  29.                                                                           DrvGPIO_SetBit(GPB,1);
  30.                                                                                 DrvUART_Write(UART_PORT0,(uint8_t *)VR_Command2,CMD_LENGTH);    //UART0 Send
  31. //                                                                                PlayAdpcm((uint32_t)lppbyPrompt[3], TRUE);                                                                                        //Play Voice
  32.                                                                                 break;
  33.                                                                         case 6:  //睡觉
  34.                                                                                 DrvGPIO_ClrBit(GPB,1);                                                               
  35.                                                                           SysTimerDelay(50);
  36.                                                                           DrvGPIO_SetBit(GPB,1);
  37.                                                                                 DrvUART_Write(UART_PORT0,(uint8_t *)VR_Command3,CMD_LENGTH);    //UART0 Send
  38.                                                                                 PlayAdpcm((uint32_t)lppbyPrompt[1], TRUE);                                                                                        //Play Voice
  39.                                                                                 break;                                                                        
  40.                                                                         case 7:  //起床模式
  41.                                                                                 DrvGPIO_ClrBit(GPB,2);                                                               
  42.                                                                           SysTimerDelay(50);
  43.                                                                           DrvGPIO_SetBit(GPB,2);
  44.                                                                                 DrvUART_Write(UART_PORT0,(uint8_t *)VR_Command4,CMD_LENGTH);    //UART0 Send
  45.                                                                                 PlayAdpcm((uint32_t)lppbyPrompt[2], TRUE);                                                                                        //Play Voice
  46.                                                                                 break;                                                                        
  47.                                                                         case 8:  //起床
  48.                                                                                 DrvGPIO_ClrBit(GPB,2);                                                               
  49.                                                                           SysTimerDelay(50);
  50.                                                                           DrvGPIO_SetBit(GPB,2);                                                                                
  51.                                                                                 DrvUART_Write(UART_PORT0,(uint8_t *)VR_Command5,CMD_LENGTH);    //UART0 Send
  52.                                                                                 PlayAdpcm((uint32_t)lppbyPrompt[3], TRUE);                                                                                        //Play Voice
  53.                                                                                 break;
  54.                                                                         case 9:  //阅读模式
  55.                                                                                 DrvGPIO_ClrBit(GPB,3);                                                               
  56.                                                                           SysTimerDelay(50);
  57.                                                                           DrvGPIO_SetBit(GPB,3);                                                                                
  58.                                                                                 DrvUART_Write(UART_PORT0,(uint8_t *)VR_Command6,CMD_LENGTH);    //UART0 Send
  59.                                                                                 PlayAdpcm((uint32_t)lppbyPrompt[4], TRUE);                                                                                        //Play Voice
  60.                                                                                 break;                                                                        
  61.                                                                         case 10:  //看书
  62.                                                                                 DrvGPIO_ClrBit(GPB,3);                                                               
  63.                                                                           SysTimerDelay(50);
  64.                                                                           DrvGPIO_SetBit(GPB,3);                                                                                       
  65.                                                                                 DrvUART_Write(UART_PORT0,(uint8_t *)VR_Command7,CMD_LENGTH);    //UART0 Send
  66.                                                                                 PlayAdpcm((uint32_t)lppbyPrompt[5], TRUE);                                                                                        //Play Voice
  67.                                                                                 break;                                                                        
  68.                                                                         case 11:  //浪漫模式
  69.                                                                                 DrvGPIO_ClrBit(GPB,4);                                                               
  70.                                                                           SysTimerDelay(50);
  71.                                                                           DrvGPIO_SetBit(GPB,4);        
  72.                                                                                 DrvUART_Write(UART_PORT0,(uint8_t *)VR_Command8,CMD_LENGTH);    //UART0 Send
  73.                                                                                 PlayAdpcm((uint32_t)lppbyPrompt[6], TRUE);                                                                                        //Play Voice
  74.                                                                                 break;
  75.                                                                         case 12:  //休息模式
  76.                                                                                 DrvGPIO_ClrBit(GPB,4);                                                               
  77.                                                                           SysTimerDelay(50);
  78.                                                                           DrvGPIO_SetBit(GPB,4);
  79.                                                                                 DrvUART_Write(UART_PORT0,(uint8_t *)VR_Command9,CMD_LENGTH);    //UART0 Send
  80.                                                                                 PlayAdpcm((uint32_t)lppbyPrompt[7], TRUE);                                                                                        //Play Voice
  81.                                                                                 break;                                                                        
  82.                                                                         case 13:  //夜灯
  83.                                                                                 DrvGPIO_ClrBit(GPB,5);                                                               
  84.                                                                           SysTimerDelay(50);
  85.                                                                           DrvGPIO_SetBit(GPB,5);                                                                                
  86.                                                                                 DrvUART_Write(UART_PORT0,(uint8_t *)VR_Command10,CMD_LENGTH);    //UART0 Send
  87. //                                                                                PlayAdpcm((uint32_t)lppbyPrompt[11], TRUE);                                                                                        //Play Voice
  88.                                                                                 break;                                                                        
  89.                                                                         case 14:  //打开灯
  90.                                                                                 DrvGPIO_ClrBit(GPB,6);                                                               
  91.                                                                           SysTimerDelay(50);
  92.                                                                           DrvGPIO_SetBit(GPB,6);
  93.                                                                                 DrvUART_Write(UART_PORT0,(uint8_t *)VR_Command11,CMD_LENGTH);    //UART0 Send
  94.                                                                                 PlayAdpcm((uint32_t)lppbyPrompt[8], TRUE);                                                                                        //Play Voice
  95.                                                                                 break;
  96.                                                                         case 15:  //日常模式
  97.                                                                                 DrvGPIO_ClrBit(GPB,6);                                                               
  98.                                                                           SysTimerDelay(50);
  99.                                                                           DrvGPIO_SetBit(GPB,6);                                                                                
  100.                                                                                 DrvUART_Write(UART_PORT0,(uint8_t *)VR_Command12,CMD_LENGTH);    //UART0 Send
  101.                                                                                 PlayAdpcm((uint32_t)lppbyPrompt[9], TRUE);                                                                                        //Play Voice
  102.                                                                                 break;                                                                        
  103.                                                                         case 16:  //关灯
  104.                                                                                 DrvGPIO_ClrBit(GPB,1);                                                               
  105.                                                                           SysTimerDelay(50);
  106.                                                                           DrvGPIO_SetBit(GPB,1);                                                                                
  107.                                                                                 DrvUART_Write(UART_PORT0,(uint8_t *)VR_Command13,CMD_LENGTH);    //UART0 Send
  108. //                                                                                PlayAdpcm((uint32_t)lppbyPrompt[13], TRUE);                                                                                        //Play Voice
  109.                                                                                 break;               
  110.                                                                 }
  111.             }
  112.         }
  113.         else if(VR_ENABLE==1)    //timeout,回到未唤醒状态
  114.         {
  115.                                                 if(g_vrstate == 1)
  116.                                                 {
  117.                                                                 DrvGPIO_SetBit(GPA,7); //关闭唤醒指示灯
  118.                                                                 //LedTurnOff();    //上电默认开灯
  119.                                                                 DrvUART_Write(UART_PORT0,(uint8_t *)VR_Command17,CMD_LENGTH);    //UART0 Send
  120. //                                                                if(timeout_quiet==0)
  121. //                                                                        PlayAdpcm((uint32_t)lppbyPrompt[18], TRUE);                                                                                //Play Voice
  122.                                                                 g_vrstate= 0;
  123.                                                 }
  124.         }
  125.     }


以上代码,通过识别到的语音序号,进行播放对应序号的语音文件,进行语音回复,另外向串口发送对应的控制指令,程序很简单。
      下面说下烧录需要的文件与设置。
      烧录程序,需要使用提供的烧录工具软件“Nuvoton NuMicro ICP Programming Tool”及硬件“Nu-Link"。
     软件设置与导入文件见下图!
f2132056f7f30616a5b91835e7c3058.png
设置好了导入对应文件,再点”开始“进行等待完成就可以了。
下面说说对应的文件:
APROM:编译出来的代码,使用自己的编译软件编译。
数据FLASH:语音指令文件,需要找原厂申请制作。
外部FLASH:语音反馈的文件,这可以自己录音,或者用文字转语音的软件生成,然后自己转换成BIN文件。
重点说下可以自己做的语音反馈的文件的制作方法:
1、自己录音或通过文字语音软件生成"WAV"格式的音频文件。
2、按顺序将名字命成"00.wav"名字是两位数字从00开始,后缀是.wav 。
3、放入文件夹内,同里文件夹还有三个文件,直接复制过来的,见下图。
4、点击bat这个文件,等待生成“ all.bin”这个文件,用于烧录。
775fac9c936954c8377708b3d5eb27c.png

下面是此项目的可烧录代码与效果演示的视频
演示视频.rar (8.5 MB)
(下载次数: 94, 2020-10-19 10:18 上传)

烧录代码.rar (159.89 KB)
(下载次数: 5, 2020-10-19 10:16 上传)




` 21.jpg

回帖(1)

jf_13351361

2020-12-27 11:43:20
您好,我是一名自动化专业的学生,在自学单片机,对语音模块很感兴趣,但是这个源码还有烧录操作有点复杂,您发出来的资料包我下载不了,能麻烦您有空的时候发一下我邮箱吗1138501440@qq.com   谢谢(*°∀°)=3
举报

更多回帖

发帖
×
20
完善资料,
赚取积分