from TTS.api import TTS from bs4 import BeautifulSoup import requests import streamlit as st import tempfile import os import json import datetime with open('config.json', 'r') as f: config = json.load(f) APP_NAME = config['APP_NAME'] APP_LOGO = config['APP_LOGO'] APP_DESCRIPTION = config['APP_DESCRIPTION'] def contains_only_ascii(input_string): return all(ord(char) < 128 for char in input_string) def create_temp_file(input_wav): temp_file = tempfile.NamedTemporaryFile(delete=False) temp_file.write(input_wav.read()) return temp_file def remove_temp_file(temp_file): temp_file.close() os.remove(temp_file.name) def update_progress(percent, text): progress_bar.progress(percent) status_text.text(text) st.set_page_config(page_title=APP_NAME) st.title(APP_NAME) st.image(APP_LOGO, use_column_width=True) st.markdown(APP_DESCRIPTION) input_wav = st.file_uploader("Upload a WAV file with your voice", type=["wav"]) clone_wav = st.file_uploader("Upload a WAV file with voice to clone", type=["wav"]) if input_wav and clone_wav: progress_bar = st.progress(0) status_text = st.empty() current_datetime = datetime.datetime.now() formatted_datetime = current_datetime.strftime("%Y-%m-%d_%H%M%S") output_filename = f"recording_{formatted_datetime}.wav" temp_input_file = create_temp_file(input_wav) temp_clone_file = create_temp_file(clone_wav) update_progress(0, 'Loading TTS model...') api = TTS("voice_conversion_models/multilingual/vctk/freevc24") update_progress(50, 'Generating audio...') api.voice_conversion_to_file( source_wav=temp_input_file.name, target_wav=temp_clone_file.name, file_path=output_filename ) remove_temp_file(temp_input_file) remove_temp_file(temp_clone_file) audio_file = open(output_filename, 'rb') audio_bytes = audio_file.read() update_progress(100, 'Audio generated successfully!') st.audio(audio_bytes, format='audio/wav') st.download_button('Download WAV', data=audio_bytes, file_name='output.wav')