You've already forked Irene-Voice-Assistant
mirror of
https://github.com/janvarev/Irene-Voice-Assistant.git
synced 2025-11-26 22:50:58 +02:00
10.8.0 добавлен Elevenlabs TTS (онлайн)
This commit is contained in:
@@ -59,6 +59,8 @@ _Доп инфа:_
|
|||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
|
**plugin_tts_elevenlabs.py** - (онлайн) позволяет озвучивать через онлайн-сервис Elevellabs.
|
||||||
|
|
||||||
**plugin_tts_pyttsx.py** - (оффлайн) позволяет делать TTS (Text-To-Speech, озвучку текста) через pyttsx движок. Используется по умолчанию.
|
**plugin_tts_pyttsx.py** - (оффлайн) позволяет делать TTS (Text-To-Speech, озвучку текста) через pyttsx движок. Используется по умолчанию.
|
||||||
|
|
||||||
**plugin_tts_console.py** - (оффлайн) заглушка для отладки. Вместо работы TTS просто выводит текст в консоль.
|
**plugin_tts_console.py** - (оффлайн) заглушка для отладки. Вместо работы TTS просто выводит текст в консоль.
|
||||||
|
|||||||
@@ -18,7 +18,7 @@ def start(core:VACore):
|
|||||||
"isOnline": "Будут ли выполняться команды плагинов, требующие онлайн",
|
"isOnline": "Будут ли выполняться команды плагинов, требующие онлайн",
|
||||||
# "ttsIndex": 0,
|
# "ttsIndex": 0,
|
||||||
"useTTSCache": "Кешировать озвучку текста (требует больше места на диске, может сбоить при переключении голосов)",
|
"useTTSCache": "Кешировать озвучку текста (требует больше места на диске, может сбоить при переключении голосов)",
|
||||||
"ttsEngineId": "ID основного движка озвучки. Если что-то не работает - попробуйте сменить на pyttsx, vosk или silero_v3 (последний требует полной установки из install - т.е. c torch)",
|
"ttsEngineId": "ID основного движка озвучки. Если что-то не работает - попробуйте сменить на pyttsx, elevenlabs, vosk или silero_v3 (последний требует полной установки из install - т.е. c torch)",
|
||||||
"ttsEngineId2": "ID дополнительного движка озвучки. Всегда озвучивает результат на той машине, где запущена Ирина (без веб-интерфейса)", # двиг для прямой озвучки на сервере. Если пуст - используется ttsEngineId
|
"ttsEngineId2": "ID дополнительного движка озвучки. Всегда озвучивает результат на той машине, где запущена Ирина (без веб-интерфейса)", # двиг для прямой озвучки на сервере. Если пуст - используется ttsEngineId
|
||||||
"playWavEngineId": "ID движка воспроизведения аудио. Если есть проблемы - попробуйте сменить на audioplayer или sounddevice",
|
"playWavEngineId": "ID движка воспроизведения аудио. Если есть проблемы - попробуйте сменить на audioplayer или sounddevice",
|
||||||
"linguaFrancaLang": "Язык для библиотеки lingua-franca конвертирования чисел", # язык для библиотеки lingua-franca конвертирования чисел
|
"linguaFrancaLang": "Язык для библиотеки lingua-franca конвертирования чисел", # язык для библиотеки lingua-franca конвертирования чисел
|
||||||
|
|||||||
64
plugins/plugin_tts_elevenlabs.py
Normal file
64
plugins/plugin_tts_elevenlabs.py
Normal file
@@ -0,0 +1,64 @@
|
|||||||
|
# TTS plugin for Elevenlabs.io
|
||||||
|
# author: Vladislav Janvarev
|
||||||
|
|
||||||
|
|
||||||
|
import os
|
||||||
|
|
||||||
|
from vacore import VACore
|
||||||
|
|
||||||
|
modname = os.path.basename(__file__)[:-3] # calculating modname
|
||||||
|
|
||||||
|
# функция на старте
|
||||||
|
def start(core:VACore):
|
||||||
|
manifest = {
|
||||||
|
"name": "TTS Elevenlabs",
|
||||||
|
"version": "1.0",
|
||||||
|
"require_online": True,
|
||||||
|
|
||||||
|
"default_options": {
|
||||||
|
"speaker": "Bella",
|
||||||
|
"model": "eleven_multilingual_v2",
|
||||||
|
"api_key": "", # not required
|
||||||
|
},
|
||||||
|
|
||||||
|
"tts": {
|
||||||
|
"elevenlabs": (init,None,towavfile) # первая функция инициализации, вторая - говорить
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return manifest
|
||||||
|
|
||||||
|
def start_with_options(core:VACore, manifest:dict):
|
||||||
|
pass
|
||||||
|
|
||||||
|
def init(core:VACore):
|
||||||
|
options = core.plugin_options(modname)
|
||||||
|
import elevenlabs
|
||||||
|
|
||||||
|
|
||||||
|
def towavfile(core:VACore, text_to_speech:str, wavfile:str):
|
||||||
|
|
||||||
|
|
||||||
|
options = core.plugin_options(modname)
|
||||||
|
speaker = options["speaker"]
|
||||||
|
model = options["model"]
|
||||||
|
api_key = options["api_key"]
|
||||||
|
|
||||||
|
from elevenlabs.client import ElevenLabs
|
||||||
|
from elevenlabs import save
|
||||||
|
|
||||||
|
|
||||||
|
el_client:ElevenLabs = None
|
||||||
|
if api_key == "":
|
||||||
|
el_client = ElevenLabs()
|
||||||
|
else:
|
||||||
|
el_client = ElevenLabs(
|
||||||
|
api_key=api_key
|
||||||
|
)
|
||||||
|
|
||||||
|
audio = el_client.generate(
|
||||||
|
text=text_to_speech,
|
||||||
|
voice=speaker,
|
||||||
|
model=model,
|
||||||
|
)
|
||||||
|
# рендерим wav (здесь это будет MP3)
|
||||||
|
save(audio,wavfile)
|
||||||
@@ -13,6 +13,9 @@ vosk~=0.3.45
|
|||||||
vosk-tts~=0.3.52
|
vosk-tts~=0.3.52
|
||||||
#torch~=2.1.2 #для Silero
|
#torch~=2.1.2 #для Silero
|
||||||
|
|
||||||
|
# tts elevenlabs
|
||||||
|
elevenlabs==1.0.3
|
||||||
|
|
||||||
# Локальные запись и воспроизведение звука
|
# Локальные запись и воспроизведение звука
|
||||||
sounddevice~=0.4.3
|
sounddevice~=0.4.3
|
||||||
soundfile~=0.10.3.post1
|
soundfile~=0.10.3.post1
|
||||||
|
|||||||
@@ -13,3 +13,4 @@ python-dateutil~=2.6.0
|
|||||||
gradio~=3.28.3
|
gradio~=3.28.3
|
||||||
fsspec==2023.1.0
|
fsspec==2023.1.0
|
||||||
openai==0.28.0
|
openai==0.28.0
|
||||||
|
elevenlabs==1.0.3
|
||||||
|
|||||||
@@ -13,4 +13,5 @@ uvicorn[standard]
|
|||||||
gradio~=3.28.3
|
gradio~=3.28.3
|
||||||
fsspec==2023.1.0
|
fsspec==2023.1.0
|
||||||
openai==0.28.0
|
openai==0.28.0
|
||||||
|
elevenlabs==1.0.3
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user