我可以在 Flutter 中更改 Google TTS 的声音吗?

Vis*_*isa 5 text-to-speech dart flutter

我编写了一个函数,它接受 2 个字符串(陈述、问题)并使用Google TTS大声朗读。

我正在使用该flutter_tts: ^1.3.0包并尝试setVoice将扬声器的声音更改为谷歌声音中支持的声音之一的方法:

这是我的代码:

Future _speak(statement, question) async {
    flutterTts.setLanguage("cmn-CN");
    flutterTts.setVoice("cmn-CN-Standard-B");
    flutterTts.setSpeechRate(0.7);
    await flutterTts.speak(statement + question);
  }
Run Code Online (Sandbox Code Playgroud)

该函数在读取文本时起作用,但我在setVoice该方法上收到错误消息:

D/TTS     (12461): Voice name not found: cmn-CN-Standard-B
Run Code Online (Sandbox Code Playgroud)

有人可以帮忙吗?谢谢你!


更新

我意识到我没有使用谷歌 TTS 服务,所以我这样做是为了实现男性和女性的声音。这段代码现在对我有用。

import 'dart:typed_data';

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

import 'package:path_provider/path_provider.dart';
import 'dart:io';
import 'package:audioplayers/audioplayers.dart';

var _apikey = "AIzaSyDWx34PZW0hjSpwExBo5bwrENvyRkLisBE";
AudioPlayer audioPlayer = AudioPlayer();

const String femalevoice = "cmn-CN-Standard-A";
const String malevoice = "cmn-CN-Standard-B";

Future<http.Response> texttospeech(String text, String voicetype) {
  String url =
      "https://texttospeech.googleapis.com/v1beta1/text:synthesize?key=$_apikey";

  var body = json.encode({
    "audioConfig": {"audioEncoding": "LINEAR16", "pitch": 0, "speakingRate": 1},
    "input": {"text": text},
    "voice": {"languageCode": "cmn-CN", "name": voicetype}
  });

  var response =
      http.post(url, headers: {"Content-type": "application/json"}, body: body);

  return response;
}

// Play male voice
playmalevoice(String text) async {
  var response = await texttospeech(text, malevoice);
  var jsonData = jsonDecode(response.body);

  String audioBase64 = jsonData['audioContent'];

  Uint8List bytes = base64Decode(audioBase64);

  String dir = (await getApplicationDocumentsDirectory()).path;
  File file =
      File("$dir/" + DateTime.now().millisecondsSinceEpoch.toString() + ".mp3");

  await file.writeAsBytes(bytes);

  int result = await audioPlayer.play(file.path);
  audioPlayer.setPlaybackRate(playbackRate: 0.7);
  audioPlayer.setVolume(1);
  if (result == 1) {
    // success
  }
}

// play female voice
playfemalevoice(String text) async {
  var response = await texttospeech(text, femalevoice);
  var jsonData = jsonDecode(response.body);

  String audioBase64 = jsonData['audioContent'];

  Uint8List bytes = base64Decode(audioBase64);

  String dir = (await getApplicationDocumentsDirectory()).path;
  File file =
      File("$dir/" + DateTime.now().millisecondsSinceEpoch.toString() + ".mp3");

  await file.writeAsBytes(bytes);

  int result = await audioPlayer.play(file.path);
  audioPlayer.setPlaybackRate(playbackRate: 0.7);
  audioPlayer.setVolume(1);
  if (result == 1) {
    // success
  }
}
Run Code Online (Sandbox Code Playgroud)

Boo*_*unz 6

使用 flutter tts,您只能设置 getvoices() 返回的语音集中存在的语音。

getvoices() 返回的语音将是运行应用程序的设备正在使用的 TTS 引擎可用的语音。

Flutter tts 不使用谷歌云语音——它使用设备上的任何内容——要么是 IOS 语音引擎,要么是 Android 上许多可能的 tts 引擎中的任何一种。

做你想做的事情的唯一方法是在你的应用程序中使用谷歌云语音而不是 flutter tts,但这意味着你的应用程序需要互联网,并且可能会花费你的 api 密钥等费用。