Flutter语音识别插件speech_to_text_platform_interface的使用

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

Flutter语音识别插件speech_to_text_platform_interface的使用

简介

speech_to_text_platform_interface 是一个通用的平台接口,用于 speech_to_text 插件。此接口允许特定平台实现 speech_to_text 插件,并确保它们支持相同的接口。

使用方法

要实现一个新的特定平台的 speech_to_text 实现,请扩展 SpeechToTextPlatform 并创建一个执行平台特定行为的实现。在注册您的插件时,通过调用 SpeechToTextPlatform.instance = MyPlatformSpeechToText() 设置默认的 SpeechToTextPlatform

示例代码

下面是一个完整的示例 demo,展示如何在 Flutter 应用中使用 speech_to_text 插件进行语音识别。

1. 添加依赖

首先,在 pubspec.yaml 文件中添加 speech_to_text 依赖:

dependencies:
  flutter:
    sdk: flutter
  speech_to_text: ^5.0.0 # 请检查最新版本

2. 初始化和配置

接下来,在 Dart 文件中初始化并配置 speech_to_text 插件:

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
  Widget build(BuildContext context) {
    return MaterialApp(
      home: SpeechScreen(),
    );
  }
}

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

class _SpeechScreenState extends State<SpeechScreen> {
  final stt.SpeechToText _speech = stt.SpeechToText();
  bool _isListening = false;
  String _text = 'Press the button and start speaking';

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('Speech to Text Example'),
      ),
      body: Padding(
        padding: const EdgeInsets.all(8.0),
        child: Center(
          child: Column(
            children: [
              Expanded(
                child: Container(
                  padding: const EdgeInsets.all(8.0),
                  decoration: BoxDecoration(
                    border: Border.all(width: 1.0, color: Colors.grey),
                  ),
                  child: Text(_text),
                ),
              ),
              Row(
                mainAxisAlignment: MainAxisAlignment.center,
                children: <Widget>[
                  FloatingActionButton(
                    onPressed: _listen,
                    child: Icon(_isListening ? Icons.stop : Icons.mic),
                  ),
                ],
              ),
            ],
          ),
        ),
      ),
    );
  }

  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();
    }
  }
}

关于破坏性变更的说明

强烈建议优先考虑非破坏性变更(例如向接口添加方法),而不是对这个包进行破坏性变更。关于为什么不太干净的接口比破坏性变更更可取的讨论,请参阅 Flutter 官方文档

通过以上步骤,您可以轻松地在 Flutter 应用中集成语音识别功能。希望这些信息对您有所帮助!


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

1 回复

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


当然,以下是一个关于如何在Flutter项目中使用speech_to_text_platform_interface插件进行语音识别的代码案例。不过,需要注意的是,speech_to_text_platform_interface本身是一个接口定义,并不直接提供语音识别功能。通常我们会使用一个实现了该接口的插件,比如speech_to_text插件。

以下是如何在Flutter项目中使用speech_to_text插件(它实现了speech_to_text_platform_interface接口)的示例代码:

1. 添加依赖

首先,在你的pubspec.yaml文件中添加speech_to_text插件的依赖:

dependencies:
  flutter:
    sdk: flutter
  speech_to_text: ^5.5.0  # 请检查最新版本号

2. 导入插件

在你的Dart文件中(比如main.dart),导入speech_to_text插件:

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

3. 配置插件

在你的Flutter应用的入口文件(通常是main.dart)中,配置并初始化SpeechToText插件:

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

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

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

class _MyHomePageState extends State<MyHomePage> {
  late SpeechToText _speech = SpeechToText();
  late bool _isListening = false;
  late String _text = 'Press the button to listen';

  @override
  void initState() {
    super.initState();
    _initSpeechToText();
  }

  Future<void> _initSpeechToText() async {
    bool hasPermission = await _speech.hasPermission();
    if (!hasPermission) {
      await _speech.requestPermission();
      hasPermission = await _speech.hasPermission();
    }

    if (hasPermission) {
      setState(() {
        _isListening = false;
      });
    }
  }

  Future<void> _listen() async {
    setState(() {
      _isListening = true;
      _text = 'Listening...';
    });

    var result = await _speech.listen(
      onResult: (result, locale) => {
        setState(() {
          _text = result.recognizedWords;
          _isListening = false;
        });
      },
      partialResults: true,
      listenFor: Duration(seconds: 10),
      localeId: _speech.locales.first.localeId,
    );

    if (result?.error != null) {
      setState(() {
        _text = 'Error: ${result?.error?.message ?? 'Unknown Error'}';
        _isListening = false;
      });
    }
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('Speech to Text Demo'),
      ),
      body: Center(
        child: Column(
          mainAxisAlignment: MainAxisAlignment.center,
          children: <Widget>[
            Text(
              _text,
              style: TextStyle(fontSize: 24),
            ),
            SizedBox(height: 20),
            ElevatedButton(
              onPressed: _isListening ? null : _listen,
              child: Text(_isListening ? 'Stopping' : 'Listen'),
            ),
          ],
        ),
      ),
    );
  }
}

4. 运行应用

确保你的开发环境已经配置好,然后运行你的Flutter应用。在点击按钮后,应用将开始监听语音输入,并在识别到语音后显示识别的文本。

注意事项

  • 权限:在实际应用中,请确保处理权限请求和拒绝的情况。
  • 本地化:插件支持多种语言,你可以根据需要设置localeId
  • 错误处理:在实际应用中,请添加更多的错误处理逻辑以处理可能的异常情况。

希望这个示例代码对你有所帮助!

回到顶部