|
import gradio as gr |
|
import requests |
|
import numpy as np |
|
import io |
|
import soundfile as sf |
|
|
|
|
|
TRANSLATION_API_URL = "https://twcc2.eztalking.ai/nantrans/inference" |
|
TTS_API_URL = "http://twcc2.eztalking.ai/mtts/tts" |
|
|
|
|
|
def fetch_translation(text, target_language): |
|
|
|
payload = { |
|
"input_text": text, |
|
"id": "1", |
|
"src_lang": "zh", |
|
"tgt_lang": "tw" |
|
} |
|
|
|
response = requests.post(TRANSLATION_API_URL, json=payload) |
|
if response.status_code == 200: |
|
return response.text |
|
return "Translation failed." |
|
|
|
|
|
def fetch_tts_audio(translated_text, spk): |
|
|
|
payload = { |
|
"input_text": translated_text, |
|
"id": "1", |
|
"src_lang": "tw", |
|
"tgt_lang": "tailo" |
|
} |
|
|
|
|
|
|
|
|
|
payload = { |
|
"text": translated_text, |
|
"b64enc": False, "speaker": spk, "speed": 0.9 |
|
} |
|
|
|
response = requests.post(TTS_API_URL, json=payload) |
|
if response.status_code == 200: |
|
|
|
audio_data, sample_rate = sf.read(io.BytesIO(response.content)) |
|
return audio_data, sample_rate |
|
return None, None |
|
|
|
|
|
def translate_and_speak(text, target_language, spk): |
|
translated_text = fetch_translation(text, target_language) |
|
|
|
if not translated_text: |
|
return "Translation failed.", None |
|
|
|
audio_data, sample_rate = fetch_tts_audio(translated_text, spk) |
|
if audio_data is not None: |
|
return translated_text, (sample_rate, audio_data) |
|
return translated_text, None |
|
|
|
|
|
spk_list = requests.get("http://twcc2.eztalking.ai/mtts/list_speakers").json() |
|
|
|
|
|
iface = gr.Interface( |
|
fn=translate_and_speak, |
|
inputs=[ |
|
gr.Textbox(label="Enter Text"), |
|
gr.Dropdown(choices=["en", "es", "fr", "de"], label="Target Language", value="en"), |
|
gr.Dropdown(choices=spk_list, label="Select Speaker", value=spk_list[0]) |
|
], |
|
outputs=[ |
|
gr.Textbox(label="Translated Text"), |
|
gr.Audio(label="TTS Audio", type="numpy") |
|
], |
|
title="Text Translator with TTS", |
|
description="Translate text to a selected language and generate TTS audio." |
|
) |
|
|
|
iface.launch() |
|
|