如何使用Alan Voice在Flutter中构建一个语音识别应用程序
语音识别已经有几年的历史了,并在现代应用程序中开发出了令人惊叹的功能。
其中一些功能包括语音辅助和语音到文本的转换。
Alan语音是一个由人工智能驱动的平台,它使用对话式语音来创建强大的语音助理应用程序。
通过Alan语音插件,我们可以在我们的应用程序中设置语音识别功能,与用户沟通。
在本教程中,你将学习如何使用语音识别创建一个基于用户命令执行动作的应用程序。
为了实现这一目标,我们将首先设置我们的Flutter应用程序,然后通过将该插件集成到我们的应用程序中,将其与Alan语音联系起来。
接下来,我们将测试我们的语音识别功能,同时在不改变我们应用程序的情况下创建/编辑/更新语音命令。
前提条件
要继续学习本教程,读者需要以下条件。
- 对Flutter SDK和widget的一些基本知识。
- Flutter和Dart编程语言的基本知识。
- 一个代码编辑器(最好是VS Code)。
设置我们的应用程序
导航到您的Flutter应用程序IDE,创建一个新的Flutter应用程序,并给它一个您选择的名字。
一旦您的应用程序设置完毕并准备运行,您需要将Alan voice Flutter包集成到应用程序中。
获取最新版本的软件包并将其添加到您的pubspec.yml 文件中。
确保你的应用程序的最小SDK版本是21。要检查这一点,你可以在你的android/app/build.gradle文件中更新它。

创建艾伦语音账户
我们需要设置我们的账户来配置应用程序的命令,而不需要更新整个代码。
为了实现这一点,我们将使用创建账户时提供给我们的SDK密钥,将我们的应用程序链接到Alan语音账户。
因此,导航到Studio Alan,用你的详细资料创建一个账户。
点击创建语音帮助,建立一个新的项目。一旦完成,你会在中心窗口面板上看到一个基本的Hello world - Hi there消息。

为了获得我们的Alan SDK密钥,点击窗口顶部导航的集成按钮。
选择你想集成的平台。在我们的案例中,我们将选择Android。注意,对于一个iOS应用程序,我们需要选择iOS选项。
运行我们的应用程序
将插件文件导入我们的应用程序,并将以下代码添加到main.dart 。
import 'package:alan_voice/alan_voice.dart';
import 'package:flutter/material.dart';
void main() {
runApp(
const MaterialApp(
home: AlanSpeech(),
),
);
}
class AlanSpeech extends StatefulWidget {
const AlanSpeech({Key? key}) : super(key: key);
@override
_AlanSpeechState createState() => _AlanSpeechState();
}
class _AlanSpeechState extends State<AlanSpeech> {
_MyHomePageState() {
AlanVoice.addButton(' YOUR API_KEY goes here ',
buttonAlign: AlanVoice.BUTTON_ALIGN_LEFT
);
// Sets a command to be performed on speech match
AlanVoice.onCommand.add((command) {
// Debugs the output to the console
debugPrint("got new command ${command.toString()}");
});
}
@override
initState() {
_MyHomePageState();
}
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: const Center(child: Text('Alan Speech recognition')),
),
body: const Center(
child: Text(
'Speech Recognition'
),
));
}
}
要添加启动语音识别监听器的Alan按钮,请添加下面的代码。
_MyHomePageState() {
AlanVoice.addButton(" // AlanSDKKey",
buttonAlign: AlanVoice.BUTTON_ALIGN_LEFT
);
AlanVoice.onCommand.add((command) {
debugPrint("got new command ${command.toString()}");
});
}
确保用你指定的Alan SDK密钥值替换AlanSDKKey 。buttonAlign: AlanVoice.BUTTON_ALIGN_LEFT ,指定该按钮应放在屏幕的左下方。
这样,Alan的声音就实现了,我们现在可以运行我们的应用程序。
该应用程序有一个默认的命令,它作为简单的语音帮助,根据匹配的输入,将预定义的信息转发给用户。
为了指定实际行动,我们需要定义我们希望我们的应用程序听的命令。
intent('Open youtube', p => {
p.play({"command": "youtube", "screen": "youtube"});
p.play('Opening Youtube');
});
上面的代码规定,当第一个参数中指定的字符串出现匹配时,我们的应用程序应该执行一个命令,该参数被传递给我们的意图函数调用。
当找到一个匹配项时,Alan会向我们的前端发送一个响应。
响应被捕获在AlanVoice.onCommand.add() 函数的命令部分。
当我们运行我们的应用程序并点击语音识别按钮并说打开YouTube时,我们的应用程序会记录到控制台got a new command open youtube 。
我们可以使用这个响应来执行字符串文本匹配来调用动作。在我们的例子中,只要我们说open YouTube ,该应用程序就会打开YouTube。
为了实现这一点,我们需要一个可以打开其他应用程序的Flutter包。external_app_launcher 允许我们实现这一功能。
将该插件添加到你的pubspec.yaml 文件中,并将其导入你的文件。我们需要向LaunchApp.openApp.androidPackageName 属性提供我们希望打开的应用程序的包名。
如果在设备中找到该应用程序,那么它将被启动。如果该应用程序没有安装在设备上,那么用户将被引导到Play Store。
import 'package:alan_voice/alan_voice.dart';
import 'package:flutter/material.dart';
import 'package:external_app_launcher/external_app_launcher.dart';
void main() {
runApp(
const MaterialApp(
home: AlanSpeech(),
),
);
}
class AlanSpeech extends StatefulWidget {
const AlanSpeech({Key? key}) : super(key: key);
@override
_AlanSpeechState createState() => _AlanSpeechState();
}
class _AlanSpeechState extends State<AlanSpeech> {
_MyHomePageState() {
// Adds Alan voice button using your API_KEY instance and specifies.
// The button's position.
AlanVoice.addButton(' YOUR API_KEY goes here ',
buttonAlign: AlanVoice.BUTTON_ALIGN_LEFT
);
// Sets a command to be performed on speech match.
AlanVoice.onCommand.add((command) async {
if(command.data['command'] == 'youtube' ){
// Launches the app when a match occurs
await LaunchApp.openApp(
androidPackageName: 'com.google.android.youtube',
appStoreLink: 'https://play.google.com/store/apps/details?id=com.google.android.youtube&hl=en&gl=US',
// openStore: false
);
}
// Debugs the output to the console
debugPrint("got new command ${command}");
debugPrint("got new command ${command.data['command']}");
});
}
@override
initState() {
// Initializes alan voice button to listen to speech
_MyHomePageState();
}
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: const Center(child: Text('Alan Speech recognition')),
),
body: const Center(
child: Text(
'Speech Recognition',
style: TextStyle(
fontSize: 20
),
),
));
}
}
在上述代码中,我们已经实现了让应用程序响应我们的命令的功能。
AlanVoice.onCommand.add((command) async {
if(command.data['command'] == 'youtube' ){
await LaunchApp.openApp(
androidPackageName: 'com.google.android.youtube',
appStoreLink: 'https://play.google.com/store/apps/details?id=com.google.android.youtube&hl=en&gl=US',
// openStore: false
);
}
debugPrint("got new command ${command}");
debugPrint("got new command ${command.data['command']}");
});
}
当在我们账户上注册的命令被匹配时,它应该调用LaunchApp.openApp 函数来打开我们的YouTube应用程序。
总结
在本教程中,我们学习了如何使用Alan语音将语音识别集成到Flutter应用程序中。
我们可以很容易地在我们的应用程序中执行复杂或自动的动作。因此,你可以利用这些知识来制作其他高质量的应用程序。