| from flask import Flask, request, send_file, jsonify |
| from pocket_tts import TTSModel |
| import scipy.io.wavfile |
| import tempfile |
| import torch |
|
|
| |
| |
| |
| torch.set_num_threads(1) |
| torch.set_num_interop_threads(1) |
|
|
| app = Flask(__name__) |
|
|
| |
| |
| |
| VOICE = "eve" |
|
|
| print("Loading TTS model...") |
|
|
| |
| model = TTSModel.load_model() |
|
|
| print("Preparing voice...") |
|
|
| |
| voice_state = model.get_state_for_audio_prompt( |
| VOICE |
| ) |
|
|
| print("TTS Server Ready!") |
|
|
| |
| |
| |
| @app.route("/", methods=["GET"]) |
| def home(): |
| return { |
| "status": "running", |
| "voice": VOICE, |
| "usage": "/generate?q=hello" |
| } |
|
|
| |
| |
| |
| @app.route("/generate", methods=["GET"]) |
| def generate_get(): |
|
|
| text = request.args.get("q") |
|
|
| if not text: |
| return jsonify({ |
| "error": "Missing ?q=text" |
| }), 400 |
|
|
| try: |
|
|
| |
| audio = model.generate_audio( |
| voice_state, |
| text |
| ) |
|
|
| |
| temp_wav = tempfile.NamedTemporaryFile( |
| suffix=".wav", |
| delete=False |
| ) |
|
|
| |
| scipy.io.wavfile.write( |
| temp_wav.name, |
| model.sample_rate, |
| audio.numpy() |
| ) |
|
|
| |
| return send_file( |
| temp_wav.name, |
| mimetype="audio/wav", |
| as_attachment=False |
| ) |
|
|
| except Exception as e: |
| return jsonify({ |
| "error": str(e) |
| }), 500 |
|
|
|
|
| @app.route("/generate", methods=["POST"]) |
| def generate(): |
|
|
| |
| data = request.get_json() |
|
|
| |
| text = data.get("q") if data else None |
|
|
| if not text: |
| return jsonify({ |
| "error": "Missing 'q' in JSON body" |
| }), 400 |
|
|
| try: |
|
|
| |
| audio = model.generate_audio( |
| voice_state, |
| text |
| ) |
|
|
| |
| temp_wav = tempfile.NamedTemporaryFile( |
| suffix=".wav", |
| delete=False |
| ) |
|
|
| |
| scipy.io.wavfile.write( |
| temp_wav.name, |
| model.sample_rate, |
| audio.numpy() |
| ) |
|
|
| |
| return send_file( |
| temp_wav.name, |
| mimetype="audio/wav", |
| as_attachment=False |
| ) |
|
|
| except Exception as e: |
| return jsonify({ |
| "error": str(e) |
| }), 500 |
|
|
| |
| |
| |
| if __name__ == "__main__": |
| app.run( |
| host="0.0.0.0", |
| port=7860 |
| ) |