Flutter语音处理插件speech_processing_xf的使用
Flutter语音处理插件speech_processing_xf的使用
该插件集成了讯飞语音识别和语音合成功能,支持Android和iOS平台。
官网注册
-
注册账号 请参阅注册讯飞账号以获取更多信息。
-
创建应用并获取AppID
-
分别下载Android和iOS端的SDK
Android端配置
-
在项目的android/app/main目录下新建Jnilibs目录,并将demo/libs下的arm64-v8a和armeabi-v7a两个目录拷贝进去。
-
添加用户权限 在工程
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"/>
-
添加混淆 如需在打包或者生成APK的时候进行混淆,请在proguard.pro中添加如下代码:
-keep class com.iflytek.**{*;} -keepattributes Signature
iOS端配置
-
在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
使用
-
初始化
void initSdk() async { await SpeechXf.init('这里是你在讯飞平台申请的appid'); }
-
使用内置界面
await SpeechXf.openNativeUIDialog( isDynamicCorrection: true, language: settingResult['language'], vadBos: settingResult['vadBos'], vadEos: settingResult['vadEos'], ptt: settingResult['ptt'], );
-
无界面语音识别
await SpeechXf.startListening( isDynamicCorrection: false, language: settingResult['language'], vadBos: settingResult['vadBos'], vadEos: settingResult['vadEos'], ptt: settingResult['ptt'], );
-
停止
await SpeechXf.stopListening();
-
取消
await SpeechXf.cancelListening();
-
语音听写结果监听
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); } } });
-
上传用户热词
await SpeechXf.uploadUserWords(userWords);
-
音频流识别
await SpeechXf.audioRecognizer('iattest.wav');
-
开始语音合成
await SpeechXf.startSpeaking();
-
取消语音合成
await SpeechXf.stopSpeaking();
-
暂停语音合成
await SpeechXf.pauseSpeaking();
-
继续语音合成
await SpeechXf.resumeSpeaking();
-
循环播放(在initState中)
SpeechXf.onLoopSpeakingListener( onCompeleted: (onCompeleted) async { await startSpeaking(); }, );
-
销毁语音合成器
SpeechXf.ttsDestroy();
-
销毁语音识别器
SpeechXf.iatDestroy();
-
音量变化回调
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
更多关于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();
}