如何通过语音命令即时切换Artyom.js的语言

本文概述

  • A.使用Artyom的单个实例
  • B.使用Artyom的多个实例
  • C.使用3个或更多Artyom实例
当我们谈论使用JavaScript在Google Chrome中实现简单的语音助手时, Artyom.js使一切变得容易。它将自动公开一个非常易于使用的API, 并很好地包装了语音识别和语音合成API。尽管该库有充分的文档记录, 但是你有时可能自己并没有发现开发人员可能不会想到的简单事情, 例如使用语音命令即时切换语言。
如果你正在考虑这样做, 则必须从逻辑上考虑从其他语言开始我应该如何处理该库。首先, 原始的语音识别API不允许即时切换已识别的语言, 这意味着你必须重新启动实例。 Artyom.js也是如此, 要从语言切换, 则需要重新启动它。如果你使用普通的语音识别API, 那么如果你想从头开始做的话会很头疼, 但是由于有了Artyom, 这很容易实现。
根据你的工作方式, 你可能希望使用Artyom的单个或多个实例(每种语言1个), 可以根据需要随意工作。
A.使用Artyom的单个实例如果你想使用单个Artyom实例即时切换语言, 则需要执行以下步骤:
1.创建实例和配置
在这种情况下, 我们的实例将以Jarvis的形式提供, 然后将我们的配置存储在一个普通的JS对象中, 该对象具有两种不同的键, 每种语言分别是西班牙语和英语:
// Initialize an instance of artyomvar Jarvis = new Artyom(); // Create an object to store the configuration for every languagevar JarvisConfigurations = {spanish: {lang: "es-ES", continuous: true, listen: true, debug: true}, english: {lang: "en-GB", continuous: true, listen: true, debug: true}};

2.添加命令以切换语言
由于单个实例中只有两种语言, 因此命令也将存储在相同的实例中, 并且它们应对” 切换到西班牙语” 和” Cambiar ainglés(切换到英语的西班牙语)” 做出反应。我们将添加2条遵循以下逻辑的命令:
  1. 触发命令后, 使用fatality()停止artyom
  2. 当满足死亡要求时, 根据语言, 使用存储在JarvisConfigurations变量中的初始配置再次初始化。
  3. 完成初始化的承诺后, 请在相应语言中打个招呼。
Jarvis.addCommands([// English Command{indexes: ["Switch to Spanish"], action: function(){// Stop JarvisJarvis.fatality().then(function(){// When it stops, initialize with Spanish configuration :)Jarvis.initialize(JarvisConfigurations.spanish).then(function(){Jarvis.say("Hola"); }); }); }}, // Spanish Command{indexes: ["Cambiar a inglés"], action: function(){// Stop JarvisJarvis.fatality().then(function(){// When it stops, initialize with english configuration :)Jarvis.initialize(JarvisConfigurations.english).then(function(){Jarvis.say("Hello"); }); }); }}]);

3.首次使用默认语言初始化
当我们使用命令动态切换语言时, 需要有一个已经运行的Artyom实例, 否则没人会认出任何东西。在这种情况下, 我们将从英语配置开始:
// Initialize for first time !Jarvis.initialize(JarvisConfigurations.english).then(function(){console.log("Ready to work, try changing the language!"); });

一旦Artyom开始, 就像我们在英语模式下一样, 你可以更改为西班牙语, 说” Switch to Spanish” , Artyom会说” Hola” , 反之亦然。
B.使用Artyom的多个实例当使用不同的语言时, 许多开发人员喜欢为每种语言抽象和分离逻辑, 从而创建多个Artyom实例。这样, 你就不会在Artyom的英语实例中拥有西班牙语命令(因为识别服务使用其他语言, 因此它们不会被触发), 反之亦然。
注意【如何通过语音命令即时切换Artyom.js的语言】如果你打算支持两种以上的语言, 则此方法不再有用, 因此请跳至选项C。此选项仅用于理解目的。
1.创建实例和配置
如果要使用Artyom的多个实例进行组织, 则显然需要以不同的方式命名它们。在这种情况下, 对于我们的英语实例, 代码中的名称将为Jarvis, 对于西班牙实例, 其名称将为Maria:
// Initialize English Instance of Artyomvar Jarvis = new Artyom(); // Initialize Spanish Instance of Artyomvar Maria = new Artyom(); // Create an object to store the configuration for every instancevar ArtyomConfiguration = {spanish: {lang: "es-ES", continuous: true, listen: true, debug: true}, english: {lang: "en-GB", continuous: true, listen: true, debug: true}};

2.添加命令以分别切换语言
现在, 你需要添加2条命令, 以使用不同的配置触发重新启动的逻辑:
// Add Switch language command for Maria (Spanish Mode)Maria.addCommands([{indexes: ["Cambiar a inglés"], action: function(){// Stop the Spanish (Maria) InstanceMaria.fatality().then(function(){// Initialize JarvisJarvis.initialize(ArtyomConfiguration.Jarvis).then(function(){Jarvis.say("Hello"); }); }); }}]); // Add Switch language command for Jarvis (English Mode)Jarvis.addCommands([{indexes: ["Switch to Spanish"], action: function(){// Stop the English (Jarvis) InstanceJarvis.fatality().then(function(){// Initialize MariaMaria.initialize(ArtyomConfiguration.Maria).then(function(){Maria.say("Hola"); }); }); }}]);

3.首次使用默认语言初始化。
与预期的一样, 仅在用户讲话时才触发命令, 因此需要运行artyom。在这种情况下, 我们将从默认的英语模式开始。
// Initialize for first time !Jarvis.initialize(ArtyomConfiguration.Jarvis).then(function(){console.log("Ready to work, try changing the language!"); });

C.使用3个或更多Artyom实例如果你使用Artyom使用3种或更多语言, 则现在需要考虑一种简单的方法来存储所有实例, 并与所有实例和平共处, 以防止API崩溃, 此外它还需要像时钟一样工作!作为Artyom库的作者, 以下方法是最简单的, 但是它可能会根据你的需要进行更改。
1.创建实例和配置
首先, 我们需要将配置和实例也存储在JS对象中, 并且在示例中将使用3个实例(更多信息, 你可以遵循相同的逻辑):
var InstancesCollector = {Jarvis: new Artyom(), Maria: new Artyom(), Christine: new Artyom()// Add more if you need to}; var InstancesConfiguration = {Jarvis: {lang: "en-GB", continuous: true, listen: true, debug: true}, Maria: {lang: "es-ES", continuous: true, listen: true, debug: true}, Christine: {lang: "de-DE", continuous: true, listen: true, debug: true}// Add more if you need to};

2.创建可重用的初始化器
由于你正在使用多个实例, 并且你可能不想为每种语言键入不同的初始化函数, 因为你的代码可能最终会有很多相同的结果, 因此你可以创建另一个变量, 该变量使用简单的函数存储初始化模型:
/** * The initializers will be stored in this variable as normally you would want to execute this * more than once, however writing just once. */var AutoInitializers = {Jarvis: function(){// Start EnglishInstancesCollector.Jarvis.initialize(InstancesConfiguration.Jarvis).then(function(){InstancesCollector.Jarvis.say("Hello, i'm Jarvis"); }); }, Maria: function(){// Start SpanishInstancesCollector.Maria.initialize(InstancesConfiguration.Maria).then(function(){InstancesCollector.Maria.say("Hola, soy Maria"); }); }, Christine: function(){// Start GermanInstancesCollector.Christine.initialize(InstancesConfiguration.Christine).then(function(){InstancesCollector.Christine.say("Hallo, ich bin Christine"); }); }};

这样, 每当一种不同的语言开始时, 它就会以自己的语言说出某种东西(只是出于测试目的)。
3.添加命令以分别切换语言
现在, 在这一部分中, 你需要小心。由于语音触发了语言的变化, 因此你需要确定要从哪种语言切换以及切换到哪里。此外, 你需要停止请求所来自的当前实例, 例如, 如果你请求更改说英语的语言(Jarvis实例), 则需要停止Jarvis。在每个命令的操作中, 我们将使用公认的命令来确定在当前实例停止后应将语言更改为:
// Add command switcher from english to: spanish or germanInstancesCollector.Jarvis.addCommands([{indexes: ["Switch to Spanish", "Switch to German"], action: function(i){switch(i){case 0:// Stop English InstanceInstancesCollector.Jarvis.fatality().then(function(){// Start MariaAutoInitializers.Maria(); }); break; case 1:// Stop English InstanceInstancesCollector.Jarvis.fatality().then(function(){// Start GermanAutoInitializers.Christine(); }); break; }}}]); // Add command switcher from spanish to: english or germanInstancesCollector.Maria.addCommands([{indexes: ["Cambiar a inglés", "Cambiar a alemán"], action: function(i){switch(i){case 0:// Stop Spanish InstanceInstancesCollector.Maria.fatality().then(function(){// Start EnglishAutoInitializers.Jarvis(); }); break; case 1:// Stop Spanish InstanceInstancesCollector.Maria.fatality().then(function(){// Start GermanAutoInitializers.Christine(); }); break; }}}]); // Add command switcher from german to: english or spanishInstancesCollector.Christine.addCommands([{indexes: ["zu Englisch wechseln", "zu Spanisch wechseln"], action: function(i){switch(i){case 0:// Stop German InstanceInstancesCollector.Christine.fatality().then(function(){// Start EnglishAutoInitializers.Jarvis(); }); break; case 1:// Stop German InstanceInstancesCollector.Christine.fatality().then(function(){// Start SpanishAutoInitializers.Maria(); }); break; }}}]);

因此, 你现在可以从任何一种语言切换到其他语言, 因为我们的初始化代码涵盖了每种情况, 例如从西班牙语到德语, 从德语到英语等。
4.首次使用默认语言初始化
最后一步, 第一次使用默认语言开始Artyom, 以便你可以从语音中切换语言:
InstancesCollector.Jarvis.initialize(InstancesConfiguration.Jarvis).then(function(){InstancesCollector.Jarvis.say("Ready to work, try changing the language!"); });

正如你在步骤B中注意到的, 使用两种不同的语言时, 拥有的语言越多, 处理逻辑就越复杂。
编码愉快!

    推荐阅读