Artyom.js包含两个部分: 语音命令识别 和 语音合成 。 每个模块都是独立的,这意味着您可以只使用语音合成,反之亦然。
可以使用该artyom.window.js 文件 直接从浏览器使用Artyom,也可以使用该 文件与任何捆绑程序(如Webpack,Browserify等)一起使用artyom.js。
在浏览器中或使用模块捆绑器,都将获得Artyom类,并且需要实例化它以使用其他方法:
// Using the /build/artyom.js file // with ES6,TypeScript etc import Artyom from 'artyom.js'; const Jarvis = new Artyom(); Jarvis.say("Hello World !");或者,如果您正在浏览器中使用它:
<script src="artyom.window.js"></script> <script> var Jarvis = new Artyom(); Jarvis.say("Hello World !"); </script>
语音命令功能是通过将给定文本(命令)与语音识别API中的转录文本进行匹配而创建的。 Artyom提供了一个包装器,用于使用 artyom.addCommands 方法(添加大量命令)或 artyom.on 仅添加几个命令 的 函数来保存命令。
var artyom = new Artyom(); artyom.addCommands([ { indexes: ["Good morning"], action: function(i){ console.log("Good morning Triggered"); } }, { indexes: ["Good night"], action: function(i){ console.log("Good night Triggered"); } } ]); // Or the artisan mode to write less artyom.on(["Good morning"]).then(function(i){ console.log("Triggered"); });添加了两个命令后,使用artyom.initialize方法继续进行命令识别的初始化(不要忘记将listen属性设置为true来开始识别):
var artyom = new Artyom(); artyom.initialize({ lang:"en-GB", debug:true, // Show what recognizes in the Console listen:true, // Start listening after this speed:0.9, // Talk a little bit slow mode:"normal" // This parameter is not required as it will be normal by default });初始化之后,API将请求访问麦克风,并且命令识别将开始。 命令识别提供3种模式,您可以在初始化文档中检查。
Artyom提供了有用且紧凑的功能,可以轻松地合成文本。 该artyom.say 函数最多接收2个参数,仅第一个参数是必需的(要合成的文本)。
var artyom = new Artyom(); artyom.say("A long text here",{ onStart: function(){ console.log("Talking ..."); }, onEnd: function(){ console.log("I said all that i knew"); } });
使artyom很棒的原因是, 它将注意语音合成API令人讨厌的单词限制 。 您只需要担心如何提供要合成的文本。
现在就这些,阅读文档,尽情享受并创造一些很棒的东西!
您需要使用webkitSpeechRecognition 对象 将语音转换为文本 ,因此,要发出语音命令,您将需要有效的Internet连接。
简而言之,要为您的用户提供Artyom的全面支持,他需要使用Google Chrome。 Artyom使用Web语音API,语音识别和语音合成。 Web Speech API使您可以将语音数据合并到Web应用程序中。 Web语音API有两个部分:语音合成(文本到语音)和语音识别(异步语音识别)。
为了处理语音命令,artyom依赖于webkitSpeechRecognition Window 的 对象。 仅在Google Chrome浏览器(Android和桌面版)中可用的 功能 。
为了合成文本,artyom使用speechSynthesis窗口的 对象。在许多设备上,此功能的可用性会有所不同。除适用于iOS的Safari浏览器外,它还适用于Google Chrome浏览器(桌面版和Android版)。
命令是具有至少3个属性的文字对象:
物业名称 |
类型 |
描述 |
indexes |
数组 | 具有所有可以触发命令的文本标识符的数组 |
smart |
布尔值 | 为了正确处理命令,artyom需要知道命令是否使用通配符 。 如果确实如此,则将smart属性设置为true。 |
action |
功能 | 当识别的文本与indexs属性数组中的任何provided文本标识符匹配时将触发的功能 。 根据命令的类型,此函数最多可以接收2个参数(作为第一个参数,是索引数组中匹配命令的索引; 如果它是智能的,则为第二个参数)。 |
var command = { indexes: ["Hello"], action: function(){ alert("Hello, how are you ?"); } }; var artyom = new Artyom(); artyom.addCommands(command);
您可以使用数组作为输入为artyom输入多个命令。 数组的每个项目都必须是一个命令:
var commands = [ { indexes: ["Hello"], action: function(){ alert("Hello, how are you ?"); } }, { indexes: ["Good night"], action: function(){ alert("Hello, how are you ?"); } }, { indexes: ["Good morning"], action: function(){ alert("Hello, how are you ?"); } } ]; var artyom = new Artyom(); artyom.addCommands(commands);
如果您使用对许多单词有反应的命令,则可以检索在动作函数中说出的哪个单词:
var artyom = new Artyom(); artyom.addCommands({ indexes: ["Good morning","Good night", "Hello"], action: function(i){ if(i == 2){ // You said Hello }else if(i == 1){ // You said Good night }else if(i == 0){ // You said Good morning } } });
智能命令是语音命令,其内容可能具有可变和可获得的值。您可以通过*在命令中使用星号字符()获得可更改的值,并将其作为操作回调中的第二个参数返回。请注意,smart命令的属性需要设置为true。
例如,您可以创建一个命令,使artyom在您说出以下内容后重复您说的所有内容"repeat after me":
var artyom = new Artyom(); artyom.addCommands({ //The smart property of the command needs to be true smart:true, indexes: ["Repeat after me *"], action: function(i, wildcard){ // Speak alterable value artyom.say(wildcard); } }); // Then use the initialize function // .. // And proceed to say "Repeat after me, make a sandwich" // Then artyom should say "make me a sandwich"此外,为了使命令更加智能,并假设您知道如何使用它们,可以在命令中添加正则表达式,只要它很聪明即可。 只需将正则表达式添加为索引数组的一项即可:
var artyom = new Artyom(); artyom.addCommands({ //The smart property of the command needs to be true smart:true, indexes: [/Good Morning/i, new RegExp("Good Afternoon", "i")], action: function(i){ artyom.say("Hey, are alright? You never say hello."); } });
要清理垃圾回收,请确保没有任何SpeechUtterance待处理(在的上一次执行时执行artyom.say ):
let artyom = new Artyom(); // The clear command needs to be executed // always in the last artyom.say function artyom.say("Hello , this is a long text 1 ."); artyom.say("Hello , this is a long text 2."); artyom.say("Hello , this is a long text 3."); artyom.say("Hello , this is a long text 4."); artyom.say("Hello , this is a long text 5."); artyom.say("Hello , this is a long text 6."); artyom.say("Hello , this is a long text 7."); artyom.say("Hello , this is a long text. Now i'll clean the garbage collection.",{ onEnd: function(){ var totalObjectsInCollection = artyom.getGarbageCollection().length; // Clear now that there are no more text to say. artyom.clearGarbageCollection(); alert("The garbage collection has been cleaned. "+totalObjectsInCollection+" Items found. Now there are " + artyom.getGarbageCollection().length); } });
如果您将artyom用于简单的事情,则无需执行此操作。 但是,如果您合成了许多文本(50K个字符),那么该文本将由artyom.say函数处理,最终可能会产生超过20K(可能会有所不同)的巨大数组进行清洁,因为讲完文字后,它不再重要了。
要了解代码,请参见以下代码段:
// Remember that SpeechSynthesis is an experimental API // Therefore, there are many unsolved bugs originally // @INSTRUCTION 1 // This will add 1 item to the garbage collection artyom.say("This is a semi long text that will be spoken",{ onEnd: function(){ // If it is executed here , the intruction 2 will be never executed // Because you just cleaned all the existent SpeechSynthesisObjects // This is safe only if is executed in the onEnd callback and you're // sure that no more artyom.say functions will be executed after this instruction artyom.clearGarbageCollection(); } }); artyom.say("What's up",{ onEnd: function(){ console.log("You may see this text in the console."); } }); artyom.say("I'm trying to do something here. Please shut up your mouth.",{ onEnd: function(){ console.log("Probably this not ..."); } }); // More instructions ... artyom.say("Hello, this other text that will be spoken",{ onEnd: function(){ console.log("You may see this text in the console but sometimes don't"); } });请记住,您只能在onEnd 最后一次artyom.say 执行 后 在 回调中 清除垃圾回收 。
属性 | 类型 | 描述 |
isMobile |
布尔型 |
如果实际设备不是台式机或笔记本电脑,则返回true |
isChrome |
布尔型 |
如果实际的浏览器是Google Chrome,则返回true |
let artyom = new Artyom(); // Verify if artyom is supported window.onload = function(){ if(artyom.Device.isChrome){ if(!artyom.Device.isMobile){ alert("Artyom can talk and obey commands in this browser, however the voice will be the default voice of the device. Cannot force language here."); }else{ // Everything okay ! , use artyom normally here ! } }else{ alert("Artyom only works with The Google Chrome Browser !"); } };