ChatAnything / chat_anything /tts_talker /tts_voicechanger.py
ermu2001
init
08720f3
raw
history blame
6.06 kB
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")