Flutter文本转语音插件cloud_text_to_speech的使用
Flutter文本转语音插件cloud_text_to_speech的使用
Cloud Text-To-Speech 是一个用于 Google、Microsoft 和 Amazon 文本转语音(TTS)服务的 Flutter 插件。它提供了统一的接口来访问这些服务,并支持多种配置选项。
主要特性
- 支持 Google Cloud TTS、Microsoft Azure Cognitive TTS 和 Amazon Polly。
- 提供通用接口和独立接口以充分利用每个提供商的功能。
- 支持 SSML 输入的清理,确保只发送受支持的 SSML 元素。
- 提供本地语言和英文的语言选择器。
- 可配置输出格式、速率和音调。
使用示例
初始化配置
通用单个提供商
import 'package:cloud_text_to_speech/cloud_text_to_speech.dart';
void main() async {
// 初始化配置
await TtsUniversal.init(
provider: TtsProviders.amazon,
googleParams: InitParamsGoogle(apiKey: 'API-KEY'),
microsoftParams: InitParamsMicrosoft(subscriptionKey: 'SUBSCRIPTION-KEY', region: 'eastus'),
amazonParams: InitParamsAmazon(keyId: 'KEY-ID', accessKey: 'ACCESS-KEY', region: 'us-east-1'),
withLogs: true,
);
// 更换提供商
TtsUniversal.setProvider(TtsProviders.microsoft);
// 获取所有可用的声音
final voicesResponse = await TtsUniversal.getVoices();
final voices = voicesResponse.voices;
// 打印所有可用的声音
print(voices);
// 选择一个英语声音
final voice = voices.where((element) => element.locale.code.startsWith("en-")).toList(growable: false).first;
// 转换文本为语音并获取音频数据
const text = "Amazon, Microsoft and Google Text-to-Speech API are awesome";
final ttsParams = TtsParamsUniversal(
voice: voice,
audioFormat: AudioOutputFormatUniversal.mp3_64k,
text: text,
rate: 'slow',
pitch: 'default',
);
final ttsResponse = await TtsUniversal.convertTts(ttsParams);
final audioBytes = ttsResponse.audio.buffer.asByteData();
// 播放音频(需要额外的播放库,如 audioplayers)
}
使用特定提供商
import 'package:cloud_text_to_speech/cloud_text_to_speech.dart';
void main() async {
// 初始化 Google 配置
await TtsGoogle.init(
params: InitParamsGoogle(apiKey: "API-KEY"),
withLogs: true,
);
// 获取所有可用的声音
final voicesResponse = await TtsGoogle.getVoices();
final voices = voicesResponse.voices;
// 打印所有可用的声音
print(voices);
// 选择一个英语声音
final voice = voices.where((element) => element.locale.code.startsWith("en-")).toList(growable: false).first;
// 转换文本为语音并获取音频数据
final text = '<speak>Google<break time="2s"/> Speech Service Text-to-Speech API is awesome!</speak>';
final ttsParams = TtsParamsGoogle(
voice: voice,
audioFormat: AudioOutputFormatGoogle.mp3,
text: text,
rate: 'slow',
pitch: 'default',
);
final ttsResponse = await TtsGoogle.convertTts(ttsParams);
final audioBytes = ttsResponse.audio.buffer.asByteData();
// 播放音频(需要额外的播放库,如 audioplayers)
}
Microsoft
import 'package:cloud_text_to_speech/cloud_text_to_speech.dart';
void main() async {
// 初始化 Microsoft 配置
await TtsMicrosoft.init(
params: InitParamsMicrosoft(subscriptionKey: "SUBSCRIPTION-KEY", region: "eastus"),
withLogs: true,
);
// 获取所有可用的声音
final voicesResponse = await TtsMicrosoft.getVoices();
final voices = voicesResponse.voices;
// 打印所有可用的声音
print(voices);
// 选择一个英语声音
final voice = voices.where((element) => element.locale.code.startsWith("en-")).toList(growable: false).first;
// 转换文本为语音并获取音频数据
final text = '<speak>Microsoft<break time="2s"/> Speech Service Text-to-Speech API is awesome!</speak>';
final ttsParams = TtsParamsMicrosoft(
voice: voice,
audioFormat: AudioOutputFormatMicrosoft.audio48Khz192kBitrateMonoMp3,
text: text,
rate: 'slow',
pitch: 'default',
);
final ttsResponse = await TtsMicrosoft.convertTts(ttsParams);
final audioBytes = ttsResponse.audio.buffer.asByteData();
// 播放音频(需要额外的播放库,如 audioplayers)
}
Amazon
import 'package:cloud_text_to_speech/cloud_text_to_speech.dart';
void main() async {
// 初始化 Amazon 配置
await TtsAmazon.init(
params: InitParamsAmazon(keyId: 'KEY-ID', accessKey: 'ACCESS-KEY', region: 'us-east-1'),
withLogs: true,
);
// 获取所有可用的声音
final voicesResponse = await TtsAmazon.getVoices();
final voices = voicesResponse.voices;
// 打印所有可用的声音
print(voices);
// 选择一个英语声音
final voice = voices.where((element) => element.locale.code.startsWith("en-")).toList(growable: false).first;
// 转换文本为语音并获取音频数据
final text = '<speak>Amazon<break time="2s"/> Speech Service Text-to-Speech API is awesome!</speak>';
final ttsParams = TtsParamsAmazon(
voice: voice,
audioFormat: AudioOutputFormatAmazon.audio48Khz192kBitrateMonoMp3,
text: text,
rate: 'slow',
pitch: 'default',
);
final ttsResponse = await TtsAmazon.convertTts(ttsParams);
final audioBytes = ttsResponse.audio.buffer.asByteData();
// 播放音频(需要额外的播放库,如 audioplayers)
}
注意事项
- 保护 API 密钥:确保你的 API 密钥安全,避免从移动或 Web 应用中提取。
- Amazon Polly 在模拟器中的问题:有时在模拟器中使用 Amazon Polly 可能会遇到 403 错误。
- SSML/XML 处理:可以使用
xml
包来修复 SSML/XML 格式。 - 音频格式:所有提供商返回的音频格式是统一的
Uint8List
,可以用来播放或保存到文件。 - 音频播放库:推荐使用
audioplayers
或assets_audio_player
来播放音频。
希望这些示例代码能帮助你快速上手使用 cloud_text_to_speech
插件。如果有任何问题或需要进一步的帮助,请随时提问!
更多关于Flutter文本转语音插件cloud_text_to_speech的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html
更多关于Flutter文本转语音插件cloud_text_to_speech的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html
当然,以下是一个关于如何在Flutter项目中使用cloud_text_to_speech
插件的示例代码。这个插件允许你将文本转换为语音。首先,你需要确保你的Flutter项目已经设置好,并且已经添加了cloud_text_to_speech
依赖。
1. 添加依赖
在你的pubspec.yaml
文件中添加以下依赖:
dependencies:
flutter:
sdk: flutter
cloud_text_to_speech: ^x.y.z # 请替换为最新版本号
然后运行flutter pub get
来安装依赖。
2. 配置Android和iOS
对于Android,你可能需要在AndroidManifest.xml
中添加必要的权限,例如INTERNET
权限。通常,cloud_text_to_speech
插件会处理大部分配置,但检查文档以确保没有遗漏。
对于iOS,确保你的Info.plist
文件中有必要的配置,通常这个插件不需要额外的iOS特定配置。
3. 使用cloud_text_to_speech
插件
下面是一个简单的Flutter应用示例,展示如何使用cloud_text_to_speech
插件:
import 'package:flutter/material.dart';
import 'package:cloud_text_to_speech/cloud_text_to_speech.dart';
void main() {
runApp(MyApp());
}
class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return MaterialApp(
home: Scaffold(
appBar: AppBar(
title: Text('Flutter Text to Speech Example'),
),
body: Center(
child: TextToSpeechButton(),
),
),
);
}
}
class TextToSpeechButton extends StatefulWidget {
@override
_TextToSpeechButtonState createState() => _TextToSpeechButtonState();
}
class _TextToSpeechButtonState extends State<TextToSpeechButton> {
late CloudTextToSpeech _tts;
@override
void initState() {
super.initState();
_tts = CloudTextToSpeech();
}
@override
Widget build(BuildContext context) {
return ElevatedButton(
onPressed: () async {
String text = "Hello, this is a text to speech example.";
try {
await _tts.speak(text);
} catch (e) {
print("Error occurred: $e");
}
},
child: Text('Speak Text'),
);
}
}
4. 处理权限和错误
在实际应用中,你可能需要处理更多的错误和权限请求。例如,你可能需要检查并请求麦克风权限。虽然cloud_text_to_speech
插件本身不直接处理权限请求,但你可以结合permission_handler
等插件来实现这一点。
5. 运行应用
确保你的设备或模拟器已经连接,然后运行flutter run
来启动你的应用。点击按钮,你应该能听到设备朗读出指定的文本。
这个示例提供了一个基本的实现,你可以根据需要进行扩展,例如添加更多的语言支持、调整语速和音调等。请参考cloud_text_to_speech
的官方文档(假设该链接有效)以获取更多详细信息和高级用法。