Spaces:
Running
Running
| import os | |
| import sys | |
| from fastapi import Request | |
| import gradio as gr | |
| from TTS.api import TTS | |
| from TTS.utils.manage import ModelManager | |
| from io import BytesIO | |
| import base64 | |
| model_names = TTS().list_models() | |
| print(model_names.__dict__) | |
| print(model_names.__dir__()) | |
| os.environ["COQUI_TOS_AGREED"] = "1" | |
| model_name = "tts_models/multilingual/multi-dataset/xtts_v2" | |
| tts = TTS(model_name, gpu=False) | |
| tts.to("cuda") | |
| def predict(prompt, language, audio_file_pth, mic_file_path, use_mic, agree): | |
| if agree: | |
| speaker_wav = mic_file_path if use_mic and mic_file_path else audio_file_pth | |
| if not speaker_wav: | |
| return None, "Please provide a reference audio." | |
| if len(prompt) < 2: | |
| return None, "Please provide a longer text prompt." | |
| if len(prompt) > 10000: | |
| return None, "Text length is limited to 10000 characters. Please try a shorter text." | |
| try: | |
| if language == "fr" and "your" in model_name: | |
| language = "fr-fr" | |
| if "/fr/" in model_name: | |
| language = None | |
| tts.tts_to_file( | |
| text=prompt, | |
| file_path="output.wav", | |
| speaker_wav=speaker_wav, | |
| language=language | |
| ) | |
| except RuntimeError as e: | |
| if "device-assert" in str(e): | |
| return None, "Runtime error encountered. Please try again later." | |
| else: | |
| raise e | |
| with open("output.wav", "rb") as audio_file: | |
| audio_bytes = BytesIO(audio_file.read()) | |
| audio = base64.b64encode(audio_bytes.read()).decode("utf-8") | |
| audio_player = f'<audio src="data:audio/wav;base64,{audio}" controls autoplay></audio>' | |
| return gr.make_waveform(audio="output.wav"),audio_player | |
| else: | |
| return None, "Please accept the Terms & Conditions." | |