Flutter语音识别插件speech_to_text_macos的使用
Flutter语音识别插件speech_to_text_macos的使用
speech_to_text_macos
是 macOS 平台上的语音识别插件实现。它基于 speech_to_text
包,并允许你在 macOS 应用程序中使用语音识别功能。
使用
该插件是被推荐使用的,这意味着你可以直接使用 speech_to_text
包。当你这样做时,此插件会自动包含在你的应用中。
完整示例 Demo
下面是一个完整的示例,展示了如何在 Flutter 中使用 speech_to_text_macos
插件。
import 'package:flutter/material.dart';
import 'package:speech_to_text/speech_to_text.dart' as stt;
void main() {
runApp(MyApp());
}
class MyApp extends StatelessWidget {
[@override](/user/override)
Widget build(BuildContext context) {
return MaterialApp(
home: SpeechScreen(),
);
}
}
class SpeechScreen extends StatefulWidget {
[@override](/user/override)
_SpeechScreenState createState() => _SpeechScreenState();
}
class _SpeechScreenState extends State<SpeechScreen> {
late stt.SpeechToText speech;
bool isListening = false;
String text = '准备开始...';
[@override](/user/override)
void initState() {
super.initState();
// 初始化 SpeechToText 实例
speech = stt.SpeechToText();
}
[@override](/user/override)
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text('语音识别示例'),
),
body: Padding(
padding: EdgeInsets.all(8.0),
child: Column(
mainAxisAlignment: MainAxisAlignment.center,
children: [
Center(
child: Text(
text,
style: TextStyle(fontSize: 24.0),
),
),
SizedBox(height: 20),
ElevatedButton(
onPressed: () async {
if (!isListening) {
bool available = await speech.initialize(
onStatus: (val) => print('onStatus: $val'),
onError: (val) => print('onError: $val'),
);
if (available) {
setState(() => isListening = true);
speech.listen(onResult: (result) {
setState(() {
text = result.recognizedWords;
});
});
} else {
// 语音识别不可用
ScaffoldMessenger.of(context).showSnackBar(
SnackBar(content: Text('语音识别不可用')),
);
}
} else {
// 停止监听
setState(() => isListening = false);
speech.stop();
}
},
child: Text(isListening ? '停止' : '开始'),
),
],
),
),
);
}
}
代码解释
-
导入必要的包:
import 'package:flutter/material.dart'; import 'package:speech_to_text/speech_to_text.dart' as stt;
-
初始化应用:
void main() { runApp(MyApp()); }
-
创建主界面:
class MyApp extends StatelessWidget { [@override](/user/override) Widget build(BuildContext context) { return MaterialApp( home: SpeechScreen(), ); } }
-
定义状态类:
class SpeechScreen extends StatefulWidget { [@override](/user/override) _SpeechScreenState createState() => _SpeechScreenState(); }
-
实现状态逻辑:
class _SpeechScreenState extends State<SpeechScreen> { late stt.SpeechToText speech; bool isListening = false; String text = '准备开始...'; [@override](/user/override) void initState() { super.initState(); // 初始化 SpeechToText 实例 speech = stt.SpeechToText(); }
-
构建界面:
[@override](/user/override) Widget build(BuildContext context) { return Scaffold( appBar: AppBar( title: Text('语音识别示例'), ), body: Padding( padding: EdgeInsets.all(8.0), child: Column( mainAxisAlignment: MainAxisAlignment.center, children: [ Center( child: Text( text, style: TextStyle(fontSize: 24.0), ), ), SizedBox(height: 20), ElevatedButton( onPressed: () async { if (!isListening) { bool available = await speech.initialize( onStatus: (val) => print('onStatus: $val'), onError: (val) => print('onError: $val'), ); if (available) { setState(() => isListening = true); speech.listen(onResult: (result) { setState(() { text = result.recognizedWords; }); }); } else { // 语音识别不可用 ScaffoldMessenger.of(context).showSnackBar( SnackBar(content: Text('语音识别不可用')), ); } } else { // 停止监听 setState(() => isListening = false); speech.stop(); } }, child: Text(isListening ? '停止' : '开始'), ), ], ), ), ); }
更多关于Flutter语音识别插件speech_to_text_macos的使用的实战教程也可以访问 https://www.itying.com/category-92-b0.html
更多关于Flutter语音识别插件speech_to_text_macos的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html
当然,下面是一个关于如何在Flutter项目中集成并使用speech_to_text_macos
插件进行语音识别的代码示例。这个插件允许你在macOS平台上进行语音识别。
首先,确保你已经在pubspec.yaml
文件中添加了speech_to_text
及其macOS平台的依赖:
dependencies:
flutter:
sdk: flutter
speech_to_text: ^5.0.0 # 请检查最新版本号
dependency_overrides:
speech_to_text_macos:
git:
url: https://github.com/csdcorp/speech_to_text.git
path: packages/speech_to_text_macos # 确保使用与主插件兼容的版本
注意:dependency_overrides
部分通常用于从Git仓库直接引用包,这在开发或测试新特性时很有用。在生产环境中,你应该使用发布的版本。
接下来,按照以下步骤在你的Flutter项目中实现语音识别功能:
-
在iOS和macOS项目中配置权限:
-
对于macOS,你需要在
Info.plist
文件中添加麦克风使用权限的请求。这通常是通过Xcode自动完成的,但你可以手动添加以下条目:<key>NSMicrophoneUsageDescription</key> <string>我们需要访问您的麦克风来进行语音识别</string>
-
-
创建Flutter插件实例并初始化:
import 'package:flutter/material.dart'; import 'package:speech_to_text/speech_to_text.dart'; void main() { runApp(MyApp()); } class MyApp extends StatefulWidget { @override _MyAppState createState() => _MyAppState(); } class _MyAppState extends State<MyApp> { SpeechToText _speechToText = SpeechToText(); bool _isListening = false; String _resultText = ''; @override void initState() { super.initState(); initSpeechRecognizer(); } Future<void> initSpeechRecognizer() async { bool available = await _speechToText.initialize( onStatus: (status) => print('Current status: $status'), onError: (err) => print('Error: $err'), ); if (available) { setState(() {}); } } @override Widget build(BuildContext context) { return MaterialApp( home: Scaffold( appBar: AppBar( title: Text('语音识别示例'), ), body: Padding( padding: const EdgeInsets.all(16.0), child: Column( mainAxisAlignment: MainAxisAlignment.center, children: <Widget>[ Text( _resultText, style: TextStyle(fontSize: 24), ), SizedBox(height: 20), ElevatedButton( onPressed: _isListening ? _stopListening : _startListening, child: Text(_isListening ? '停止' : '开始语音识别'), ), ], ), ), ), ); } Future<void> _startListening() async { setState(() { _isListening = true; }); _speechToText.listen( onResult: (result) => setState(() { _resultText = result.recognizedWords; }), onCancel: () => setState(() { _isListening = false; }), onError: (err) => print('Error: $err'), listenFor: Duration(seconds: 10), // 监听时长,可以根据需要调整 pauseFor: Duration(seconds: 3), // 暂停时长,可以根据需要调整 localeId: _speechToText.localeIds.first, // 使用第一个可用的语言环境 ); } Future<void> _stopListening() async { setState(() { _isListening = false; }); await _speechToText.stop(); } }
在这个示例中,我们创建了一个简单的Flutter应用,其中包含一个按钮用于开始和停止语音识别,以及一个文本区域用于显示识别结果。_startListening
方法启动语音识别,而_stopListening
方法停止它。
请确保在实际部署之前测试你的应用,并根据需要调整代码以处理不同的错误情况和用户交互。