chat-tts / app.py
Sameer Banchhor
update app.py
572aa6e
import gradio as gr
import os
import subprocess
from urllib.request import urlretrieve
import traceback
# --- Create a directory for the model files ---
os.makedirs("tts_model", exist_ok=True)
# --- Model and Config URLs ---
MODEL_URL = "https://huggingface.co/SYSPIN/vits_Chhattisgarhi_Female/resolve/main/best_model.pth?download=true"
CONFIG_URL = "https://huggingface.co/SYSPIN/vits_Chhattisgarhi_Female/resolve/main/config.json?download=true"
# --- Define local paths for the model and config ---
model_path = os.path.join("tts_model", "best_model.pth")
config_path = os.path.join("tts_model", "config.json")
# --- Download Model and Config if they don't exist ---
def download_file(url, destination):
if not os.path.exists(destination):
print(f"Downloading {os.path.basename(destination)}...")
try:
urlretrieve(url, destination)
print("Download complete.")
except Exception as e:
print(f"FATAL: Error downloading {url}: {e}")
raise
try:
download_file(MODEL_URL, model_path)
download_file(CONFIG_URL, config_path)
except Exception as e:
# If downloads fail, we cannot proceed.
print("Application cannot start because model files could not be downloaded.")
# This will cause the app to crash, which is appropriate here.
raise
def chhattisgarhi_tts_cli(text):
"""
Converts Chhattisgarhi text to speech using the TTS command-line interface.
Returns a tuple: (status_message, audio_filepath)
"""
if not text.strip():
return ("Warning: Please enter some text to convert.", None)
try:
output_wav_path = "output.wav"
# Construct the command-line instruction
command = [
"tts",
"--text", text,
"--model_path", model_path,
"--config_path", config_path,
"--out_path", output_wav_path
]
print(f"Running command: {' '.join(command)}")
# Execute the command. Capture stderr for detailed error reporting.
result = subprocess.run(
command,
check=True, # Raise an exception if the command fails
capture_output=True,
text=True
)
print(f"TTS command successful. Output saved to {output_wav_path}")
return ("Success!", output_wav_path)
except subprocess.CalledProcessError as e:
# This block is executed if the 'tts' command returns a non-zero exit code (i.e., an error)
error_message = f"TTS command failed."
# The actual error from the TTS tool is in stderr
stderr_output = e.stderr.strip()
print(f"ERROR: {error_message}")
print(f"STDERR from TTS tool: {stderr_output}")
# Return a user-friendly error message to the Gradio interface
return (f"Error during audio generation. Details: {stderr_output}", None)
except Exception as e:
# Catch any other unexpected errors (e.g., file not found if downloads failed silently)
error_message = f"An unexpected error occurred: {str(e)}"
print(error_message)
traceback.print_exc()
return (error_message, None)
# --- Gradio Interface ---
title = "Chhattisgarhi TTS Conversion"
description = """
### Chhattisgarhi Text-to-Speech
Enter text in Chhattisgarhi to generate audio. This app uses the `tts` command-line tool to run a VITS model
provided by [SYSPIN on Hugging Face](https://huggingface.co/SYSPIN/vits_Chhattisgarhi_Female).
"""
examples = [
["राजस्थान के नामी ब्यंजन चूरमालाड़ू गुड़ के पाग म गहूँ के दरदरहा पिसान के लाड़ू म तिली अउ नरियल के सुवाद म सजथे"],
["दुग्ध क्रान्ति भारत के योजना हे जेखर ले भारत म दूध के कमी ला दुरिहा करे जा सकथे एला श्वेत क्रांति घलोक कहिथे"],
["जम्मू कश्मीर म पर्यटन उद्योग ला बढ़ावा देना उहाँ के अर्थबेवस्था ला सुचारू रूप ले चलाय बर जरुरी हे"],
["फोरेन्सिक विज्ञान ल कानूनी प्रश्न के उत्तर दिए बर अउ अपराध ल सिद्ध करे बर बउरे जाथे"]
]
iface = gr.Interface(
fn=chhattisgarhi_tts_cli,
inputs=gr.Textbox(lines=3, label="Enter Chhattisgarhi Text", placeholder="यहाँ छत्तीसगढ़ी पाठ लिखें..."),
outputs=[
gr.Textbox(label="Status", interactive=False),
gr.Audio(type="filepath", label="Generated Speech")
],
title=title,
description=description,
examples=examples,
allow_flagging="never",
cache_examples=True
)
if __name__ == "__main__":
iface.launch()