Flutter AWS Polly 文本转语音插件aws_polly的使用

发布于 1周前 作者 itying888 来自 Flutter

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 控制台中创建一个身份池并配置权限。以下是具体步骤:

  1. 确保你已经拥有 AWS 账户。
  2. 登录到 Amazon Cognito 控制台
  3. 点击“管理身份池”并创建一个新的身份池。
  4. 命名新的身份池,并确保勾选“启用未认证身份的访问”。
  5. 创建完成后,你会获得一个身份池 ID,格式类似于 us-east-1:xxxx-xxx-xxxxx
  6. 进入 IAM 控制台
  7. 点击“角色”,找到新创建的身份池对应的 Unauth_Role
  8. 点击“附加策略”,搜索并附加 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

1 回复

更多关于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'),
    );
  }
}

注意事项:

  1. AWS凭证:在代码中硬编码AWS凭证是不安全的。建议使用环境变量或AWS IAM角色(如果你在EC2或其他AWS服务上运行应用)来管理凭证。

  2. 音频权限:确保你的应用有访问设备音频的权限。在iOS上,你需要在Info.plist中添加相应的权限请求。

  3. 依赖项flutter_sound插件用于播放音频。你需要同时添加flutter_sound到你的pubspec.yaml文件中。

  4. 错误处理:在实际应用中,应该添加更多的错误处理和用户反馈机制。

希望这个示例能帮助你在Flutter项目中成功使用AWS Polly进行文本转语音!

回到顶部