Flutter语音识别插件simple_speech_recognition的使用
Flutter语音识别插件simple_speech_recognition的使用
简介
simple_speech_recognition
是一个用于在 Flutter 应用程序中实现语音识别功能的插件。它支持 Android 和 iOS 平台,并提供了简单的 API 来处理语音输入。
使用步骤
以下是使用 simple_speech_recognition
插件的完整示例代码,展示如何在 Flutter 中集成语音识别功能。
示例代码
import 'package:flutter/material.dart';
import 'package:permission_handler/permission_handler.dart'; // 用于请求麦克风权限
import 'package:simple_speech_recognition/simple_speech_recognition.dart'; // 引入语音识别插件
void main() {
runApp(const MyApp()); // 启动应用
}
class MyApp extends StatelessWidget {
const MyApp({super.key});
@override
Widget build(BuildContext context) {
return MaterialApp(
title: '语音识别示例',
theme: ThemeData(
primarySwatch: Colors.blue,
),
home: const MyHomePage(title: '语音识别示例'), // 主页面
);
}
}
class MyHomePage extends StatefulWidget {
const MyHomePage({super.key, required this.title});
final String title;
@override
State<MyHomePage> createState() => _MyHomePageState();
}
class _MyHomePageState extends State<MyHomePage> {
SimpleSpeechRecognition? speechRecognition; // 初始化语音识别对象
String _text = ''; // 用于存储识别结果的变量
@override
void initState() {
super.initState();
speechRecognition = SimpleSpeechRecognition(); // 创建语音识别实例
speechRecognition!.onBeginningOfSpeech = () => _updateText("开始说话"); // 开始说话事件
speechRecognition!.onVolumeChange = (volume) => _updateText("音量: $volume"); // 音量变化事件
speechRecognition!.onEndOfSpeech = () => _updateText("结束说话"); // 结束说话事件
}
// 请求麦克风权限并启动语音识别
void recognize() async {
if (!(await Permission.speech.isGranted)) {
await Permission.speech.request(); // 请求麦克风权限
recognize(); // 重新调用识别函数
} else {
initRecognition(); // 如果权限已授予,则初始化识别
}
}
// 初始化语音识别并获取结果
void initRecognition() async {
try {
String result = await speechRecognition!.start("pt_BR"); // 开始语音识别,语言设置为葡萄牙语
_updateText(result); // 更新识别结果
} on SpeechRecognitionNotMatchException {
_updateText("未识别"); // 处理不匹配异常
} on SpeechRecognitionAudioException {
_updateText("无音频输入"); // 处理音频异常
} on SpeechRecognitionBusyException {
_updateText("设备忙"); // 设备正在使用中
} on SpeechRecognitionClientException {
_updateText("客户端错误"); // 客户端错误
} on SpeechRecognitionNetworkException {
_updateText("网络连接失败"); // 网络连接问题
} on SpeechRecognitionNetworkTimoutException {
_updateText("网络超时"); // 网络超时
} on SpeechRecognitionNoPermissionException {
_updateText("无权限"); // 无权限
} on SpeechRecognitionServerExcpetion {
_updateText("服务器错误"); // 服务器错误
} on SpeechRecognitionSpeechTimeoutException {
_updateText("语音输入超时"); // 语音输入超时
} on SpeechRecognitionUnknownException {
_updateText("未知错误"); // 未知错误
}
}
// 更新 UI 的文本
_updateText(String text) {
setState(() {
_text = text; // 更新状态
});
}
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text(widget.title), // 设置标题
),
body: Center(
child: Column(
mainAxisAlignment: MainAxisAlignment.center,
children: [
const Text('识别结果:'), // 显示提示文本
Text(
_text, // 动态显示识别结果
style: Theme.of(context).textTheme.headlineMedium,
),
],
),
),
floatingActionButton: FloatingActionButton( // 添加按钮触发语音识别
onPressed: recognize, // 按钮点击事件
tooltip: '开始识别',
child: const Icon(Icons.mic), // 图标为麦克风
),
);
}
}
运行效果
运行上述代码后,您将看到以下界面:
- 顶部:显示标题 “语音识别示例”。
- 中间:显示识别结果或提示信息(如 “开始说话” 或 “结束说话”)。
- 底部:一个浮动按钮,图标为麦克风,点击后开始语音识别。
注意事项
- 权限请求:
- 在 Android 上,需要添加麦克风权限到
AndroidManifest.xml
文件中:<uses-permission android:name="android.permission.RECORD_AUDIO"/>
- 在 iOS 上,需要在
Info.plist
文件中添加以下键值对:<key>NSMicrophoneUsageDescription</key> <string>我们需要访问您的麦克风来录音。</string>
- 在 Android 上,需要添加麦克风权限到
更多关于Flutter语音识别插件simple_speech_recognition的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html
更多关于Flutter语音识别插件simple_speech_recognition的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html
simple_speech_recognition
是一个用于 Flutter 的语音识别插件,它允许你在应用中集成语音识别功能。使用这个插件,你可以轻松地将用户的语音转换为文本。以下是如何在 Flutter 项目中使用 simple_speech_recognition
插件的步骤。
1. 添加依赖
首先,你需要在 pubspec.yaml
文件中添加 simple_speech_recognition
插件的依赖。
dependencies:
flutter:
sdk: flutter
simple_speech_recognition: ^0.0.1 # 请使用最新版本
然后运行 flutter pub get
来获取依赖。
2. 导入插件
在你的 Dart 文件中导入 simple_speech_recognition
插件。
import 'package:simple_speech_recognition/simple_speech_recognition.dart';
3. 初始化语音识别
在使用语音识别之前,你需要初始化 SimpleSpeechRecognition
实例。
final speechRecognition = SimpleSpeechRecognition();
4. 请求权限
在使用语音识别功能之前,通常需要请求麦克风权限。你可以使用 permission_handler
插件来请求权限。
import 'package:permission_handler/permission_handler.dart';
Future<void> requestMicrophonePermission() async {
var status = await Permission.microphone.status;
if (!status.isGranted) {
await Permission.microphone.request();
}
}
5. 开始语音识别
你可以使用 startListening
方法来开始语音识别。这个方法会返回一个 Stream
,你可以监听这个 Stream
来获取识别结果。
void startSpeechRecognition() async {
await requestMicrophonePermission();
speechRecognition.startListening(
onResult: (String result) {
// 处理识别结果
print("识别结果: $result");
},
onError: (String error) {
// 处理错误
print("识别错误: $error");
},
);
}
6. 停止语音识别
你可以使用 stopListening
方法来停止语音识别。
void stopSpeechRecognition() {
speechRecognition.stopListening();
}
7. 完整示例
以下是一个完整的示例,展示了如何在 Flutter 应用中使用 simple_speech_recognition
插件。
import 'package:flutter/material.dart';
import 'package:simple_speech_recognition/simple_speech_recognition.dart';
import 'package:permission_handler/permission_handler.dart';
void main() {
runApp(MyApp());
}
class MyApp extends StatelessWidget {
[@override](/user/override)
Widget build(BuildContext context) {
return MaterialApp(
home: SpeechRecognitionPage(),
);
}
}
class SpeechRecognitionPage extends StatefulWidget {
[@override](/user/override)
_SpeechRecognitionPageState createState() => _SpeechRecognitionPageState();
}
class _SpeechRecognitionPageState extends State<SpeechRecognitionPage> {
final speechRecognition = SimpleSpeechRecognition();
String recognizedText = "点击按钮开始语音识别";
Future<void> requestMicrophonePermission() async {
var status = await Permission.microphone.status;
if (!status.isGranted) {
await Permission.microphone.request();
}
}
void startSpeechRecognition() async {
await requestMicrophonePermission();
speechRecognition.startListening(
onResult: (String result) {
setState(() {
recognizedText = result;
});
},
onError: (String error) {
setState(() {
recognizedText = "识别错误: $error";
});
},
);
}
void stopSpeechRecognition() {
speechRecognition.stopListening();
}
[@override](/user/override)
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text('语音识别示例'),
),
body: Center(
child: Column(
mainAxisAlignment: MainAxisAlignment.center,
children: [
Text(recognizedText),
SizedBox(height: 20),
ElevatedButton(
onPressed: startSpeechRecognition,
child: Text('开始语音识别'),
),
SizedBox(height: 20),
ElevatedButton(
onPressed: stopSpeechRecognition,
child: Text('停止语音识别'),
),
],
),
),
);
}
}