tts_a / app.py
ulduldp's picture
Update app.py
090d3ac verified
from flask import Flask, request, send_file, jsonify
from pocket_tts import TTSModel
import scipy.io.wavfile
import tempfile
import torch
# =========================
# CPU Optimization
# =========================
torch.set_num_threads(1)
torch.set_num_interop_threads(1)
app = Flask(__name__)
# =========================
# Hardcoded Voice
# =========================
VOICE = "eve" #"jane" #"vera" #"eve" #"anna"
print("Loading TTS model...")
# Load model
model = TTSModel.load_model()
print("Preparing voice...")
# Built-in voice
voice_state = model.get_state_for_audio_prompt(
VOICE
)
print("TTS Server Ready!")
# =========================
# Home Route
# =========================
@app.route("/", methods=["GET"])
def home():
return {
"status": "running",
"voice": VOICE,
"usage": "/generate?q=hello"
}
# =========================
# Generate Route
# =========================
@app.route("/generate", methods=["GET"])
def generate_get():
text = request.args.get("q")
if not text:
return jsonify({
"error": "Missing ?q=text"
}), 400
try:
# Generate speech
audio = model.generate_audio(
voice_state,
text
)
# Temp WAV file
temp_wav = tempfile.NamedTemporaryFile(
suffix=".wav",
delete=False
)
# Save WAV
scipy.io.wavfile.write(
temp_wav.name,
model.sample_rate,
audio.numpy()
)
# Return audio
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():
# Get JSON body
data = request.get_json()
# Get q from body
text = data.get("q") if data else None
if not text:
return jsonify({
"error": "Missing 'q' in JSON body"
}), 400
try:
# Generate speech
audio = model.generate_audio(
voice_state,
text
)
# Temp WAV file
temp_wav = tempfile.NamedTemporaryFile(
suffix=".wav",
delete=False
)
# Save WAV
scipy.io.wavfile.write(
temp_wav.name,
model.sample_rate,
audio.numpy()
)
# Return audio
return send_file(
temp_wav.name,
mimetype="audio/wav",
as_attachment=False
)
except Exception as e:
return jsonify({
"error": str(e)
}), 500
# =========================
# Start Server
# =========================
if __name__ == "__main__":
app.run(
host="0.0.0.0",
port=7860
)