Flutter语音识别插件azure_stt的使用
Flutter语音识别插件azure_stt的使用
获取开始
这个项目是一个新的Flutter项目,旨在作为一个插件包的基础。它包含特定的包,这些包包括Android和/或iOS平台的具体实现代码。
对于如何开始Flutter开发的帮助,请查看在线文档,其中提供了教程、示例、移动开发指导以及完整的API参考。
使用说明
本示例展示了如何使用azure_stt
插件来实现语音识别功能。以下是完整的代码示例及说明。
示例代码
import 'dart:ffi';
import 'package:azure_stt/azure_continuous_recognition_callback.dart';
import 'package:azure_stt/azure_conversation_transcriber_callback.dart';
import 'package:flutter/material.dart';
import 'dart:async';
import 'package:flutter/services.dart';
import 'package:azure_stt/azure_stt.dart';
import 'package:fluttertoast/fluttertoast.dart';
void main() {
runApp(const MyApp());
}
class MyApp extends StatefulWidget {
const MyApp({super.key});
[@override](/user/override)
State<MyApp> createState() => _MyAppState();
}
class _MyAppState extends State<MyApp>
implements
AzureContinuousRecognitionCallback,
AzureConversationTranscriberCallback {
String _platformVersion = 'Unknown'; // 平台版本
String _result = ""; // 当前识别结果
String subscriptionKey = "subscriptionKey"; // Azure订阅密钥
String region = "region"; // Azure区域
String translatorKey = "translatorKey"; // 翻译服务密钥
String translatorRegion = "translatorRegion"; // 翻译服务区域
bool recording = false; // 是否正在录音
final _azureSttPlugin = AzureStt(); // 插件实例
List<String> texts = List.empty(growable: true); // 保存转录文本
[@override](/user/override)
void initState() {
super.initState();
initPlatformState();
}
// 初始化插件状态
Future<void> initPlatformState() async {
String platformVersion;
try {
_azureSttPlugin.initAzureTranslatorConfig(translatorKey, translatorRegion);
_azureSttPlugin.setAzureContinuousRecognitionCallback(this);
_azureSttPlugin.setAzureConversationTranscriberCallback(this);
platformVersion = await _azureSttPlugin.getPlatformVersion() ??
'Unknown platform version';
} on PlatformException {
platformVersion = 'Failed to get platform version.';
}
if (!mounted) return;
setState(() {
_platformVersion = platformVersion;
});
}
[@override](/user/override)
Widget build(BuildContext context) {
return MaterialApp(
home: Scaffold(
appBar: AppBar(
title: const Text('Azure STT 插件示例'),
),
body: Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
Text('运行在: $_platformVersion\n'), // 显示平台版本
TextButton(
onPressed: () async {
_azureSttPlugin.initAzureConfig(subscriptionKey, region);
var result = await _azureSttPlugin.startConversation(
"zh-CN", // 目标语言
false, // 是否自动检测语言
samplerRate: 16000, // 采样率
bitRate: 16, // 位宽
channel: 1, // 声道数
autoTranslate: true, // 是否自动翻译
fromLang: "en", // 源语言
toLang: "zh-CN", // 目标语言
);
setState(() {
_result = result ?? "";
});
var buffer = await rootBundle.load("assets/katiesteve.wav"); // 加载音频文件
var total = buffer.lengthInBytes;
var l = 1024;
var offset = 0;
while (offset < total) {
var r = (l + offset) <= total ? l : (total - offset);
Uint8List list = buffer.buffer.asUint8List(offset, r);
offset += r;
await _azureSttPlugin.writeAudioBuffer(list); // 分块写入音频数据
}
},
child: Text("开始录音"),
),
TextButton(
onPressed: () async {
setState(() {
_result = "";
texts.clear();
recording = false;
});
var result = await _azureSttPlugin.stopConversation(); // 停止录音
},
child: Text("停止录音"),
),
TextButton(
onPressed: () async {
var result = await _azureSttPlugin.translate("你好呀", "", "en"); // 测试翻译
setState(() {
_result = result ?? "";
});
},
child: Text("测试翻译"),
),
Text('语音录制中: $recording\n'), // 显示录制状态
...texts.map((e) => Text('$e\n')), // 显示转录文本
Text('当前识别结果: $_result\n'), // 显示当前识别结果
],
),
),
);
}
// 回调方法
[@override](/user/override)
void onCanceledEvent(msg) {
_azureSttPlugin.stopConversation(); // 停止录音
Fluttertoast.showToast(
msg: "ErrorCode:${msg["errorCode"]},ErrorDetails:${msg["errorDetails"]},Reason:${msg["reason"]}", // 显示错误信息
toastLength: Toast.LENGTH_LONG,
gravity: ToastGravity.CENTER,
timeInSecForIosWeb: 1,
backgroundColor: Colors.red,
textColor: Colors.white,
fontSize: 16.0);
}
[@override](/user/override)
void onRecognizedEvent(msg) {
print(msg); // 打印识别结果
}
[@override](/user/override)
void onRecognizingEvent(msg) {
setState(() {
_result = msg; // 更新当前识别结果
});
}
[@override](/user/override)
void onSessionStartedEvent(msg) {
print(msg);
setState(() {
recording = true; // 开始录音
});
}
[@override](/user/override)
void onSessionStoppedEvent(msg) {
print(msg);
setState(() {
recording = false; // 停止录音
});
}
[@override](/user/override)
void onSpeechEndDetectedEvent(msg) {
print("当前对话结束了"); // 对话结束
}
[@override](/user/override)
void onSpeechStartDetectedEvent(msg) {
print("当前对话开始了"); // 对话开始
}
[@override](/user/override)
void onTranscribedEvent(String speakerId, String srcText, String transText,
int transType, bool transSuccess, int beginTime, int endTime, int transTime) {
setState(() {
texts.add("${speakerId}~${beginTime}-${endTime}:${transText}"); // 添加转录文本
});
}
[@override](/user/override)
void onTranscribingEvent(String speakerId, String srcText, String transText,
int transType, bool transSuccess, int beginTime, int endTime, int transTime) {
setState(() {
_result = "${speakerId}~${beginTime}-${endTime}:${transText}"; // 更新实时转录结果
});
}
}
更多关于Flutter语音识别插件azure_stt的使用的实战教程也可以访问 https://www.itying.com/category-92-b0.html
更多关于Flutter语音识别插件azure_stt的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html
azure_stt
是一个用于在 Flutter 应用中集成 Azure 语音识别服务的插件。它允许你将语音转换为文本,适用于需要语音输入功能的应用程序。以下是如何在 Flutter 项目中使用 azure_stt
插件的基本步骤。
1. 添加依赖
首先,你需要在项目的 pubspec.yaml
文件中添加 azure_stt
插件的依赖。打开 pubspec.yaml
文件并添加以下内容:
dependencies:
flutter:
sdk: flutter
azure_stt: ^0.0.1 # 请确保使用最新的版本号
然后运行 flutter pub get
来获取依赖。
2. 获取 Azure 语音服务密钥和区域
在使用 azure_stt
插件之前,你需要一个 Azure 语音服务的订阅密钥和区域。你可以在 Azure 门户中创建一个语音服务资源,并获取这些信息。
3. 初始化插件
在你的 Dart 代码中,首先导入 azure_stt
插件,然后使用你的 Azure 订阅密钥和区域初始化插件。
import 'package:azure_stt/azure_stt.dart';
void initializeAzureSTT() async {
String subscriptionKey = 'YOUR_AZURE_SUBSCRIPTION_KEY';
String region = 'YOUR_AZURE_REGION'; // 例如:'westus'
AzureSTT azureSTT = AzureSTT();
await azureSTT.initialize(subscriptionKey: subscriptionKey, region: region);
}
4. 开始语音识别
你可以使用 startRecognition
方法来开始语音识别。这个方法会返回一个 Stream
,你可以监听这个 Stream
来获取识别结果。
void startRecognition(AzureSTT azureSTT) {
azureSTT.startRecognition().listen((result) {
print('识别结果: $result');
}).onError((error) {
print('识别错误: $error');
});
}
5. 停止语音识别
当你想要停止语音识别时,可以调用 stopRecognition
方法。
void stopRecognition(AzureSTT azureSTT) {
azureSTT.stopRecognition();
}
6. 完整示例
以下是一个完整的示例,展示了如何在 Flutter 应用中使用 azure_stt
插件进行语音识别。
import 'package:flutter/material.dart';
import 'package:azure_stt/azure_stt.dart';
void main() {
runApp(MyApp());
}
class MyApp extends StatefulWidget {
[@override](/user/override)
_MyAppState createState() => _MyAppState();
}
class _MyAppState extends State<MyApp> {
AzureSTT _azureSTT;
String _recognizedText = '';
[@override](/user/override)
void initState() {
super.initState();
initializeAzureSTT();
}
void initializeAzureSTT() async {
_azureSTT = AzureSTT();
await _azureSTT.initialize(
subscriptionKey: 'YOUR_AZURE_SUBSCRIPTION_KEY',
region: 'YOUR_AZURE_REGION',
);
}
void startRecognition() {
_azureSTT.startRecognition().listen((result) {
setState(() {
_recognizedText = result;
});
}).onError((error) {
print('识别错误: $error');
});
}
void stopRecognition() {
_azureSTT.stopRecognition();
}
[@override](/user/override)
Widget build(BuildContext context) {
return MaterialApp(
home: Scaffold(
appBar: AppBar(
title: Text('Azure STT 示例'),
),
body: Center(
child: Column(
mainAxisAlignment: MainAxisAlignment.center,
children: <Widget>[
Text('识别结果: $_recognizedText'),
SizedBox(height: 20),
ElevatedButton(
onPressed: startRecognition,
child: Text('开始识别'),
),
SizedBox(height: 20),
ElevatedButton(
onPressed: stopRecognition,
child: Text('停止识别'),
),
],
),
),
),
);
}
}