import random import shutil import os from gradio_client import Client client = Client("http://127.0.0.1:7860/") # How to use this new TTS Client? I leave the gradio api demo page as a reference # client = Client("http://127.0.0.1:7860/") # result = client.predict( # "Howdy!", # str in '请填写您想要转换的文本(中英皆可)' Textbox component # "Bilibili - 一清清清,Bilibili - 一清清清", # str (Option from: [('Bilibili - 一清清清', 'Bilibili - 一清清清'), ('ALL - Bob Sponge', 'ALL - Bob Sponge'), ('ALL - Ariana Grande', 'ALL - Ariana Grande'), ('ALL - Stefanie Sun', 'ALL - Stefanie Sun')]) # in '请选择您的AI歌手(必选)' Dropdown component # "Microsoft Adri Online (Natural) - Afrikaans (South Africa) (Female),Microsoft Adri Online (Natural) - Afrikaans (South Africa) (Female)", # str (Option from: [('Microsoft Adri Online (Natural) - Afrikaans (South Africa) (Female)', 'Microsoft Adri Online (Natural) - Afrikaans (South Africa) (Female)'), ('Microsoft Willem Online (Natural) - Afrikaans (South Africa) (Male)', 'Microsoft Willem Online (Natural) - Afrikaans (South Africa) (Male)'), ('Microsoft Anila Online (Natural) - Albanian (Albania) (Female)', 'Microsoft Anila Online (Natural) - Albanian (Albania) (Female)'), ('Microsoft Ilir Online (Natural) - Albanian (Albania) (Male)', 'Microsoft Ilir Online (Natural) - Albanian (Albania) (Male)'), ('Microsoft Ameha Online (Natural) - Amharic (Ethiopia) (Male)', 'Microsoft Ameha Online (Natural) - Amharic (Ethiopia) (Male)'), ('Microsoft Mekdes Online (Natural) - Amharic (Ethiopia) (Female)', 'Microsoft Mekdes Online (Natural) - Amharic (Ethiopia) (Female)'), # ('Microsoft Amina Online (Natural) - Arabic (Algeria) (Female)', 'Microsoft Amina Online (Natural) - Arabic (Algeria) (Female)'), ('Microsoft Ismael Online (Natural) - Arabic (Algeria) (Male)', 'Microsoft Ismael Online (Natural) - Arabic (Algeria) (Male)'), ('Microsoft Ali Online (Natural) - Arabic (Bahrain) (Male)', 'Microsoft Ali Online (Natural) - Arabic (Bahrain) (Male)'), ('Microsoft Laila Online (Natural) - Arabic (Bahrain) (Female)', 'Microsoft Laila Online (Natural) - Arabic (Bahrain) (Female)'), ('Microsoft Salma Online (Natural) - Arabic (Egypt) (Female)', 'Microsoft Salma Online (Natural) - Arabic (Egypt) (Female)'), ('Microsoft Shakir Online (Natural) - Arabic (Egypt) (Male)', 'Microsoft Shakir Online (Natural) - Arabic (Egypt) (Male)'), ...) # # in '请选择一个相应语言的说话人' Dropdown component # -24, # int | float (numeric value between -24 and 24) # in 'Pitch' Slider component # "pm", # str in 'f0 methods' Radio component # 0, # int | float (numeric value between 0 and 1) # in 'Feature ratio' Slider component # 0, # int | float (numeric value between 0 and 7) # in 'Filter radius' Slider component # 0, # int | float (numeric value between 0 and 1) # in 'Volume envelope mix rate' Slider component # "Disable resampling,Disable resampling", # str (Option from: [('Disable resampling', 'Disable resampling'), ('16000', '16000'), ('22050', '22050'), ('44100', '44100'), ('48000', '48000')]) # in 'Resample rate' Dropdown component # api_name="/tts_conversion" # ) # print(result) TTS_MODELS = { "male":{ "Chinese": "Microsoft Yunyang Online (Natural) - Chinese (Mainland) (Male)", "English": "Microsoft Eric Online (Natural) - English (United States) (Male)", "Japanese": "Microsoft Keita Online (Natural) - Japanese (Japan) (Male)", }, "female":{ "Chinese": "Microsoft Xiaoyi Online (Natural) - Chinese (Mainland) (Female)", "English": "Microsoft Ana Online (Natural) - English (United States) (Female)", "Japanese": "Microsoft Nanami Online (Natural) - Japanese (Japan) (Female)", } } class TTSTalker(): def __init__(self,selected_voice, gender, language) -> None: self.selected_voice = selected_voice self.gender = gender self.language = language def test(self, text, audio_path=None): self.gender = random.choice(['male', 'female']) if self.gender not in TTS_MODELS else self.gender languages = TTS_MODELS[self.gender].keys() self.language = random.choice(languages) if self.language not in languages else self.language tts_model = TTS_MODELS[self.gender][self.language] result = client.predict( text, # str in '请填写您想要转换的文本(中英皆可)' Textbox component self.selected_voice, # str (Option from: [('Bilibili - 一清清清', 'Bilibili - 一清清清'), ('ALL - Bob Sponge', 'ALL - Bob Sponge'), ('ALL - Ariana Grande', 'ALL - Ariana Grande'), ('ALL - Stefanie Sun', 'ALL - Stefanie Sun')]) in '请选择您的AI歌手(必选)' Dropdown component tts_model, # in '请选择一个相应语言的说话人' Dropdown component 0, # int | float (numeric value between -24 and 24) in 'Pitch' Slider component "pm", # str in 'f0 methods' Radio component 0, # int | float (numeric value between 0 and 1) in 'Feature ratio' Slider component 0, # int | float (numeric value between 0 and 7) in 'Filter radius' Slider component 0, # int | float (numeric value between 0 and 1) in 'Volume envelope mix rate' Slider component "Disable resampling", # str (Option from: [('Disable resampling', 'Disable resampling'), ('16000','16000'), ('22050', '22050'), ('44100', '44100'), ('48000', '48000')]) in 'Resample rate' Dropdown component api_name="/tts_conversion" ) print(result[1]) print(result) if result[1] == 'Success': if not os.path.exists(audio_path): os.makedirs(audio_path) output_path = os.path.join(audio_path, 'tempfile.mp3') print(output_path) shutil.copy(result[0], output_path) return output_path else: raise ValueError("failed with SVC")