Flutter文本转语音插件cloud_text_to_speech的使用

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

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)
}

使用特定提供商

Google

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)
}

注意事项

  1. 保护 API 密钥:确保你的 API 密钥安全,避免从移动或 Web 应用中提取。
  2. Amazon Polly 在模拟器中的问题:有时在模拟器中使用 Amazon Polly 可能会遇到 403 错误。
  3. SSML/XML 处理:可以使用 xml 包来修复 SSML/XML 格式。
  4. 音频格式:所有提供商返回的音频格式是统一的 Uint8List,可以用来播放或保存到文件。
  5. 音频播放库:推荐使用 audioplayersassets_audio_player 来播放音频。

希望这些示例代码能帮助你快速上手使用 cloud_text_to_speech 插件。如果有任何问题或需要进一步的帮助,请随时提问!


更多关于Flutter文本转语音插件cloud_text_to_speech的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html

1 回复

更多关于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官方文档(假设该链接有效)以获取更多详细信息和高级用法。

回到顶部