前言

语音识别是特别酷的功能,ISD9160的核心卖点就是这个语音识别,使用了Cybron VR 算法。 
很好奇这颗10块钱以内的IC是如何实现人家百来块钱的方案。且听如下分析。

本文作者twowinter,转载请注明:http://blog.csdn.net/iotisan/

功能分析

语音识别例程中做了21条语音识别模型,只要识别到对应的语音,就从串口输出对应模型的命令ID。

具体21条命令如下: 
全开模式 0 显示为1 
外出模式 1 显示为2 
房间开启 2 。。。 
房间关闭 3 
单灯变色 4 
多灯变色 5 
全部变色 6 
打开开关 7 
关闭开关 8 
打开插座 9 
关闭插座 10 
我要开灯 11 
我要关灯 12 
打开空调 13 
关闭空调 14 
温度升高 15 
温度降低 16 
打开电视 17 
关闭电视 18 
更换频道 19 
降低音量 20 
增加音量 21

代码分析

代码主循环的逻辑特别清晰,我把主干抽出来,方便大家理解。

int32_t DoVR_sep()
{
Wave_StartRecord();
CSpotter_Reset(hCSpotter); while () {
nNumSample = Wave_GetSample(&lpsSample); if (CSpotter_AddSample(hCSpotter, lpsSample, nNumSample) == CSPOTTER_SUCCESS){
nID = CSpotter_GetResult(hCSpotter);
DrvUART_Write(UART_PORT0,&nID,); //confid 20150603
}
Wave_UnlockSample(&lpsSample);
}
}

Wave_StartRecord开始录音,Wave_GetSample取出音频数据。 
CSpotter_AddSample进行语音识别,CSpotter_GetResult识别出语音命令ID,最后DrvUART_Write吐出ID。

如何修改自定义语音命令

原定计划是修改自定义语音命令,但是发现这块资料很少。对于如何实现语音识别的Cybron VR算法,这块是封装成库,具体是“CSpotterSDK16k24d.lib”。这部分底层核心不开放,是可以理解。但是在具体应用时,使用什么工具来产生具体的声音模型,却一直没能找到对应工具。

总结

可以看到ISD9160是可以实现本地一些预置的语音命令,基本上可以比的上一些几十块钱的模块。但是如何实现自定义的语音命令,还需要继续研究。

ISD9160学习笔记05_ISD9160语音识别代码分析的更多相关文章

  1. jQuery 学习笔记:jQuery 代码结构

    jQuery 学习笔记:jQuery 代码结构 这是我学习 jQuery 过程中整理的笔记,这一部分主要包括 jQuery 的代码最外层的结构,写出来整理自己的学习成果,有错误欢迎指出. jQuery ...

  2. SPSS学习笔记之——Kaplan-Meier生存分析

    SPSS学习笔记之--Kaplan-Meier生存分析 一.概述 关于生存分析的相关概念,Kaplan-Meier用于估计生存函数,允许有一个分组变量进行生存率的组间比较,还容许一个分层变量.若不考虑 ...

  3. Nginx学习笔记4 源码分析

    Nginx学习笔记(四) 源码分析 源码分析 在茫茫的源码中,看到了几个好像挺熟悉的名字(socket/UDP/shmem).那就来看看这个文件吧!从简单的开始~~~ src/os/unix/Ngx_ ...

  4. 0037 Java学习笔记-多线程-同步代码块、同步方法、同步锁

    什么是同步 在上一篇0036 Java学习笔记-多线程-创建线程的三种方式示例代码中,实现Runnable创建多条线程,输出中的结果中会有错误,比如一张票卖了两次,有的票没卖的情况,因为线程对象被多条 ...

  5. ISD9160学习笔记04_ISD9160音频编码代码分析

    前言 录音例程涉及了录音和播放两大块内容,上篇笔记说了播放,这篇就来说说录音这块,也就是音频编码这部分功能. 上篇笔记中的这段话太装逼了,我决定再复制下,嘿嘿. “我的锤子便签中有上个月记下的一句话, ...

  6. ISD9160学习笔记03_ISD9160音频解码代码分析

    录音例程涉及了录音和播放两大块内容,这篇笔记就先来说说播放,暂且先击破解码这部分功能. 我的锤子便签中有上个月记下的一句话,“斯蒂芬·平克说,写作之难,在于把网状思考,用树状结构,体现在线性展开的语句 ...

  7. Hadoop学习笔记—20.网站日志分析项目案例(三)统计分析

    网站日志分析项目案例(一)项目介绍:http://www.cnblogs.com/edisonchou/p/4449082.html 网站日志分析项目案例(二)数据清洗:http://www.cnbl ...

  8. Jquery学习笔记1-jquery总体代码框架

    第一次在博客中记录自己的笔记,希望能坚持下去吧,加油! 今天学习的是Jquery的源代码,官网上下载,然后使用DW(dream waver)编辑器打开Js(下载的是未压缩版),版本是2.0.3.第一次 ...

  9. Hadoop学习笔记—20.网站日志分析项目案例

    1.1 项目来源 本次要实践的数据日志来源于国内某技术学习论坛,该论坛由某培训机构主办,汇聚了众多技术学习者,每天都有人发帖.回帖,如图1所示. 图1 项目来源网站-技术学习论坛 本次实践的目的就在于 ...

随机推荐

  1. 【CUDA学习】结构体指针复制

    内核函数中要用data结构作用参数 typedef struct { int* value; int* num; } data; //host端 data* h_input; h_input=(dat ...

  2. SpringMVC小结

    一放下就生疏,所以要温故,所以要笔记. Tip,多数情况下,SpringMVC建议单例执行,Struts2建议多例执行. 原因就在于Struts2使用属性驱动或模型驱动,而SpringMVC则使用方法 ...

  3. struts2系列(二):struts2参数传递错误、struts2的输入错误验证

    一.struts2参数传递错误 1. 基本数据类型的传递最好使用包装类,原因是struts 2.1之后使用基本数据类型如果参数为空会报错2. 日期参数的传递最好定义一个区域的属性(定义locale), ...

  4. Java如何停止线程?

    在Java编程中,如何停止线程? 以下示例演示了如何通过创建一个用户定义的方法run()方法和Timer类来停止线程. package com.yiibai; import java.util.Tim ...

  5. C#跳转网页7种方法

    1.Response.Redirect(http://www.baidu.com,false); 目标页面和原页面可以在2个服务器上,可输入网址或相对路径.后面的bool值为是否停止执行当前页. 跳转 ...

  6. Java条形码插件

    项目中需要用条形码插件,基于Java平台的 需要比较简单,根据一个12位的数字生成一个条形码图片即可 之前一直用Google的Zxing,因为功能强大,调用简单,网上也有很多资料 后来发现,Zxing ...

  7. System.web和System.WebServer

    System.WebServer是因为iis7而出现的,也就是说如果在Classic下会被忽略,而System.web是iis以前版本的配置. httpModules    modules

  8. Hadoop学习笔记——安装Hadoop

    sudo mv /home/common/下载/hadoop-2.7.2.tar.gz /usr/local sudo tar -xzvf hadoop-2.7.2.tar.gz sudo mv ha ...

  9. 通过NAT转发实现私网对外发布信息

    我们可以在防火墙的外部网卡上绑定多个合法IP地址,然后通过ip映射使发给其中某一个IP地址的包转发至内部某一用户的WWW服务器上,然后再将该内部WWW服务器响应包伪装成该合法IP发出的包. 具体的IP ...

  10. Android学习之——ListView

    背景知识 ListView在Android应用中使用非常广泛,手机上必备的微博.网易新闻等,都使用了ListView.