37 lines
1.4 KiB
Python
37 lines
1.4 KiB
Python
import time
|
|
from typing import Union
|
|
|
|
from .TTSSilero import TTSSilero
|
|
from .Speakers import Speakers
|
|
import DB
|
|
import sqlite3
|
|
from loguru import logger
|
|
|
|
|
|
class TTSSileroCached(TTSSilero):
|
|
def synthesize_text(self, text: str, speaker: Speakers = Speakers.kseniya) -> bytes:
|
|
# start = time.time()
|
|
cache_query = DB.SoundCache.select()\
|
|
.where(DB.SoundCache.text == text)\
|
|
.where(DB.SoundCache.speaker == speaker.value)
|
|
|
|
if cache_query.count() == 1:
|
|
with DB.database.atomic():
|
|
DB.SoundCache.update({DB.SoundCache.usages: DB.SoundCache.usages + 1})\
|
|
.where(DB.SoundCache.text == text)\
|
|
.where(DB.SoundCache.speaker == speaker.value).execute()
|
|
|
|
cached = cache_query.get().audio
|
|
|
|
return cached
|
|
|
|
else:
|
|
# logger.debug(f'Starting synthesis')
|
|
# start2 = time.time()
|
|
synthesized = super().synthesize_text(text, speaker)
|
|
# logger.debug(f'Synthesis done in {time.time() - start2} s in {time.time() - start} s after start')
|
|
DB.SoundCache.create(text=text, speaker=speaker.value, audio=synthesized)
|
|
|
|
# logger.debug(f'Cache set in {time.time() - start2} synth end and {time.time() - start2} s after start')
|
|
return synthesized
|