import gradio as gr import os import tempfile from openai import OpenAI from tts_voice import tts_order_voice import edge_tts import tempfile import anyio # Set an environment variable for key #os.environ['OPENAI_API_KEY'] = os.environ.get('OPENAI_API_KEY') #client = OpenAI() # add api_key import torch import torchaudio import gradio as gr from scipy.io import wavfile from scipy.io.wavfile import write from speechbrain.pretrained import SpectralMaskEnhancement enhance_model = SpectralMaskEnhancement.from_hparams( source="speechbrain/metricgan-plus-voicebank", savedir="pretrained_models/metricgan-plus-voicebank", ) knn_vc = torch.hub.load('bshall/knn-vc', 'knn_vc', prematched=True, trust_repo=True, pretrained=True, device='cpu') language_dict = tts_order_voice async def text_to_speech_edge(text, language_code): voice = language_dict[language_code] communicate = edge_tts.Communicate(text, voice) with tempfile.NamedTemporaryFile(delete=False, suffix=".mp3") as tmp_file: tmp_path = tmp_file.name await communicate.save(tmp_path) return "语音合成完成:{}".format(text), tmp_path def voice_change(audio_in, audio_ref): samplerate1, data1 = wavfile.read(audio_in) samplerate2, data2 = wavfile.read(audio_ref) write("./audio_in.wav", samplerate1, data1) write("./audio_ref.wav", samplerate2, data2) query_seq = knn_vc.get_features("./audio_in.wav") matching_set = knn_vc.get_matching_set(["./audio_ref.wav"]) out_wav = knn_vc.match(query_seq, matching_set, topk=4) torchaudio.save('output.wav', out_wav[None], 16000) noisy = enhance_model.load_audio( 'output.wav' ).unsqueeze(0) enhanced = enhance_model.enhance_batch(noisy, lengths=torch.tensor([1.])) torchaudio.save('enhanced.wav', enhanced.cpu(), 16000) return 'enhanced.wav' def tts(text, model, voice, api_key): if len(text)>300: raise gr.Error('您输入的文本字符多于300个,请缩短您的文本') if api_key == '': raise gr.Error('Please enter your OpenAI API Key') else: try: client = OpenAI(api_key=api_key) response = client.audio.speech.create( model=model, # "tts-1","tts-1-hd" voice=voice, # 'alloy', 'echo', 'fable', 'onyx', 'nova', 'shimmer' input=text, ) except Exception as error: # Handle any exception that occurs raise gr.Error("An error occurred while generating speech. Please check your API key and try again.") print(str(error)) # Create a temp file to save the audio with tempfile.NamedTemporaryFile(suffix=".mp3", delete=False) as temp_file: temp_file.write(response.content) # Get the file path of the temp file temp_file_path = temp_file.name return temp_file_path app = gr.Blocks() with app: gr.Markdown("#