Flutter AWS Polly 文本转语音插件aws_polly的使用
Flutter AWS Polly 文本转语音插件aws_polly的使用
介绍
aws_polly
是一个用于 Flutter 的插件,它封装了 AWS Polly 服务。AWS Polly 是一项云服务,可以将文本转换为逼真的语音。通过这个插件,你可以在 Flutter 应用中轻松实现文本转语音功能。
开始使用
1. 添加依赖
在 pubspec.yaml
文件中添加 aws_polly
依赖:
dependencies:
aws_polly: ^2.1.1
2. 配置 AWS 控制台
为了使用 AWS Polly,你需要在 AWS 控制台中创建一个身份池并配置权限。以下是具体步骤:
- 确保你已经拥有 AWS 账户。
- 登录到 Amazon Cognito 控制台。
- 点击“管理身份池”并创建一个新的身份池。
- 命名新的身份池,并确保勾选“启用未认证身份的访问”。
- 创建完成后,你会获得一个身份池 ID,格式类似于
us-east-1:xxxx-xxx-xxxxx
。 - 进入 IAM 控制台。
- 点击“角色”,找到新创建的身份池对应的
Unauth_Role
。 - 点击“附加策略”,搜索并附加
AmazonPollyReadOnlyAccess
策略。
3. 使用插件
导入包
在 Dart 文件中导入 aws_polly
包:
import 'package:aws_polly/aws_polly.dart';
初始化客户端
使用你的身份池 ID 和区域(默认为 USEast1
)初始化 AwsPolly
客户端:
final AwsPolly _awsPolly = AwsPolly.instance(
poolId: 'us-east-1:xxxx-xxx-xxxxx',
region: AWSRegionType.USEast1,
);
生成语音 URL
调用 getUrl()
方法生成一个包含语音文件的 URL:
final url = await _awsPolly.getUrl(
voiceId: AWSPolyVoiceId.nicole, // 选择语音类型
input: 'This is a sample text playing through Poly!', // 要转换的文本
);
示例代码
以下是一个完整的示例应用,展示了如何使用 aws_polly
插件将文本转换为语音并播放:
import 'package:flutter/material.dart';
import 'package:aws_polly/aws_polly.dart';
import 'package:just_audio/just_audio.dart';
void main() => runApp(MyApp());
class MyApp extends StatefulWidget {
[@override](/user/override)
_MyAppState createState() => _MyAppState();
}
class _MyAppState extends State<MyApp> {
String? _url;
final AwsPolly _awsPolly = AwsPolly.instance(
poolId: 'us-east-1:xxxx-xxx-xxxxx', // 替换为你的身份池 ID
region: AWSRegionType.USEast1, // 选择区域
);
// 加载语音 URL
void onLoadUrl() async {
setState(() => _url = null); // 清空当前 URL
final url = await _awsPolly.getUrl(
voiceId: AWSPolyVoiceId.nicole, // 选择语音类型
input: 'This is a sample text playing through Poly!', // 要转换的文本
);
setState(() => _url = url); // 更新状态
}
// 播放语音
void onPlay() async {
if (_url == null) return; // 如果没有 URL,则不播放
final player = AudioPlayer(); // 创建音频播放器
await player.setUrl(_url!); // 设置音频 URL
player.play(); // 播放音频
}
[@override](/user/override)
Widget build(BuildContext context) {
return MaterialApp(
home: Scaffold(
appBar: AppBar(
title: const Text('Flutter AWS Polly'),
),
body: SafeArea(
child: Column(
children: [
SizedBox(height: 8),
ElevatedButton(
child: Text('加载 URL'),
onPressed: onLoadUrl, // 点击按钮加载 URL
),
ElevatedButton(
child: Text('播放 URL'),
onPressed: onPlay, // 点击按钮播放语音
),
SizedBox(height: 8),
Container(
height: 1,
color: Theme.of(context).primaryColor,
),
Expanded(
child: ListView(
padding: const EdgeInsets.all(8),
children: <Widget>[
Text('URL: $_url'), // 显示生成的 URL
],
),
),
],
),
),
),
);
}
}
更多关于Flutter AWS Polly 文本转语音插件aws_polly的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html
更多关于Flutter AWS Polly 文本转语音插件aws_polly的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html
当然,下面是一个关于如何在Flutter项目中使用aws_polly
插件来实现文本转语音功能的代码示例。aws_polly
是一个Flutter插件,用于与AWS Polly服务集成,可以将文本转换为语音。
首先,确保你已经安装了aws_polly
插件。你可以通过在你的pubspec.yaml
文件中添加以下依赖项来安装它:
dependencies:
flutter:
sdk: flutter
aws_polly: ^x.y.z # 请替换为最新版本号
然后运行flutter pub get
来安装依赖。
接下来,你需要配置AWS Polly的访问权限。确保你的AWS凭证(访问密钥ID和秘密访问密钥)已经配置在AWS CLI中,或者你可以直接在代码中硬编码(不推荐这样做,最好使用环境变量或安全的密钥管理服务)。
以下是一个完整的示例代码,展示了如何使用aws_polly
插件将文本转换为语音并播放:
import 'package:flutter/material.dart';
import 'package:aws_polly/aws_polly.dart';
import 'package:flutter_sound/flutter_sound.dart';
void main() {
runApp(MyApp());
}
class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return MaterialApp(
home: Scaffold(
appBar: AppBar(
title: Text('AWS Polly Text to Speech Example'),
),
body: Center(
child: TextToSpeechButton(),
),
),
);
}
}
class TextToSpeechButton extends StatefulWidget {
@override
_TextToSpeechButtonState createState() => _TextToSpeechButtonState();
}
class _TextToSpeechButtonState extends State<TextToSpeechButton> {
final String textToConvert = "Hello, this is a text to speech conversion example using AWS Polly.";
late Polly polly;
late FlutterSound flutterSound;
@override
void initState() {
super.initState();
// 初始化Polly客户端
polly = Polly(
region: 'us-west-2', // AWS Polly服务的区域
accessKeyId: 'YOUR_ACCESS_KEY_ID',
secretAccessKey: 'YOUR_SECRET_ACCESS_KEY',
);
// 初始化FlutterSound,用于播放音频
flutterSound = FlutterSound();
flutterSound.openAudioSession().then((_) {
setState(() {});
});
}
@override
void dispose() {
flutterSound.closeAudioSession();
super.dispose();
}
void convertToSpeechAndPlay() async {
try {
// 使用Polly合成语音
var synthesizeSpeechResult = await polly.synthesizeSpeech(
text: textToConvert,
outputFormat: PollyOutputFormat.mp3,
voiceId: 'Joanna', // 你可以选择不同的语音ID
);
// 将结果保存到临时文件
var tempFilePath = (await getTemporaryDirectory()).path + '/temp_audio.mp3';
await File(tempFilePath).writeAsBytes(synthesizeSpeechResult.audioStream as Uint8List);
// 使用FlutterSound播放音频
await flutterSound.startPlayerFromUrl(
tempFilePath,
isLocal: true,
showNotification: true,
headsetDisconnectBehavior: DisconnectBehavior.pausePlayer,
);
} catch (e) {
print('Error: $e');
}
}
@override
Widget build(BuildContext context) {
return ElevatedButton(
onPressed: convertToSpeechAndPlay,
child: Text('Convert Text to Speech'),
);
}
}
注意事项:
-
AWS凭证:在代码中硬编码AWS凭证是不安全的。建议使用环境变量或AWS IAM角色(如果你在EC2或其他AWS服务上运行应用)来管理凭证。
-
音频权限:确保你的应用有访问设备音频的权限。在iOS上,你需要在
Info.plist
中添加相应的权限请求。 -
依赖项:
flutter_sound
插件用于播放音频。你需要同时添加flutter_sound
到你的pubspec.yaml
文件中。 -
错误处理:在实际应用中,应该添加更多的错误处理和用户反馈机制。
希望这个示例能帮助你在Flutter项目中成功使用AWS Polly进行文本转语音!