Voice-clone / app.py
Abhaykoul's picture
Update app.py
53bc3ba verified
raw
history blame
3.29 kB
import os
import gradio as gr
import torch
from TTS.api import TTS
# Agree to Coqui TOS
os.environ["COQUI_TOS_AGREED"] = "1"
# Initialize TTS model
device = "cuda" if torch.cuda.is_available() else "cpu"
tts = TTS("tts_models/multilingual/multi-dataset/xtts_v2", device=device)
def clone(text, audio):
output_path = "./output.wav"
tts.tts_to_file(text=text, speaker_wav=audio, language="en", file_path=output_path)
return output_path
# Define the UI using Blocks
with gr.Blocks(title="Advanced Voice Clone", theme=gr.themes.Soft(primary_hue="teal")) as demo:
gr.Markdown(
"""
# 🎤 Voice Clone
**by [Tony Assi](https://www.tonyassi.com/)**
This application uses the **xtts_v2** model for voice cloning.
*Non-commercial use only.*
[Coqui Public Model License](https://coqui.ai/cpml) |
📧 [Contact Me](mailto:tony.assi.media@gmail.com)
---
"""
)
with gr.Row():
with gr.Column(scale=1):
text_input = gr.Textbox(
label="Enter Text",
placeholder="Type the text you want to clone...",
lines=4
)
audio_input = gr.Audio(
type="filepath",
label="Upload Reference Voice",
elem_id="audio_upload"
)
clone_button = gr.Button("Clone Voice", variant="primary")
with gr.Column(scale=1):
output_audio = gr.Audio(
type="filepath",
label="Cloned Voice Output",
interactive=False
)
with gr.Accordion("Example Voices", open=False):
gr.Markdown(
"""
### Preloaded Examples
- **Dorothy from Wizard of Oz**
- *Sample Audio:* [Download](./audio/Wizard-of-Oz-Dorthy.wav)
- **Vito Corleone from The Godfather**
- *Sample Audio:* [Download](./audio/Godfather.wav)
- **Paris Hilton**
- *Sample Audio:* [Download](./audio/Paris-Hilton.mp3)
- **Megan Fox from Transformers**
- *Sample Audio:* [Download](./audio/Megan-Fox.mp3)
- **Jeff Goldblum**
- *Sample Audio:* [Download](./audio/Jeff-Goldblum.mp3)
- **Heath Ledger as the Joker**
- *Sample Audio:* [Download](./audio/Heath-Ledger.mp3)
"""
)
gr.Markdown(
"""
---
❤️ If you find this tool useful, please consider giving it a thumbs up!
"""
)
# Connect the button to the function
clone_button.click(
clone,
inputs=[text_input, audio_input],
outputs=output_audio,
queue=True
)
# Add custom CSS for enhanced styling
demo.add_css("""
#audio_upload > label {
background-color: #14b8a6;
color: white;
padding: 10px;
border-radius: 5px;
cursor: pointer;
}
#audio_upload > label:hover {
background-color: #0d9488;
}
""")
# Launch the app
demo.launch(server_name="0.0.0.0", server_port=7860)