Flutter文本转语音插件flutter_azure_tts的使用
Flutter文本转语音插件flutter_azure_tts的使用
Flutter实现Microsoft Azure Cognitive Text-To-Speech API,可以将文本转换为语音。下面我们将介绍如何在Flutter项目中使用flutter_azure_tts
插件。
开始使用
初始化框架
首先,需要初始化插件,并提供你的订阅密钥和区域。你还可以选择启用日志记录功能以便调试。
import 'package:flutter_azure_tts/flutter_azure_tts.dart';
void initializeAzureTTS() async {
await FlutterAzureTts.init(
subscriptionKey: "YOUR SUBSCRIPTION KEY",
region: "YOUR REGION",
withLogs: true); // enable logs
}
获取可用的语音列表
接下来,获取所有可用的语音列表,并选择一个适合你需求的语音。
Future<void> getAvailableVoices() async {
final voicesResponse = await FlutterAzureTts.getAvailableVoices();
// 列出所有可用的语音
print("${voicesResponse.voices}");
// 选择一个英语神经语音
final voice = voicesResponse.voices
.where((element) => element.locale.startsWith("en-"))
.toList(growable: false).first;
print("Selected Voice: $voice");
}
请求音频文件
选定语音后,可以生成一段文本对应的音频文件。
Future<void> generateAudio(String text, dynamic voice) async {
TtsParams params = TtsParams(
voice: voice,
audioFormat: AudioOutputFormat.audio16khz32kBitrateMonoMp3,
rate: 1.5, // 可选语速,默认值为1.0
text: text);
final ttsResponse = await FlutterAzureTts.getTts(params);
// 获取音频字节数据
final audioBytes = ttsResponse.audio.buffer.asByteData(); // 你可以将这些字节保存到文件以备后用
print("Audio bytes generated successfully.");
}
使用语音风格和角色(可选)
对于支持风格和角色的语音,你可以指定一个风格或角色来增强语音效果。
Future<void> generateStyledAudio(String text, dynamic voice) async {
TtsParams params = TtsParams(
voice: voice,
audioFormat: AudioOutputFormat.audio16khz32kBitrateMonoMp3,
text: text,
role: VoiceRole.SeniorMale,
style: StyleSsml(
style: VoiceStyle.cheerful,
styleDegree: 1.5), // 可选强度,范围从0.01到2.0
);
final ttsResponse = await FlutterAzureTts.getTts(params);
final audioBytes = ttsResponse.audio.buffer.asByteData();
print("Styled Audio bytes generated successfully.");
}
完整示例
以下是一个完整的示例,展示了如何初始化、获取语音列表并生成音频:
import 'package:flutter_azure_tts/flutter_azure_tts.dart';
import 'package:flutter_azure_tts/src/ssml/style_ssml.dart';
void main() async {
try {
// 初始化配置
await FlutterAzureTts.init(
subscriptionKey: "YOUR SUBSCRIPTION KEY",
region: "YOUR REGION",
withLogs: true,
);
// 获取可用的语音
final voicesResponse = await FlutterAzureTts.getAvailableVoices();
final voices = voicesResponse.voices;
// 打印所有可用的语音
print("$voices");
// 选择一个支持风格和角色的英语神经语音
final voice = voicesResponse.voices
.where((element) =>
element.locale.startsWith("en-") &&
element.roles.isNotEmpty &&
element.styles.isNotEmpty)
.toList(growable: false)
.first;
// 生成文本对应的音频
final text = "Microsoft Speech Service Text-to-Speech API is awesome";
TtsParams params = TtsParams(
voice: voice,
audioFormat: AudioOutputFormat.audio16khz32kBitrateMonoMp3,
rate: 1.5,
style: StyleSsml(style: voice.styles.first, styleDegree: 1.5),
role: VoiceRole.OlderAdultMale,
text: text);
final ttsResponse = await FlutterAzureTts.getTts(params);
// 获取音频字节
final audioBytes = ttsResponse.audio.buffer.asByteData();
print(
"Audio size: ${(audioBytes.lengthInBytes / (1024 * 1024)).toStringAsPrecision(2)} Mb");
} catch (e) {
print("Something went wrong: $e");
}
}
通过上述步骤,你应该能够成功地在Flutter应用中集成文本转语音功能。确保替换"YOUR SUBSCRIPTION KEY"和"YOUR REGION"为你自己的Azure订阅密钥和区域。
更多关于Flutter文本转语音插件flutter_azure_tts的使用的实战教程也可以访问 https://www.itying.com/category-92-b0.html
更多关于Flutter文本转语音插件flutter_azure_tts的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html
当然,下面是一个关于如何使用 flutter_azure_tts
插件在 Flutter 应用中实现文本转语音(Text-to-Speech, TTS)功能的代码示例。flutter_azure_tts
是一个 Flutter 插件,它允许你使用 Microsoft Azure 的文本转语音服务。
首先,确保你已经在 pubspec.yaml
文件中添加了 flutter_azure_tts
依赖:
dependencies:
flutter:
sdk: flutter
flutter_azure_tts: ^最新版本号 # 请替换为最新的版本号
然后,运行 flutter pub get
来安装依赖。
接下来,配置 Azure 认知服务。你需要一个 Azure 订阅和配置好的 Azure 认知服务资源,以获取订阅密钥和服务区域。
以下是一个完整的 Flutter 应用示例,展示如何使用 flutter_azure_tts
:
import 'package:flutter/material.dart';
import 'package:flutter_azure_tts/flutter_azure_tts.dart';
void main() {
runApp(MyApp());
}
class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return MaterialApp(
title: 'Flutter Azure TTS Demo',
theme: ThemeData(
primarySwatch: Colors.blue,
),
home: AzureTTSDemo(),
);
}
}
class AzureTTSDemo extends StatefulWidget {
@override
_AzureTTSDemoState createState() => _AzureTTSDemoState();
}
class _AzureTTSDemoState extends State<AzureTTSDemo> {
final AzureTTS azureTTS = AzureTTS();
String subscriptionKey = '你的Azure订阅密钥';
String serviceRegion = '你的服务区域'; // 例如 'westus'
@override
void initState() {
super.initState();
// 初始化 Azure TTS 客户端
azureTTS.initialize(subscriptionKey, serviceRegion);
}
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text('Flutter Azure TTS Demo'),
),
body: Center(
child: Column(
mainAxisAlignment: MainAxisAlignment.center,
children: <Widget>[
Text(
'输入你想转换的文本:',
),
TextField(
decoration: InputDecoration(border: OutlineInputBorder()),
onChanged: (text) {
// 当文本改变时,调用合成语音函数
_synthesizeSpeech(text);
},
),
],
),
),
);
}
Future<void> _synthesizeSpeech(String text) async {
try {
// 调用合成语音方法
var result = await azureTTS.synthesizeSpeech(text, language: 'zh-CN', gender: 'Female', voiceName: 'Microsoft Server Speech Text to Speech Voice (zh-CN, HuihuiNeural)');
// 播放合成的音频
if (result != null && result.isNotEmpty) {
final byteData = Uint8List.fromList(result);
await playAudio(byteData);
}
} catch (e) {
print('Error synthesizing speech: $e');
}
}
Future<void> playAudio(Uint8List audioBytes) async {
final audioPlayer = AudioCache();
await audioPlayer.loadFromMemory(audioBytes);
audioPlayer.play();
}
}
注意事项
-
依赖音频播放:上面的代码示例使用了
audioplayers
包来播放音频。你需要在pubspec.yaml
中添加该依赖:dependencies: audioplayers: ^最新版本号 # 请替换为最新的版本号
-
错误处理:在生产环境中,请确保添加适当的错误处理逻辑,以处理网络错误、认证失败等情况。
-
Azure 配置:确保你替换了
subscriptionKey
和serviceRegion
为你自己的 Azure 认知服务配置。 -
音频权限:在 Android 和 iOS 上,你可能需要在
AndroidManifest.xml
和Info.plist
中添加相应的音频播放权限。
这个示例展示了基本的文本转语音功能,你可以根据需要进行扩展,例如添加更多的语言选项、不同的语音等。