def main()

in projects/speech2speech_translation/speech2speech.py [0:0]


def main():
    """Translates speech audio from one language to another.

    Args: None
    """
    args = parse_config_args(CONFIG_FILE)
    if not args:
        print("Failed to parse config file. Exiting.")
        exit(1)

    logger = logging.getLogger()
    logger.setLevel(args.log.upper())
    ch = logging.StreamHandler()
    formatter = logging.Formatter(
        "%(asctime)s - %(name)s - %(levelname)s - %(message)s"
    )
    ch.setFormatter(formatter)
    logger.addHandler(ch)

    logger.info("Main started")
    logger.info("args: %s", args)

    if args.list_voices:
        s2s.list_tts_voices(logger)
        exit(0)
    elif args.list_translate_languages:
        s2s.list_translate_languages(logger)
        exit(0)

    gcs = s2s.parse_gcs_url(args.gcs_path)
    if not gcs["path"].endswith("/"):
        gcs["path"] += "/"
    logger.info("GCS URL: %s", args.gcs_path)
    logger.debug("GCS bucket: %s", gcs["bucket"])
    logger.debug("GCS path: %s", gcs["path"])

    prefix = s2s.generate_filename_prefix(args.filename_prefix) or ""
    logger.info("Filename prefix: %s", prefix)

    gcs_uri_input_audio = s2s.upload_file_to_gcs(
        args.project_id,
        gcs,
        args.input_audio_file_path,
        args.input_audio_file_name,
        logger,
    )

    stt_response = s2s.speech_to_text(
        args.project_id,
        args.location,
        args.source_language_code,
        args.stt_model,
        args.stt_timeout,
        gcs_uri_input_audio,
        logger,
    )

    transcript = s2s.parse_stt_response(
        stt_response, gcs_uri_input_audio, args.stt_alternative, logger
    )

    translate_result = s2s.translate_text(
        args.target_language, transcript, logger
    )
    logger.debug(
        "Text (%s): %s",
        translate_result["detectedSourceLanguage"],
        translate_result["input"],
    )
    logger.debug(
        "\nTranslation (%s): %s",
        args.target_language,
        translate_result["translatedText"],
    )

    s2s.text_to_speech(
        args.project_id,
        args.location,
        args.target_voice,
        args.target_voice_gender,
        args.target_language_code,
        translate_result["translatedText"],
        args.tts_timeout,
        gcs,
        args.output_audio_file_name,
        logger,
        prefix,
    )

    if args.output_interim_files:
        uri = s2s.upload_variable_to_gcs(
            args.project_id,
            gcs,
            prefix + "transcript.txt",
            transcript,
            "text/plain; charset=utf-8",
        )
        logger.info("Transcript written to: %s", uri)

        uri = s2s.upload_variable_to_gcs(
            args.project_id,
            gcs,
            prefix + "translation.txt",
            translate_result["translatedText"],
            "text/plain; charset=utf-8",
        )
        logger.info("Translation written to: %s", uri)