bili-dm-player / dm_player.py
void
rewrite DmPlayer to avoid "while"
4bc647b
from vits_tts import tts
import winsound
import threading
import time
def PlaySound(filename):
winsound.PlaySound(filename, winsound.SND_FILENAME)
def Play(text, notify, cb_before_play, args):
if cb_before_play != None:
cb_before_play(*args)
result, wav = tts.GenerateTTS(text)
if result == True:
if notify != None:
PlaySound(f"{notify}")
PlaySound(wav)
class DmPlayer:
def __init__(self):
self.pending_list = []
self.playing = False
def Pend(self, text, notify = None, cb_before_play = None, *args):
self.pending_list.append((text, notify, cb_before_play, args))
if self.playing == False:
self.playing = True
threading.Thread(target=self.Play, args=()).start()
def Play(self):
try:
(text, notify, cb_before_play, args) = self.pending_list.pop(0)
except:
self.playing = False
print('Queue empty')
else:
Play(text, notify, cb_before_play, args)
time.sleep(0.5)
self.Play()
def LoadCharacter(self, name):
tts.LoadCharacter(name)
# ns "控制感情变化程度", minimum=0.1, maximum=1.0
# nsw "控制音素发音长度", minimum=0.1, maximum=1.0
# ls "控制整体语速", minimum=0.1, maximum=2.0
def SetVoiceOption(self, ns, nsw, ls):
tts.SetVoiceOption(ns, nsw, ls)