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 ? '停止' : '开始'),
            ),
          ],
        ),
      ),
    );
  }
}

代码解释

  1. 导入必要的包

    import 'package:flutter/material.dart';
    import 'package:speech_to_text/speech_to_text.dart' as stt;
    
  2. 初始化应用

    void main() {
      runApp(MyApp());
    }
    
  3. 创建主界面

    class MyApp extends StatelessWidget {
      [@override](/user/override)
      Widget build(BuildContext context) {
        return MaterialApp(
          home: SpeechScreen(),
        );
      }
    }
    
  4. 定义状态类

    class SpeechScreen extends StatefulWidget {
      [@override](/user/override)
      _SpeechScreenState createState() => _SpeechScreenState();
    }
    
  5. 实现状态逻辑

    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();
      }
    
  6. 构建界面

    [@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

1 回复

更多关于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项目中实现语音识别功能:

  1. 在iOS和macOS项目中配置权限

    • 对于macOS,你需要在Info.plist文件中添加麦克风使用权限的请求。这通常是通过Xcode自动完成的,但你可以手动添加以下条目:

      <key>NSMicrophoneUsageDescription</key>
      <string>我们需要访问您的麦克风来进行语音识别</string>
      
  2. 创建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方法停止它。

请确保在实际部署之前测试你的应用,并根据需要调整代码以处理不同的错误情况和用户交互。

回到顶部