|
import gradio as gr |
|
import requests |
|
import urllib.parse |
|
import tempfile |
|
import os |
|
|
|
def text_to_speech(text): |
|
|
|
if not text or not isinstance(text, str): |
|
raise ValueError("Input text must be a non-empty string") |
|
|
|
|
|
base_url = os.getenv("DWANI_AI_API_BASE_URL") |
|
if not base_url: |
|
raise ValueError("DWANI_AI_API_BASE_URL environment variable is not set") |
|
|
|
|
|
endpoint = "/v1/audio/speech" |
|
|
|
|
|
query_params = urllib.parse.urlencode({"input": text, "response_format": "mp3"}) |
|
url = f"{base_url.rstrip('/')}{endpoint}?{query_params}" |
|
|
|
headers = { |
|
"accept": "application/json", |
|
"Content-Type": "application/json" |
|
} |
|
|
|
try: |
|
response = requests.post(url, headers=headers, json={}) |
|
response.raise_for_status() |
|
|
|
|
|
with tempfile.NamedTemporaryFile(suffix=".mp3", delete=False) as temp_file: |
|
temp_file.write(response.content) |
|
temp_file_path = temp_file.name |
|
|
|
return temp_file_path |
|
except requests.exceptions.RequestException as e: |
|
raise ValueError(f"API request failed: {str(e)}") |
|
except IOError as e: |
|
raise ValueError(f"Failed to save audio file: {str(e)}") |
|
|
|
|
|
with gr.Blocks(title="Text to Speech API Interface") as demo: |
|
gr.Markdown("# Text to Speech API Interface") |
|
|
|
with gr.Row(): |
|
with gr.Column(): |
|
|
|
text_input = gr.Textbox( |
|
label="Text", |
|
placeholder="Enter text to convert to speech", |
|
value="ಕರ್ನಾಟಕದ ರಾಜಧಾನಿ ಬೆಂಗಳೂರು." |
|
) |
|
submit_btn = gr.Button("Generate Speech") |
|
|
|
with gr.Column(): |
|
|
|
audio_output = gr.Audio( |
|
label="Generated Speech", |
|
type="filepath", |
|
interactive=False |
|
) |
|
|
|
|
|
submit_btn.click( |
|
fn=text_to_speech, |
|
inputs=[text_input], |
|
outputs=audio_output |
|
) |
|
|
|
|
|
try: |
|
demo.launch(server_name="0.0.0.0", server_port=7860) |
|
except Exception as e: |
|
print(f"Failed to launch Gradio interface: {str(e)}") |