Flutter语音识别插件voice_recognition_flutter的使用

Flutter语音识别插件voice_recognition_flutter的使用

voice_recognition_flutter 是一个为 Flutter 应用程序提供语音识别功能的插件。它支持多种语言,并允许你实现实时语音转文本的功能。

特性

  • 实时语音识别
  • 支持多种语言
  • 持续识别模式
  • 处理语音识别事件
  • 获取可用的语言区域列表

平台特定设置

Android

在你的 AndroidManifest.xml 文件中添加以下权限:

<uses-permission android:name="android.permission.RECORD_AUDIO" />
<uses-permission android:name="android.permission.INTERNET" />
<queries>
    <intent>
        <action android:name="android.speech.RecognitionService" />
    </intent>
</queries>

基本实现

首先,导入 voice_recognition_flutter 包:

import 'package:voice_recognition_flutter/voice_recognition.dart';

创建一个 VoiceRecognition 实例,并设置首选语言:

// 创建一个语音识别实例
final voiceRecognition = VoiceRecognition();

// 设置识别语言
voiceRecognition.setLanguages("bn-BD"); // 示例为孟加拉语

// 开始监听语音输入
await voiceRecognition.startVoice();

// 停止监听语音输入
await voiceRecognition.stopVoice();

// 获取所有可用的语言区域
final locales = await voiceRecognition.getAllLocal();

设置监听器

你可以设置不同的回调函数来处理语音识别的不同阶段和事件:

voiceRecognition.listenResult(
  onReadyForSpeech: (ready) {
    // 当识别器准备好时调用
  },
  onBeginningOfSpeech: (beginning) {
    // 当用户开始说话时调用
  },
  onRmsChanged: (rmsDb) {
    // 当音频级别变化时调用
    print("音频级别: $rmsDb");
  },
  onResults: (results) async {
    // 当识别结果准备好时调用
    print("识别结果: $results");

    // 对于持续识别,再次开始监听
    await voiceRecognition.startVoice();
  },
  onError: (error) {
    // 错误处理
    print("错误: $error");
  },
  onEndOfSpeech: (end) {
    // 当用户停止说话时调用
  },
  onPartialResults: (partial) {
    // 当部分识别结果可用时调用
  },
  onEvent: (event) {
    // 处理其他识别事件
  },
);

方法

  • setLanguages(String locale): 设置识别语言
  • startVoice(): 开始语音识别
  • stopVoice(): 停止语音识别
  • getAllLocal(): 获取所有可用的语言区域列表

回调

  • onReadyForSpeech: 识别器准备好的时候调用
  • onBeginningOfSpeech: 用户开始说话时调用
  • onRmsChanged: 音频级别变化时调用
  • onBufferReceived: 原始音频缓冲区更新时调用
  • onEndOfSpeech: 用户停止说话时调用
  • onError: 错误处理
  • onResults: 最终识别结果
  • onPartialResults: 中间识别结果
  • onEvent: 其他识别事件

支持的语言

该插件支持多种语言。使用 getAllLocal() 方法可以获取设备上可用的语言区域列表。

示例语言区域:

  • 英语(美国): “en-US”
  • 孟加拉语: “bn-BD”
  • 印地语: “hi-IN”
  • 等等…

完整示例代码

import 'package:flutter/material.dart';
import 'dart:async';

import 'package:flutter/services.dart';
import 'package:voice_recognition_flutter/voice_recognition.dart';

void main() {
  runApp(const MyApp());
}

class MyApp extends StatefulWidget {
  const MyApp({super.key});

  [@override](/user/override)
  State<MyApp> createState() => _MyAppState();
}

class _MyAppState extends State<MyApp> {
  final _voicerecognitionPlugin = VoiceRecognition();
  var tmpdata = "";

  [@override](/user/override)
  void initState() {
    super.initState();
    _voicerecognitionPlugin.setLanguages("bn-BD");
    // print(_voicetestPlugin.getAllLocal());
    _voicerecognitionPlugin.listenResult(
        onReadyForSpeech: (onReadyForSpeech) {},
        onBeginningOfSpeech: (onBeginningOfSpeech) {},
        onRmsChanged: (onRmsChanged) {
          print("音频级别: $onRmsChanged");
        },
        onBufferReceived: (onBufferReceived) {},
        onEndOfSpeech: (onEndOfSpeech) {},
        onError: (onError) {
          print("错误: $onError");
        },
        onResults: (onResults) async {
          setState(() {
            tmpdata = onResults!;
          });

          // 调用再次以实现连续识别
          await _voicerecognitionPlugin.startVoice();
        },
        onPartialResults: (onPartialResults) {},
        onEvent: (onEvent) {});
  }

  [@override](/user/override)
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Scaffold(
        appBar: AppBar(
          title: const Text('插件示例应用'),
        ),
        body: Column(
          children: [
            Center(
              child: Text('运行在: $tmpdata\n'),
            ),
            ElevatedButton(
                onPressed: () async {
                  await _voicerecognitionPlugin.startVoice();
                },
                child: const Text("开始语音")),
            ElevatedButton(
                onPressed: () async {
                  await _voicerecognitionPlugin.stopVoice();
                },
                child: const Text("停止语音")),
            ElevatedButton(
                onPressed: () async {
                  final data = await _voicerecognitionPlugin.getAllLocal();
                  print(data);
                },
                child: const Text("本地"))
          ],
        ),
      ),
    );
  }
}

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

1 回复

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


当然,以下是一个关于如何使用 voice_recognition_flutter 插件的 Flutter 代码示例。这个插件允许你在 Flutter 应用中实现语音识别功能。

首先,确保你已经在 pubspec.yaml 文件中添加了 voice_recognition_flutter 依赖:

dependencies:
  flutter:
    sdk: flutter
  voice_recognition_flutter: ^x.y.z  # 请替换为最新版本号

然后,运行 flutter pub get 来获取依赖。

接下来是一个简单的 Flutter 应用示例,演示如何使用 voice_recognition_flutter 插件:

import 'package:flutter/material.dart';
import 'package:voice_recognition_flutter/voice_recognition_flutter.dart';

void main() {
  runApp(MyApp());
}

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'Voice Recognition Demo',
      theme: ThemeData(
        primarySwatch: Colors.blue,
      ),
      home: MyHomePage(),
    );
  }
}

class MyHomePage extends StatefulWidget {
  @override
  _MyHomePageState createState() => _MyHomePageState();
}

class _MyHomePageState extends State<MyHomePage> {
  String _recognizedText = '';

  Future<void> _startVoiceRecognition() async {
    try {
      List<String> locales = await VoiceRecognitionFlutter.getAvailableLocales();
      print('Available locales: $locales');

      String result = await VoiceRecognitionFlutter.localizeAndRecognize(
        localeId: locales.first,  // 使用第一个可用的语言环境
        prompt: '请说话',
        languageModel: 'free_form',  // 或者 'web_search'
      );

      setState(() {
        _recognizedText = result;
      });
    } catch (e) {
      print('Error: $e');
    }
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('Voice Recognition Demo'),
      ),
      body: Center(
        child: Column(
          mainAxisAlignment: MainAxisAlignment.center,
          children: <Widget>[
            Text(
              '识别结果:',
              style: TextStyle(fontSize: 20),
            ),
            SizedBox(height: 10),
            Text(
              _recognizedText,
              style: TextStyle(fontSize: 24, color: Colors.blue),
            ),
            SizedBox(height: 20),
            ElevatedButton(
              onPressed: _startVoiceRecognition,
              child: Text('开始语音识别'),
            ),
          ],
        ),
      ),
    );
  }
}

解释

  1. 依赖导入

    • pubspec.yaml 中添加 voice_recognition_flutter 依赖。
  2. 主应用

    • MyApp 是主应用类,包含应用的根 MaterialApp。
  3. 主页

    • MyHomePage 是一个有状态的小部件,包含一个用于显示识别结果的文本和一个按钮。
  4. 语音识别功能

    • _startVoiceRecognition 方法使用 VoiceRecognitionFlutter 插件来启动语音识别。
    • getAvailableLocales 获取可用的语言环境列表。
    • localizeAndRecognize 方法启动语音识别,并返回识别结果。
  5. UI 更新

    • 使用 setState 方法更新 _recognizedText,从而在 UI 上显示识别结果。

请确保在实际部署前测试代码,并根据需要进行调整。由于插件可能更新,请参考插件的官方文档以获取最新和最准确的使用信息。

回到顶部