Flutter教程如何在Flutter中实现语音识别与文字转语音

我想在Flutter应用中实现语音识别和文字转语音功能,但不知道该如何下手。请问有哪些推荐的插件或库可以使用?具体应该如何集成和调用?比如录音权限该怎么申请,语音识别结果如何实时显示,以及如何将文字转换成语音播放?最好能提供一些简单的代码示例或者关键步骤说明。另外,这些功能在iOS和Android上是否都能正常使用,有没有需要特别注意的兼容性问题?

3 回复

在Flutter中实现语音识别与文字转语音可以分别使用两个插件:speech_to_textflutter_tts

1. 语音识别(Speech to Text)

安装插件:

dependencies:
  speech_to_text: ^5.0.2

使用方法:

import 'package:flutter/material.dart';
import 'package:speech_to_text/speech_to_text.dart' as stt;

class SpeechScreen extends StatefulWidget {
  @override
  _SpeechScreenState createState() => _SpeechScreenState();
}

class _SpeechScreenState extends State<SpeechScreen> {
  late stt.SpeechToText _speech;
  bool _isListening = false;
  String _text = "点击按钮开始";

  @override
  void initState() {
    super.initState();
    _speech = stt.SpeechToText();
  }

  void _listen() 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 {
      setState(() => _isListening = false);
      _speech.stop();
    }
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(title: Text("语音识别")),
      body: Center(child: Text(_text)),
      floatingActionButton: FloatingActionButton(
        onPressed: _listen,
        child: Icon(_isListening ? Icons.stop : Icons.mic),
      ),
    );
  }
}

2. 文字转语音(Text to Speech)

安装插件:

dependencies:
  flutter_tts: ^4.0.0

使用方法:

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

class TTSExample extends StatefulWidget {
  @override
  _TTSExampleState createState() => _TTSExampleState();
}

class _TTSExampleState extends State<TTSExample> {
  final FlutterTts flutterTts = FlutterTts();

  Future<void> speak(String text) async {
    await flutterTts.setLanguage("zh-CN");
    await flutterTts.speak(text);
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(title: Text("文字转语音")),
      body: Center(
        child: ElevatedButton(
          onPressed: () => speak("你好,这是一个测试。"),
          child: Text("播放"),
        ),
      ),
    );
  }
}

通过这两个插件,你可以在Flutter应用中轻松实现语音识别和文字转语音的功能。

更多关于Flutter教程如何在Flutter中实现语音识别与文字转语音的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html


在Flutter中实现语音识别和文字转语音,可以借助插件来完成。语音识别可以用speech_to_text插件,而文字转语音则使用flutter_tts插件。

语音识别(Speech to Text)

  1. 添加依赖:在pubspec.yaml中添加speech_to_text: ^x.x.x
  2. 初始化并请求权限:在代码中实例化SpeechToText对象,并调用其initialize()方法。在Android上需要请求麦克风权限。
  3. 开始监听:调用listen()开始监听语音输入,当用户说话时会触发回调函数,将语音转换为文本。
import 'package:speech_to_text/speech_to_text.dart' as stt;

class _MyAppState extends State<MyApp> {
  stt.SpeechToText _speech;
  bool _isListening = false;
  String _text = 'Press the button and speak';

  @override
  void initState() {
    super.initState();
    _speech = stt.SpeechToText();
  }

  void _startListening() async {
    if (!_isListening) {
      bool available = await _speech.initialize();
      if (available) {
        setState(() => _isListening = true);
        _speech.listen(resultListener);
      }
    } else {
      setState(() => _isListening = false);
      _speech.stop();
    }
  }

  void resultListener(String result, dynamic) {
    setState(() => _text = result);
  }
}

文字转语音(Text to Speech)

  1. 添加依赖:在pubspec.yaml中添加flutter_tts: ^x.x.x
  2. 初始化并设置语言:创建FlutterTts实例,并通过setLanguage()设置支持的语言。
  3. 调用speak()播放文本。
import 'package:flutter_tts/flutter_tts.dart';

class _MyAppState extends State<MyApp> {
  FlutterTts flutterTts = FlutterTts();

  Future<void> speak(String text) async {
    await flutterTts.setLanguage("en-US");
    await flutterTts.speak(text);
  }
}

这样就可以在Flutter应用中实现语音识别与文字转语音功能了。

Flutter中实现语音识别与文字转语音

语音识别(语音转文字)

Flutter中可以使用speech_to_text插件实现语音识别:

import 'package:speech_to_text/speech_to_text.dart' as stt;

// 初始化
final stt.SpeechToText speech = stt.SpeechToText();

// 检查设备是否支持语音识别
bool available = await speech.initialize(
  onStatus: (status) => print('状态: $status'),
  onError: (error) => print('错误: $error'),
);

if(available) {
  // 开始监听
  speech.listen(
    onResult: (result) {
      print('识别结果: ${result.recognizedWords}');
    },
    localeId: 'zh_CN', // 设置中文识别
  );
} else {
  print('设备不支持语音识别');
}

文字转语音

使用flutter_tts插件实现文字转语音:

import 'package:flutter_tts/flutter_tts.dart';

final FlutterTts flutterTts = FlutterTts();

// 设置语言和参数
await flutterTts.setLanguage('zh-CN');
await flutterTts.setPitch(1.0);  // 音调
await flutterTts.setSpeechRate(0.5);  // 语速

// 朗读文本
await flutterTts.speak('你好,这是一个语音合成示例');

注意事项

  1. 需要在AndroidManifest.xmlInfo.plist中添加相应的权限
  2. 中文识别和合成需要设置正确的语言代码(‘zh-CN’或’zh_CN’)
  3. 实际使用中需要处理权限请求
  4. 这两个插件都支持iOS和Android平台

以上代码提供了基本实现,你可以根据需求扩展更多功能,如暂停/继续语音识别、调整语音合成参数等。

回到顶部