Spaces:
Running
Running
from flask import jsonify, send_file, request | |
from main import * | |
import torch, torchaudio, io, base64, uuid, os | |
def xtts_clone_func(text, audio_sample_path, output_path="output_xtts_audio.wav"): | |
if xtts_model is None: return {"error": "XTTS model not initialized."} | |
language = "en"; speaker_id = 0 | |
try: | |
with torch.no_grad(): wav = xtts_model.inference(text=text, language_id=language, speaker_id=speaker_id, voice_sample=audio_sample_path, temperature=0.7, length_penalty=1.0) | |
except Exception as e: return {"error": f"XTTS inference failed: {e}"} | |
torchaudio.save(output_path, wav, 24000); return output_path | |
def xtts_api(inputs): | |
text = inputs[0]; audio_sample_filepath = inputs[1] | |
temp_audio_path = f"temp_audio_{uuid.uuid4()}.wav"; os.rename(audio_sample_filepath, temp_audio_path) | |
output = xtts_clone_func(text, temp_audio_path); os.remove(temp_audio_path) | |
if isinstance(output, dict) and "error" in output: return {"error": output["error"]} | |
output_file = output | |
with open(output_file, 'rb') as f: audio_content = f.read() | |
audio_base64 = base64.b64encode(audio_content).decode('utf-8'); os.remove(output_file); return {"audio_base64": audio_base64, "mimetype": "audio/wav"} | |
--- END OF FILE xtts_api.py --- | |