| import os |
| from flask import Flask, request, jsonify, send_file |
| from TTS.api import TTS |
| import gradio as gr |
|
|
| |
| |
| |
| app = Flask(__name__) |
|
|
| |
| MODELS = { |
| "Default Voice": "models/default_model", |
| "Hindi Voice": "models/hindi_model", |
| } |
|
|
| |
| tts_instances = {name: TTS(model_name=path, progress_bar=False) for name, path in MODELS.items()} |
|
|
| def synthesize(text, character): |
| if character not in tts_instances: |
| return None |
| tts = tts_instances[character] |
| output_path = f"/tmp/{character.replace(' ','_')}_output.wav" |
| tts.tts_to_file(text=text, file_path=output_path) |
| return output_path |
|
|
| |
| @app.route("/generate", methods=["POST"]) |
| def generate_api(): |
| data = request.json |
| text = data.get("text", "") |
| character = data.get("character", "Default Voice") |
| output_file = synthesize(text, character) |
| if output_file: |
| return send_file(output_file, mimetype="audio/wav") |
| return jsonify({"error": "Failed to generate speech"}), 400 |
|
|
| |
| |
| |
| def gradio_generate(text, character): |
| file_path = synthesize(text, character) |
| return file_path |
|
|
| with gr.Blocks() as demo: |
| gr.Markdown("## 🎙️ Custom Multi-Character TTS") |
| |
| with gr.Row(): |
| text_input = gr.Textbox(label="Enter Text", lines=5, placeholder="Type something...") |
| character_dropdown = gr.Dropdown(choices=list(MODELS.keys()), label="Select Character", value="Default Voice") |
| generate_btn = gr.Button("Generate Speech") |
| |
| audio_output = gr.Audio(label="Generated Audio", type="filepath") |
| |
| generate_btn.click(fn=gradio_generate, inputs=[text_input, character_dropdown], outputs=audio_output) |
|
|
| |
| |
| |
| if __name__ == "__main__": |
| import threading |
| |
| threading.Thread(target=lambda: demo.launch(server_name="0.0.0.0", server_port=7860, share=False)).start() |
| |
| |
| app.run(host="0.0.0.0", port=5000) |