Home > OS >  Exception: synthesize_speech() takes from 1 to 2 positional arguments but 4 were given
Exception: synthesize_speech() takes from 1 to 2 positional arguments but 4 were given

Time:07-07

I am new a coding tourist struggling to fix a chabot project that worked well in the past. The project is built on Python 3.7.0. It began a Tensorflow 1.15 but has been upgraded to Tensorflow 2.9.1. . When running google text to speech (TTS) I get the following error that I can not figure out how to fix. Any help you can offer is appreciate :

Exception: synthesize_speech() takes from 1 to 2 positional arguments but 4 were given

# <https://cloud.google.com/text-to-speech/docs/quickstart-client-libraries>
# <https://cloud.google.com/text-to-speech/docs/basics>

import os
import config
import tempfile
#import simpleaudio as sa

os.environ['GOOGLE_APPLICATION_CREDENTIALS'] = 'assets/google.json'

from google.cloud import texttospeech_v1

client = texttospeech_v1.TextToSpeechClient()

voice = texttospeech_v1.VoiceSelectionParams(
    language_code='en-US',
    name='en-US-Wavenet-C',
    ssml_gender=texttospeech_v1.SsmlVoiceGender.FEMALE)
audio_config = texttospeech_v1.AudioConfig(
    audio_encoding=texttospeech_v1.AudioEncoding.LINEAR16, # LINEAR16=wav; or MP3
    **config.VOICE)

def say(text):
    """assumes ogg is the output format"""
    synthesis_input = texttospeech_v1.SynthesisInput(text=text)
    response = client.synthesize_speech(synthesis_input, voice, audio_config)
    tmpfile = tempfile.NamedTemporaryFile(delete=False)
    tmpfile.write(response.audio_content)
    wave_obj = sa.WaveObject.from_wave_file(tmpfile.name)
    audio = wave_obj.play()
    while audio.is_playing():
        continue

CodePudding user response:

Instead of passing as positional arguments

response = client.synthesize_speech(synthesis_input, voice, audio_config)

pass as named arguments

response = client.synthesize_speech(
    input=synthesis_input,
    voice=voice,
    audio_config=audio_config
)

the full signature of synthesize_speech is (source)

def synthesize_speech(
    self,
    request: Union[cloud_tts.SynthesizeSpeechRequest, dict] = None,
    *,
    input: cloud_tts.SynthesisInput = None,
    voice: cloud_tts.VoiceSelectionParams = None,
    audio_config: cloud_tts.AudioConfig = None,
    retry: OptionalRetry = gapic_v1.method.DEFAULT,
    timeout: float = None,
    metadata: Sequence[Tuple[str, str]] = (),
) -> cloud_tts.SynthesizeSpeechResponse:
  • Related