原文档 :https://github.com/TalAter/annyang/blob/master/docs/README.md
项目地址:https://github.com/TalAter/annyang
这里介绍一个开源的JavaScript语言输入库,名叫annyang。
Github地址:https://github.com/TalAter/annyang
截至到2019年12月13日,这个github仓库已经有5.7k个Star了。
annyang实际上就是JavaScript脚本文件,使用起来非常方便。
使用方法:https://blog.csdn.net/i042416/article/details/81701596
下面是中文翻译文档
API参考
init(命令,[resetCommands = true])
用要识别的命令列表初始化annyang。
例子:
var commands = {'hello :name': helloFunction};
var commands2 = {'hi': helloFunction};
// initialize annyang, overwriting any previously added commands
annyang.init(commands, true);
// adds an additional command without removing the previous commands
annyang.init(commands2, false);
从v1.1.0开始,不再需要调用init()。只需在需要时启动start()监听,并在任意时间和任意次数添加addCommands()即可。
不推荐使用
详情看 Commands Object
参数:
- 对象 命令 -annyang应该收听的命令
- boolean [resetCommands = true] -初始化之前要删除所有命令吗?
开始([选项])
开始听。在先添加一些命令(不强制使用)后调用此方法是一个好的做法。
接收支持以下选项:
autoRestart
(boolean)如果由于窗口冲突而关闭,annyang会重新启动continuous
(boolean)允许强制启用或禁用连续模式。annyang对此很在行,只有在知道自己该做什么的情况下才进行设置。paused
(boolean)以暂停模式启动annyang。
例子:
//开始收听,请勿自动重新启动
annyang.start({ autoRestart: false });
//开始收听,不要自动重启,在第一个短语
annyang.start({ autoRestart: false, continuous: false });
参数:
- 对象 [选项] -可选选项。
abort()
停止收听,然后关闭麦克风。
或者,要仅在不停止SpeechRecognition引擎或关闭麦克风的情况下暂时暂停annyang对命令的响应,请改用pause()。
请参阅:pause()
暂停()
暂停聆听。annyang将停止响应命令(直到调用resume或start方法),而不会关闭浏览器的SpeechRecognition引擎或麦克风。
或者,要停止SpeechRecognition引擎并关闭麦克风,请改用abort()。
请参阅:abort()
恢复()
结果匹配时,继续侦听并恢复命令回调执行。如果语音识别被中止(停止),请启动它。
调试([newState = true])
打开调试消息到控制台的输出。丑陋,但超级好用!
参数:
- 布尔值 [newState = true] -打开/关闭调试消息
setLanguage(语言)
设置用户将使用的语言。如果未调用此方法,则默认为“ en-US”。
另请:语言
参数:
- 字符串 语言 -语言(语言环境)
addCommands(命令)
添加annyang将响应的命令。语法与init()类似,但不会删除现有命令。
例子:
var commands = {'hello :name': helloFunction, 'howdy': helloFunction};
var commands2 = {'hi': helloFunction};
annyang.addCommands(commands);
annyang.addCommands(commands2);
// annyang现在将监听所有三个命令
另外:命令对象
参数:
- 对象 命令 -annyang应该收听的命令
removeCommands([commandsToRemove])
删除现有命令。用单个短语,短语数组或有条理地调用。不传递任何参数来删除所有命令。
例子:
var commands = {'hello': helloFunction, 'howdy': helloFunction, 'hi': helloFunction};
// Remove all existing commands
annyang.removeCommands();
// Add some commands
annyang.addCommands(commands);
// Don't respond to hello
annyang.removeCommands('hello');
// Don't respond to howdy or hi
annyang.removeCommands(['howdy', 'hi']);
参数:
- 字符串|数组|未定义 [commandsToRemove] -删除命令
addCallback(type,callback,[context])
添加一个回调函数,以防发生以下事件之一:
-
start
-浏览器的语音识别引擎开始收听后立即触发。 -
soundstart
-一旦检测到任何声音(可能是语音)就会触发。每次语音识别启动时将触发一次。参见https://is.gd/annyang_sound_start。
-
error
-当浏览器的语音识别引擎返回错误时触发,此通用错误回调后将跟随更准确的错误回调(如果两个都定义,则两者都将触发)。将使用错误事件作为第一个参数来调用回调函数。
-
errorNetwork
-由于网络错误导致语音识别失败时触发。将使用错误事件作为第一个参数来调用回调函数。
-
errorPermissionBlocked
-当浏览器阻止使用语音识别的权限请求时触发。将使用错误事件作为第一个参数来调用回调函数。
-
errorPermissionDenied
-当用户阻止使用语音识别的权限请求时触发。将使用错误事件作为第一个参数来调用回调函数。
-
end
-当浏览器的语音识别引擎停止时触发。 -
result
-一经发现语音便被解雇。此通用回调后将带有resultMatch
或resultNoMatch
回调。将使用用户称为第一个参数的一系列可能短语来调用此事件的回调函数。
-
resultMatch
-当annyang能够在用户所说的内容和注册的命令之间进行匹配时触发。此事件的回调函数将按以下顺序用三个参数调用:
- 用户说的短语与命令匹配。
- 匹配的命令。
- 用户可能已经说过的一系列可能的替代短语。
-
resultNoMatch
-当用户说的话与任何已注册的命令都不匹配时触发。此事件的回调函数将使用用户可能作为第一个参数说的一组可能的短语进行调用。
例子:
annyang.addCallback('error', function() {
$('.myErrorText').text('There was an error!');
});
annyang.addCallback('resultMatch', function(userSaid, commandText, phrases) {
console.log(userSaid); // sample output: 'hello'
console.log(commandText); // sample output: 'hello (there)'
console.log(phrases); // sample output: ['hello', 'halo', 'yellow', 'polo', 'hello kitty']
});
// pass local context to a global function called notConnected
annyang.addCallback('errorNetwork', notConnected, this);
参数:
- 字符串 类型 -触发此回调的事件的名称
- 函数 回调 -触发事件时要调用的函数
- 对象 [context] -回调函数的可选上下文
removeCallback(type,callback)
从事件中删除回调。
- 传递事件名称和回调命令以从该事件类型中删除该回调命令。
- 仅传递事件名称即可从该事件类型中删除所有回调命令。
- 传递未定义的事件名称和回调命令以从所有事件类型中删除该回调命令。
- 不传递任何参数以从所有事件类型中删除所有回调命令。
例子:
annyang.addCallback('start', myFunction1);
annyang.addCallback('start', myFunction2);
annyang.addCallback('end', myFunction1);
annyang.addCallback('end', myFunction2);
// Remove all callbacks from all events:
annyang.removeCallback();
// Remove all callbacks attached to end event:
annyang.removeCallback('end');
// Remove myFunction2 from being called on start:
annyang.removeCallback('start', myFunction2);
// Remove myFunction1 from being called on all events:
annyang.removeCallback(undefined, myFunction1);
参数:
- type要从中删除回调的事件类型的名称
- callback删除的回调函数
返回:
- 未定义
isListening()
如果当前启用语音识别,则返回true。如果关闭语音识别或annyang暂停,则返回false。
返回:
- 布尔值true = SpeechRecognition已打开并且annyang正在收听
getSpeechRecognizer()
返回annyang使用的浏览器的SpeechRecognition对象的实例。如果您想直接访问浏览器的语音识别引擎,则很有用。
返回:
- SpeechRecognition annyang当前使用的浏览器的Speech Recognizer
触发器(字符串|数组)
模拟语音被识别。这将触发与语音识别检测到语音时相同的事件和行为。
可以接受包含单个句子的字符串或包含多个要检查的句子的数组,直到其中一个与命令匹配为止(类似于解析语音识别替代方法的方式)
例子:
annyang.trigger('Time for some thrilling heroics');
annyang.trigger(
['Time for some thrilling heroics', 'Time for some thrilling aerobics']
);
参数:
- 字符串|数组句子一个句子作为字符串或可能的句子的字符串数组
返回:
- 未定义
最好您得知道
命令对象
两者的init()和addCommands()方法接收commands
对象。
annyang理解与命令named variables
,splats
和optional words
。
- 使用
named variables
在您的命令一个单词的参数。 - 使用
splats
以捕获多字的文字在你的命令(贪婪)结束。 - 使用
optional words
或短语将命令的一部分定义为可选。
例子:
<script>
var commands = {
// annyang will capture anything after a splat (*) and pass it to the function.
// e.g. saying "Show me Batman and Robin" will call showFlickr('Batman and Robin');
'show me *tag': showFlickr,
// A named variable is a one-word variable, that can fit anywhere in your command.
// e.g. saying "calculate October stats" will call calculateStats('October');
'calculate :month stats': calculateStats,
// By defining a part of the following command as optional, annyang will respond
// to both: "say hello to my little friend" as well as "say hello friend"
'say hello (to my little) friend': greeting
};
var showFlickr = function(tag) {
var url = 'http://api.flickr.com/services/rest/?tags='+tag;
$.getJSON(url);
}
var calculateStats = function(month) {
$('#stats').text('Statistics for '+month);
}
var greeting = function() {
$('#greeting').text('Hello!');
}
</script>
在命令中使用正则表达式
对于高级命令,您可以传递正则表达式对象,而不是简单的字符串命令。
这是通过传递包含两个属性的对象来完成的:regexp
和, callback
而不是函数。
例子:
var calculateFunction = function(month) { console.log(month); }
var commands = {
// This example will accept any word as the "month"
'calculate :month stats': calculateFunction,
// This example will only accept months which are at the start of a quarter
'calculate :quarter stats': {'regexp': /^calculate (January|April|July|October) stats$/, 'callback': calculateFunction}
}