Flutter语音识别插件better_iflytek的使用

Flutter语音识别插件better_iflytek的使用

better_iflytek 是一个用于 Flutter 的讯飞语音识别插件。它可以帮助你在 Flutter 应用中集成语音识别功能。

安装

步骤 1: 添加依赖

在你的 pubspec.yaml 文件中添加 better_iflytek 依赖:

dependencies:
  better_iflytek: ^0.0.5

步骤 2: 获取依赖

运行以下命令以安装依赖:

flutter packages get

常规使用

以下是 better_iflytek 插件的基本使用示例:

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

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

class MyApp extends StatefulWidget {
  [@override](/user/override)
  _MyAppState createState() => _MyAppState();
}

class _MyAppState extends State<MyApp> {
  PermissionStatus? permissionStatus;

  StreamSubscription? _subscription;

  BetterIflytek? _iflytek;

  String? onResult;

  AudioPlayer audioPlayer = AudioPlayer();

  [@override](/user/override)
  void initState() {
    super.initState();

    _iflytek = BetterIflytek();
    _iflytek?.initSDK('appid=YOUR_APP_ID');

    Future.microtask(() async {
      PermissionStatus permissionStatus = await Permission.microphone.status;
      setState(() {
        this.permissionStatus = permissionStatus;
      });
    });
  }

  [@override](/user/override)
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Scaffold(
        appBar: AppBar(
          title: const Text('Plugin example app'),
        ),
        body: Center(
          child: Column(
            mainAxisSize: MainAxisSize.min,
            children: [
              Offstage(
                offstage: permissionStatus == PermissionStatus.granted,
                child: CupertinoButton(
                  child: Text("请求麦克风权限"),
                  onPressed: () async {
                    final value = await Permission.microphone.request();
                    if (value == PermissionStatus.permanentlyDenied || value == PermissionStatus.restricted) {
                      openAppSettings();
                    }

                    setState(() {
                      permissionStatus = value;
                    });
                  },
                ),
              ),
              CupertinoButton(
                child: Text("开始"),
                onPressed: () {
                  processEvaluatingResult();
                  _iflytek?.startEvaluating("[word]apple");
                },
              ),
              CupertinoButton(
                child: Text("停止"),
                onPressed: () {
                  _iflytek?.stopEvaluating();
                },
              ),
              CupertinoButton(
                child: Text("清除"),
                onPressed: () {
                  setState(() {
                    onResult = "";
                  });
                },
              ),
              Text(onResult ?? ""),
            ],
          ),
        ),
      ),
    );
  }

  void processEvaluatingResult() async {
    _subscription?.cancel();
    _subscription = _iflytek?.getStartEvaluatingStream().listen((event) async {
      if (event.item1 == BetterIflytekEvent.OnResult) {
        setState(() {
          onResult = event.item2.toString();
        });

        final path = await _iflytek?.audioPath();
        if (path != null) {
          audioPlayer.setFilePath(path);
          audioPlayer.play();
        }
      }
    });
  }

  [@override](/user/override)
  void dispose() {
    _iflytek?.dispose();
    _subscription?.cancel();
    super.dispose();
  }
}

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

1 回复

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


better_iflytek 是一个 Flutter 插件,用于与科大讯飞(iFlytek)的语音识别服务进行集成。通过这个插件,你可以在 Flutter 应用中实现语音转文字的功能。以下是使用 better_iflytek 插件的基本步骤:

1. 添加依赖

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

dependencies:
  flutter:
    sdk: flutter
  better_iflytek: ^latest_version

然后运行 flutter pub get 来安装依赖。

2. 初始化插件

在使用插件之前,你需要初始化它。通常,你可以在 main.dart 中的 main 函数中进行初始化:

import 'package:better_iflytek/better_iflytek.dart';

void main() async {
  WidgetsFlutterBinding.ensureInitialized();
  await BetterIflytek.init(
    appId: 'your_app_id', // 替换为你的科大讯飞 App ID
  );
  runApp(MyApp());
}

3. 请求权限

语音识别需要麦克风权限,你需要在应用中请求相应的权限。可以使用 permission_handler 插件来请求权限:

dependencies:
  permission_handler: ^latest_version

然后在代码中请求权限:

import 'package:permission_handler/permission_handler.dart';

Future<void> requestPermissions() async {
  var status = await Permission.microphone.status;
  if (!status.isGranted) {
    await Permission.microphone.request();
  }
}

4. 使用语音识别功能

你可以使用 BetterIflytek 类中的方法来启动和停止语音识别:

import 'package:better_iflytek/better_iflytek.dart';

class MyApp extends StatefulWidget {
  [@override](/user/override)
  _MyAppState createState() => _MyAppState();
}

class _MyAppState extends State<MyApp> {
  String _recognizedText = '';

  Future<void> startRecognizing() async {
    await BetterIflytek.startListening(
      onResult: (String result) {
        setState(() {
          _recognizedText = result;
        });
      },
      onError: (String error) {
        print('Error: $error');
      },
    );
  }

  Future<void> stopRecognizing() async {
    await BetterIflytek.stopListening();
  }

  [@override](/user/override)
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Scaffold(
        appBar: AppBar(
          title: Text('Speech Recognition'),
        ),
        body: Center(
          child: Column(
            mainAxisAlignment: MainAxisAlignment.center,
            children: [
              Text(_recognizedText),
              ElevatedButton(
                onPressed: startRecognizing,
                child: Text('Start Listening'),
              ),
              ElevatedButton(
                onPressed: stopRecognizing,
                child: Text('Stop Listening'),
              ),
            ],
          ),
        ),
      ),
    );
  }
}

5. 处理识别结果

startListening 方法中,你可以通过 onResult 回调来处理识别结果。识别结果会以字符串形式返回。

6. 停止识别

当你不再需要识别语音时,可以调用 stopListening 方法来停止识别。

7. 处理错误

startListening 方法中,你可以通过 onError 回调来处理识别过程中可能出现的错误。

8. 释放资源

在应用退出时,建议释放插件占用的资源:

[@override](/user/override)
void dispose() {
  BetterIflytek.dispose();
  super.dispose();
}
回到顶部