Flutter语音识别插件simple_speech_recognition的使用

发布于 1周前 作者 wuwangju 来自 Flutter

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), // 图标为麦克风
      ),
    );
  }
}

运行效果

运行上述代码后,您将看到以下界面:

  • 顶部:显示标题 “语音识别示例”。
  • 中间:显示识别结果或提示信息(如 “开始说话” 或 “结束说话”)。
  • 底部:一个浮动按钮,图标为麦克风,点击后开始语音识别。

注意事项

  1. 权限请求
    • 在 Android 上,需要添加麦克风权限到 AndroidManifest.xml 文件中:
      <uses-permission android:name="android.permission.RECORD_AUDIO"/>
    • 在 iOS 上,需要在 Info.plist 文件中添加以下键值对:
      <key>NSMicrophoneUsageDescription</key>
      <string>我们需要访问您的麦克风来录音。</string>

更多关于Flutter语音识别插件simple_speech_recognition的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html

1 回复

更多关于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('停止语音识别'),
            ),
          ],
        ),
      ),
    );
  }
}
回到顶部
AI 助手
你好,我是IT营的 AI 助手
您可以尝试点击下方的快捷入口开启体验!