Flutter语音处理插件speech_processing_xf的使用

Flutter语音处理插件speech_processing_xf的使用

该插件集成了讯飞语音识别和语音合成功能,支持Android和iOS平台。

官网注册

  1. 注册账号 请参阅注册讯飞账号以获取更多信息。

  2. 创建应用并获取AppID

  3. 分别下载Android和iOS端的SDK

Android端配置

  1. 在项目的android/app/main目录下新建Jnilibs目录,并将demo/libs下的arm64-v8a和armeabi-v7a两个目录拷贝进去。

  2. 添加用户权限 在工程 AndroidManifest.xml 文件中添加如下权限:

    <!-- 连接网络权限,用于执行云端语音能力 -->
    <uses-permission android:name="android.permission.INTERNET"/>
    <!-- 获取手机录音机使用权限,听写、识别、语义理解需要用到此权限 -->
    <uses-permission android:name="android.permission.RECORD_AUDIO"/>
    <!-- 读取网络信息状态 -->
    <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>
    <!-- 获取当前wifi状态 -->
    <uses-permission android:name="android.permission.ACCESS_WIFI_STATE"/>
    <!-- 允许程序改变网络连接状态 -->
    <uses-permission android:name="android.permission.CHANGE_NETWORK_STATE"/>
    <!-- 读取手机信息权限 -->
    <uses-permission android:name="android.permission.READ_PHONE_STATE"/>
    <!-- 读取联系人权限,上传联系人需要用到此权限 -->
    <uses-permission android:name="android.permission.READ_CONTACTS"/>
    <!-- 外存储写权限,构建语法需要用到此权限 -->
    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
    <!-- 外存储读权限,构建语法需要用到此权限 -->
    <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>
    <!-- 配置权限,用来记录应用配置信息 -->
    <uses-permission android:name="android.permission.WRITE_SETTINGS"/>
    <!-- 手机定位信息,用来为语义等功能提供定位,提供更精准的服务 -->
    <!-- 定位信息是敏感信息,可通过Setting.setLocationEnable(false)关闭定位请求 -->
    <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"/>
    <!-- 如需使用人脸识别,还要添加:摄像头权限,拍照需要用到 -->
    <uses-permission android:name="android.permission.CAMERA"/>
    
  3. 添加混淆 如需在打包或者生成APK的时候进行混淆,请在proguard.pro中添加如下代码:

    -keep class com.iflytek.**{*;}
    -keepattributes Signature
    

iOS端配置

  1. 在info.plist中添加以下权限

    <key>NSMicrophoneUsageDescription</key>
    <string></string>
    <key>NSLocationUsageDescription</key>
    <string></string>
    <key>NSLocationAlwaysUsageDescription</key>
    <string></string>
    <key>NSContactsUsageDescription</key>
    <string></string>
    

    注:建议真机测试。如果非要用模拟器,则使用Xcode打开项目。在Build Settings中找到Excluded Architectures,在debug中添加支持arm64架构。

添加依赖

pubspec.yaml 中添加依赖:

dependencies:
  speech_xf: ^1.2.0

使用

  1. 初始化

    void initSdk() async {
      await SpeechXf.init('这里是你在讯飞平台申请的appid');
    }
    
  2. 使用内置界面

    await SpeechXf.openNativeUIDialog(
      isDynamicCorrection: true,
      language: settingResult['language'],
      vadBos: settingResult['vadBos'],
      vadEos: settingResult['vadEos'],
      ptt: settingResult['ptt'],
    );
    
  3. 无界面语音识别

    await SpeechXf.startListening(
      isDynamicCorrection: false,
      language: settingResult['language'],
      vadBos: settingResult['vadBos'],
      vadEos: settingResult['vadEos'],
      ptt: settingResult['ptt'],
    );
    
  4. 停止

    await SpeechXf.stopListening();
    
  5. 取消

    await SpeechXf.cancelListening();
    
  6. 语音听写结果监听

    SpeechXf().onResult().listen((event) {
      if (event.error != null) {
        showToast(event.error!, position: ToastPosition.bottom);
      } else {
        if (event.result != null) {
          speechController.text = speechController.text + event.result!;
        }
        if (event.isLast == true) {
          showToast('结束说话...', position: ToastPosition.bottom);
        }
      }
    });
    
  7. 上传用户热词

    await SpeechXf.uploadUserWords(userWords);
    
  8. 音频流识别

    await SpeechXf.audioRecognizer('iattest.wav');
    
  9. 开始语音合成

    await SpeechXf.startSpeaking();
    
  10. 取消语音合成

    await SpeechXf.stopSpeaking();
    
  11. 暂停语音合成

    await SpeechXf.pauseSpeaking();
    
  12. 继续语音合成

    await SpeechXf.resumeSpeaking();
    
  13. 循环播放(在initState中)

    SpeechXf.onLoopSpeakingListener(
      onCompeleted: (onCompeleted) async {
        await startSpeaking();
      },
    );
    
  14. 销毁语音合成器

    SpeechXf.ttsDestroy();
    
  15. 销毁语音识别器

    SpeechXf.iatDestroy();
    
  16. 音量变化回调

    SpeechXf.onVolumeChanged(
      volume: (v) {
        showToast('当前音量:$v');
      },
      bytes: (bytes) {},
    );
    

示例代码

import 'package:flutter/material.dart';
import 'package:flutter/services.dart';
import 'package:oktoast/oktoast.dart';
import 'package:speech_xf_example/home_page.dart';

void main() {
  runApp(const MyApp());
  // 设置沉浸式状态栏,颜色透明
  SystemChrome.setEnabledSystemUIMode(SystemUiMode.manual, overlays: SystemUiOverlay.values);
  SystemUiOverlayStyle systemUiOverlayStyle = const SystemUiOverlayStyle(
    statusBarColor: Colors.transparent,
    statusBarBrightness: Brightness.light, // 白色图标
    systemNavigationBarColor: Colors.white,
  );
  SystemChrome.setSystemUIOverlayStyle(systemUiOverlayStyle);
}

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

  [@override](/user/override)
  Widget build(BuildContext context) {
    return OKToast(
      backgroundColor: const Color(0xFF3A3A3A),
      position: ToastPosition.center,
      radius: 8,
      textPadding: const EdgeInsets.symmetric(horizontal: 20, vertical: 14),
      child: MaterialApp(
        theme: ThemeData(useMaterial3: true),
        home: Scaffold(
          resizeToAvoidBottomInset: false,
          body: GestureDetector(
            onTap: () {
              FocusScopeNode currentFocus = FocusScope.of(context);
              if (!currentFocus.hasPrimaryFocus && currentFocus.focusedChild != null) {
                FocusManager.instance.primaryFocus?.unfocus();
              }
            },
            child: const HomePage(),
          ),
        ),
      ),
    );
  }
}

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

1 回复

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


speech_processing_xf 是一个用于语音处理的 Flutter 插件,通常用于语音识别、语音合成等任务。以下是如何在 Flutter 项目中使用 speech_processing_xf 插件的基本步骤:

1. 添加依赖

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

dependencies:
  flutter:
    sdk: flutter
  speech_processing_xf: ^1.0.0  # 请检查最新版本

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

2. 初始化插件

在你的 Dart 文件中导入插件并初始化它:

import 'package:speech_processing_xf/speech_processing_xf.dart';

SpeechProcessingXf speechProcessing = SpeechProcessingXf();

3. 配置 API 密钥(如果需要)

如果插件需要 API 密钥或其他配置,请按照插件的文档进行配置。例如:

speechProcessing.setApiKey("YOUR_API_KEY");

4. 语音识别

使用插件的语音识别功能来识别语音输入:

void startSpeechRecognition() async {
  try {
    String result = await speechProcessing.startListening();
    print("识别结果: $result");
  } catch (e) {
    print("识别失败: $e");
  }
}

5. 语音合成

使用插件的语音合成功能将文本转换为语音:

void startTextToSpeech(String text) async {
  try {
    await speechProcessing.speak(text);
    print("语音合成成功");
  } catch (e) {
    print("语音合成失败: $e");
  }
}

6. 处理权限

确保在 Android 和 iOS 上请求必要的权限。例如,在 Android 上,你需要在 AndroidManifest.xml 中添加以下权限:

<uses-permission android:name="android.permission.RECORD_AUDIO" />

在 iOS 上,你需要在 Info.plist 中添加以下权限:

<key>NSMicrophoneUsageDescription</key>
<string>我们需要访问麦克风以进行语音识别</string>

7. 处理回调

如果插件支持回调或事件监听,你可以注册回调来处理识别结果或合成进度:

speechProcessing.onRecognitionResult((String result) {
  print("识别结果: $result");
});

speechProcessing.onSynthesisComplete(() {
  print("语音合成完成");
});

8. 停止和释放资源

在使用完插件后,确保停止语音识别或合成并释放资源:

void stopSpeechRecognition() {
  speechProcessing.stopListening();
}

void stopTextToSpeech() {
  speechProcessing.stopSpeaking();
}

void dispose() {
  speechProcessing.dispose();
}
回到顶部