Flutter语音识别插件vais_speech的使用
Flutter语音识别插件vais_speech的使用
特性
- 流式识别(最多1分钟)
- 离线录音识别(最多1小时)
安装
在你的 pubspec.yaml
文件中添加以下依赖:
dependencies:
vais_speech: [Current version]
如何使用?
VAIS Speech 分为两个部分:
- 录制音频(支持离线和流式)
- 上传音频并获取文本
开始前
Android:
在 AndroidManifest.xml
中设置录音相关的权限:
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.RECORD_AUDIO" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.MODIFY_AUDIO_SETTINGS"/>
<uses-permission android:name="android.permission.FOREGROUND_SERVICE"/>
添加一个服务到应用中:
<service android:name="tsyliveaudiorecord.live_audio_record.AudioRecordService"/>
iOS:
在 Info.plist
中设置相同的权限:
<key>NSAppleMusicUsageDescription</key>
<string>App need to use music because of retrieving your need uploading file.</string>
<key>UIBackgroundModes</key>
<array>
<string>audio</string>
<string>fetch</string>
</array>
Flutter端:
初始化VAIS实例以使用:
final vaisSpeech = VaisSpeech('<YOUR_TOKEN>');
录制音频
VAIS Speech 提供了两种模式来使用:
- 离线模式(默认)
- 流式模式
步骤1: 获取VAIS Speech音频并初始化
final vaisSpeechAudio = vaisSpeech.vaisSpeechAudio; // 获取VAIS Speech音频
await vaisSpeechAudio.init(...); // 初始化它
.init()
函数的更多细节:
函数 | 属性 |
---|---|
Future init(String path, {AudioFormat audioFormat, int sampleRate = 16000, RecordMode recordMode = RecordMode.Offline}) | path : 录音路径 - recordMode : 录音模式 |
步骤2: 添加监听器以观察录制状态
此方法应在开始之前调用。
vaisSpeechAudio.addListener(listener);
addListener()
函数的更多细节:
函数 | 属性 |
---|---|
addListener(VaisSpeechCallback listener) | 查看更多的 VaisSpeechCallback |
VaisSpeechCallback | 包括三个方法: onGeneratedSpeechText / onDurationChanged / onConnectionChanged |
onGeneratedSpeechText
: 当有文本被转换时触发(仅限流式模式)onConnectionChanged
: 当与我们的服务连接关闭时触发(仅限流式模式)onDurationChanged
: 录制的持续时间(例如用于显示录制时长)
步骤3: 开始录制
await vaisSpeechAudio.start();
步骤4: 暂停录制(仅限离线模式)
尝试在流式模式下调用此方法将抛出异常。
await vaisSpeechAudio.pause();
步骤5: 恢复录制(仅限离线模式)
尝试在流式模式下调用此方法将抛出异常。
await vaisSpeechAudio.resume();
步骤6: 停止录制
await vaisSpeechAudio.stop();
上传录制的音频
录制完成后,调用 .startAsr()
上传本地音频。此函数将返回一个 AudioId
。
await vaisSpeechAudio.startAsr(...);
.startAsr()
函数的更多细节:
函数 | 属性 |
---|---|
Future | path : 你的本地音频文件路径 - finalName (可选): 自定义音频名称 |
跟踪录制音频的状态
var audioStatus = await vaisSpeechAudio.getProgress(...);
.getProgress()
函数的更多细节:
函数 | 属性 |
---|---|
Future | audio : 上传后的音频ID。这将返回一个 AudioStatus 模型 |
AudioStatus | 包括: CREATED, QUEUED, PROCESSING, DONE, ERROR |
获取录制音频的文本
final transcript = await vaisSpeechAudio.getTranscript()..data;
.getTranscript()
函数的更多细节:
函数 | 属性 |
---|---|
Future | audio : 上传后的音频ID。这将返回一个 TranscriptResponse 模型,你应该使用 .data 来获取文本列表 |
示例代码
以下是完整的示例代码:
import 'package:flutter/material.dart';
import 'dart:async';
import 'package:flutter/services.dart';
import 'package:toast/toast.dart';
import 'package:vais_speech/model/lyric/lyric.dart';
import 'package:vais_speech/vais_speech.dart';
import 'package:vais_speech_example/record.dart';
void main() {
return runApp(MyApp());
}
class MyApp extends StatefulWidget {
const MyApp({Key key,}) : super(key: key);
[@override](/user/override)
_MyAppState createState() => _MyAppState();
}
class _MyAppState extends State<MyApp> {
final navigationKey = GlobalKey<NavigatorState>();
[@override](/user/override)
Widget build(BuildContext context) {
final mContext = context;
return MaterialApp(
debugShowCheckedModeBanner: false,
title: 'Voice Recognition',
navigatorKey: navigationKey,
initialRoute: 'record',
routes: {
'record': (_) => RecordScreen(),
},
);
}
}
更多关于Flutter语音识别插件vais_speech的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html
更多关于Flutter语音识别插件vais_speech的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html
当然,以下是一个关于如何在Flutter项目中使用vais_speech
插件进行语音识别的示例代码。vais_speech
插件允许你轻松地在Flutter应用中实现语音识别功能。
首先,确保你已经在pubspec.yaml
文件中添加了vais_speech
依赖:
dependencies:
flutter:
sdk: flutter
vais_speech: ^最新版本号 # 请替换为实际的最新版本号
然后,运行flutter pub get
来安装依赖。
接下来,你可以在你的Flutter应用中使用vais_speech
插件。以下是一个简单的示例代码,展示了如何使用该插件进行语音识别:
import 'package:flutter/material.dart';
import 'package:vais_speech/vais_speech.dart';
void main() {
runApp(MyApp());
}
class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return MaterialApp(
title: 'Flutter Speech Recognition',
theme: ThemeData(
primarySwatch: Colors.blue,
),
home: SpeechRecognitionScreen(),
);
}
}
class SpeechRecognitionScreen extends StatefulWidget {
@override
_SpeechRecognitionScreenState createState() => _SpeechRecognitionScreenState();
}
class _SpeechRecognitionScreenState extends State<SpeechRecognitionScreen> {
String _recognizedText = '';
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text('Speech Recognition Demo'),
),
body: Center(
child: Column(
mainAxisAlignment: MainAxisAlignment.center,
children: <Widget>[
Text(
'Recognized Text:',
style: TextStyle(fontSize: 20),
),
SizedBox(height: 10),
Text(
_recognizedText,
style: TextStyle(fontSize: 24, color: Colors.black),
textAlign: TextAlign.center,
),
SizedBox(height: 20),
ElevatedButton(
onPressed: _startListening,
child: Text('Start Listening'),
),
],
),
),
);
}
Future<void> _startListening() async {
VaisSpeech vaisSpeech = VaisSpeech();
// 检查是否有语音识别权限
bool hasPermission = await vaisSpeech.hasPermission();
if (!hasPermission) {
bool requestPermission = await vaisSpeech.requestPermission();
if (!requestPermission) {
// 处理权限被拒绝的情况
_recognizedText = 'Permission Denied';
setState(() {});
return;
}
}
// 开始监听语音
vaisSpeech.setRecognitionListener(
onResult: (String result) {
setState(() {
_recognizedText = result;
});
},
onError: (String errorMessage) {
setState(() {
_recognizedText = 'Error: $errorMessage';
});
},
onPartialResult: (String partialResult) {
// 实时显示部分识别结果(可选)
setState(() {
_recognizedText = partialResult;
});
},
onVolumeChanged: (double volume) {
// 处理音量变化(可选)
print('Volume: $volume');
},
onStatusChanged: (String status, Map<String, dynamic> extras) {
// 处理状态变化(可选)
print('Status: $status, Extras: $extras');
},
);
// 开始语音识别
bool isListening = await vaisSpeech.listen(
locale: 'zh_CN', // 设置识别语言,例如中文简体
prompt: '请说话', // 提示用户开始说话(可选)
);
if (isListening) {
// 停止监听(示例中未立即停止,但你可以根据需要调用 vaisSpeech.stopListening())
// await vaisSpeech.stopListening();
} else {
// 处理启动监听失败的情况
_recognizedText = 'Failed to start listening';
setState(() {});
}
}
}
在这个示例中,我们创建了一个简单的Flutter应用,其中包含一个按钮用于开始语音识别,以及一个文本显示区用于显示识别到的文本。vais_speech
插件提供了各种回调方法,用于处理识别结果、错误、部分结果、音量变化和状态变化。
请确保在实际项目中处理权限请求的结果,并根据需要调整代码以适应你的具体需求。