|
import numpy as np |
|
import torch |
|
import gradio as gr |
|
|
|
|
|
class VoiceCloner: |
|
def __init__(self): |
|
self.model = None |
|
|
|
def load_model(self, npz_file): |
|
data = np.load(npz_file) |
|
|
|
|
|
self.model = data |
|
|
|
def clone_voice(self, audio_file, text=None): |
|
|
|
|
|
return audio_file |
|
|
|
|
|
def create_interface(): |
|
cloner = VoiceCloner() |
|
|
|
with gr.Blocks() as demo: |
|
gr.Markdown("## Voice Cloning Application") |
|
|
|
|
|
npz_file = gr.File(label="Upload Your .npz Voice Model") |
|
audio_input = gr.Audio(source="upload", type="filepath", label="Upload Original Audio") |
|
text_input = gr.Textbox(label="Text Input for TTS (Optional)") |
|
output_audio = gr.Audio(label="Cloned Voice Output") |
|
|
|
upload_button = gr.Button("Load Model") |
|
|
|
|
|
clone_button = gr.Button("Clone Voice") |
|
|
|
|
|
def load_and_initialize(npz): |
|
cloner.load_model(npz.name) |
|
return "Model Loaded!" |
|
|
|
upload_button.click(fn=load_and_initialize, inputs=npz_file, outputs="text") |
|
|
|
|
|
clone_button.click(fn=cloner.clone_voice, inputs=[audio_input, text_input], outputs=output_audio) |
|
|
|
return demo |
|
|
|
if __name__ == "__main__": |
|
demo = create_interface() |
|
demo.launch() |
|
|