首页 > 解决方案 > Google 文字转语音 - Google::Cloud::InternalError(13:遇到内部错误。):

问题描述

我在我的应用程序中启动并运行了 Google Text to Speech。大多数情况下,API 都能完美运行,而且我收到的音频文件响应播放良好。

有时虽然我收到以下错误:

Google::Cloud::InternalError (13:Internal error encountered.):

我有适当的保护措施来防止我的应用程序遇到使用配额,所以我不认为是这样。此外,在我实施这些保护措施之前,如果我确实超出了配额,错误消息会说您超出了配额。

有谁知道这个消息是什么意思?

或者,如果有人知道优雅地处理此错误的好方法(它是一个 Rails 应用程序)。

谢谢

标签: google-text-to-speech

解决方案


好的,所以除了某种内部错误之外,我不知道 Google 方面到底出了什么问题。但是,我确实想出了一个解决方案来挽救错误并允许我继续我的文本到语音工作。

对于那些感兴趣的人来说,这是我的代码:

def convert_to_audio(text, gender)
    client = Google::Cloud::TextToSpeech.text_to_speech

    input_text = { text: text }

    # Note: the voice can also be specified by name.
    # Names of voices can be retrieved with client.list_voices
    # https://cloud.google.com/text-to-speech/docs/voices
    if gender == 'MALE'
      name = 'en-US-Standard-D'
    else
      name = 'en-US-Standard-E'
    end
    voice = {
      language_code: "en-US",
      name: name,
      ssml_gender:   gender
    }

    audio_config = { audio_encoding: "MP3" }

    begin
      retries ||= 0
      response = client.synthesize_speech(
        input: input_text,
        voice: voice,
        audio_config: audio_config
      )
    rescue Google::Cloud::InternalError
      puts "The Google error occurred"
      retry if (retries += 1) < 3
    end

基本上现在当我从谷歌收到那个错误时,我会重试合成语音呼叫。

谷歌在这个 API 上设置了非常严格的配额,我猜这是因为更大和更频繁的请求往往会更频繁地抛出错误,所以他们试图进行质量控制。

我也确实为那些感兴趣的人找到了这个错误映射:

namespace error {
// These values must match error codes defined in google/rpc/code.proto.
enum Code {
  OK = 0,
  CANCELLED = 1,
  UNKNOWN = 2,
  INVALID_ARGUMENT = 3,
  DEADLINE_EXCEEDED = 4,
  NOT_FOUND = 5,
  ALREADY_EXISTS = 6,
  PERMISSION_DENIED = 7,
  UNAUTHENTICATED = 16,
  RESOURCE_EXHAUSTED = 8,
  FAILED_PRECONDITION = 9,
  ABORTED = 10,
  OUT_OF_RANGE = 11,
  UNIMPLEMENTED = 12,
  INTERNAL = 13,
  UNAVAILABLE = 14,
  DATA_LOSS = 15,
};
}  // namespace error

推荐阅读