You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Flutter中集成Google Cloud服务(以Cloud Text-to-Speech为例)

在Flutter中集成Google Cloud Text-to-Speech的可行方案

方法一:直接调用Google Cloud Text-to-Speech REST API

Google Cloud Text-to-Speech提供标准REST API,Flutter可通过HTTP请求直接对接,步骤如下:

  1. 在Google Cloud控制台启用Text-to-Speech服务,创建服务账号并下载JSON格式密钥文件。
  2. 在Flutter项目pubspec.yaml中添加http依赖,执行flutter pub get完成安装。
  3. 编写请求代码:
    • 通过服务账号密钥生成OAuth2访问令牌(相比API密钥,令牌安全性更高)。
    • 构造包含文本、语音参数的请求体,发送POST请求到对应接口地址。
    • 解析返回的base64格式音频数据,使用audioplayers类插件播放音频。

示例代码片段:

import 'package:http/http.dart' as http;
import 'dart:convert';
import 'package:audioplayers/audioplayers.dart';

Future<void> synthesizeSpeech(String text) async {
  final url = Uri.parse('https://texttospeech.googleapis.com/v1/text:synthesize');
  final authToken = 'YOUR_ACCESS_TOKEN'; // 替换为生成的访问令牌
  final requestBody = jsonEncode({
    'input': {'text': text},
    'voice': {'languageCode': 'zh-CN', 'ssmlGender': 'FEMALE'},
    'audioConfig': {'audioEncoding': 'MP3'}
  });

  final response = await http.post(
    url,
    headers: {
      'Authorization': 'Bearer $authToken',
      'Content-Type': 'application/json'
    },
    body: requestBody,
  );

  if (response.statusCode == 200) {
    final data = jsonDecode(response.body);
    final audioBase64 = data['audioContent'];
    final player = AudioPlayer();
    await player.play(BytesAudio(base64Decode(audioBase64)));
  }
}

方法二:使用第三方Flutter插件

Pub.dev上有封装好的Google Cloud Text-to-Speech插件(如google_cloud_text_to_speech),可简化集成流程:

  1. 在pubspec.yaml中添加插件依赖并执行安装。
  2. 将服务账号密钥文件放入项目assets目录,在pubspec.yaml中声明assets路径。
  3. 初始化插件并调用合成方法:
import 'package:google_cloud_text_to_speech/google_cloud_text_to_speech.dart';

Future<void> generateSpeech(String text) async {
  final serviceAccount = ServiceAccount.fromJson('assets/service_account.json');
  final tts = GoogleCloudTextToSpeech(serviceAccount);
  final input = SynthesisInput(text: text);
  final voice = VoiceSelectionParams(
    languageCode: 'zh-CN',
    ssmlGender: SsmlVoiceGender.female
  );
  final audioConfig = AudioConfig(audioEncoding: AudioEncoding.mp3);

  final response = await tts.synthesizeSpeech(input, voice, audioConfig);
  // 使用音频插件播放response.audioContent
}

方法三:离线替代方案(本地TTS)

若不需要Google Cloud的云端语音效果,可使用设备本地TTS服务,推荐flutter_tts插件:

  1. 添加flutter_tts依赖并完成安装。
  2. 直接调用本地TTS:
import 'package:flutter_tts/flutter_tts.dart';

final FlutterTts flutterTts = FlutterTts();

Future<void> speak(String text) async {
  await flutterTts.setLanguage('zh-CN');
  await flutterTts.speak(text);
}

注意事项

  • 安全问题:不要在Flutter客户端直接暴露服务账号密钥,建议通过自有后端中转请求,客户端调用后端接口,由后端处理Google Cloud API调用。
  • 音频播放:无论采用哪种方案,都需要配合音频播放插件,如audioplayers或just_audio。

内容的提问来源于stack exchange,提问作者zecoeco

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.01 12:01:12