52 lines
1.9 KiB
Python
52 lines
1.9 KiB
Python
import os
|
||
from dotenv import load_dotenv
|
||
load_dotenv()
|
||
|
||
# https://github.com/rhasspy/piper/blob/master/VOICES.md download here
|
||
|
||
ROOT_DIR = os.getenv('ROOT_DIR',os.path.dirname(__file__))
|
||
PIPER_TTS_DIR = os.path.join(ROOT_DIR, 'piper-tts')
|
||
LANGUAGES = ['en', 'fr', 'ru', 'zh', 'vi']
|
||
|
||
# piper-tts
|
||
|
||
config_file = {'en': 'glados.onnx.json',
|
||
'fr': 'fr_fr_FR_mls_medium_fr_FR-mls-medium.onnx.json',
|
||
'ru': 'ru_ru_RU_dmitri_medium_ru_RU-dmitri-medium.onnx.json',
|
||
'zh': 'zh_zh_CN_huayan_medium_zh_CN-huayan-medium.onnx.json',
|
||
'vi': 'vi_vi_VN_vais1000_medium_vi_VN-vais1000-medium.onnx.json'
|
||
}
|
||
onnx_file = {'en': 'glados.onnx',
|
||
'fr': 'fr_FR-mls-medium.onnx',
|
||
'ru': 'ru_RU-dmitri-medium.onnx',
|
||
'zh': 'zh_CN-huayan-medium.onnx',
|
||
'vi': 'vi_VN-vais1000-medium.onnx'
|
||
}
|
||
|
||
prompt = { 'en': 'Respond only in english in under 100 words.',
|
||
'fr': 'Répondez uniquement en français en moins de 100 mots.',
|
||
'ru': 'Отвечайте только на русском языке менее 100 слов.',
|
||
'zh': '只用中文回答,不超过100个字。一点英文都不可以用。',
|
||
'vi': 'Chỉ trả lời bằng tiếng Việt dưới 100 từ.'
|
||
}
|
||
|
||
def piper_voice_language(lang):
|
||
if lang in LANGUAGES:
|
||
return lang
|
||
else:
|
||
return 'en'
|
||
|
||
# retrieve the corresponding piper-tts voice files for the language
|
||
def files_language(lang):
|
||
language = piper_voice_language(lang)
|
||
conf_path = os.path.join(PIPER_TTS_DIR, config_file[language])
|
||
onnx_path = os.path.join(PIPER_TTS_DIR, onnx_file[language])
|
||
return (onnx_path, conf_path)
|
||
|
||
def get_variables(lang):
|
||
language = piper_voice_language(lang)
|
||
starting_prompt = prompt[language]
|
||
onnx_path, conf_path = files_language(language)
|
||
return (onnx_path, conf_path, language, starting_prompt)
|
||
|