Хорошо, поэтому я не знаю, что именно не так на стороне 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
В основном теперь, когда я получаю эту ошибку от Google, я повторяю вызов синтезатора речи.
У Google довольно жесткие квоты, установленные для этого 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