wip: add tts debug

This commit is contained in:
cătălin 2024-12-03 11:49:49 +01:00
commit 084bea8f9d
No known key found for this signature in database
5 changed files with 5746 additions and 396 deletions

View file

@ -7,3 +7,9 @@ tests:
uv run pytest --cov=halig -vv tests --report-log reportlog.json
uv run coverage html
uv run coverage xml
compile:
uv run pyinstaller markovbot.spec
clean-compile:
uv run pyinstaller markovbot.spec --clean

View file

@ -18,6 +18,10 @@ dependencies = [
"pyinstaller>=6.11.0",
"twitchwebsocket>=1.2.1",
"loguru>=0.7.2",
"ffmpeg>=1.4",
"ffmpeg-python>=0.2.0",
"simpleaudio>=1.0.4",
"realtimetts[coqui,gtts,minimal,openai,system]>=0.4.17",
]
[tool.uv]
@ -44,7 +48,9 @@ module = [
"nltk.tokenize.treebank",
"nltk.tokenize.destructive",
"TwitchWebsocket",
"tokenizer"
"tokenizer",
"simpleaudio",
"RealtimeTTS"
]
ignore_missing_imports = true

View file

@ -8,6 +8,7 @@ from kivy.uix.widget import Widget
from src.markovbot_gui.bot_runner import BotRunner
from src.markovbot_gui.config_window import ConfigWindow
from src.markovbot_gui.tts_window import TTSWindow
class BotApp(App):
@ -51,6 +52,29 @@ class BotApp(App):
popup.open()
def run_tts(self, instance):
"""Create a TTS window and open it"""
tts_window = TTSWindow(config_path=self.config_path)
popup = Popup(
title="TTS testing ground",
content=tts_window,
size_hint=(None, None),
size=(dp(600), dp(400)),
auto_dismiss=False,
)
# Add close button
close_button = Button(
text="Close",
size_hint=(None, None),
size=(dp(100), dp(40)),
pos_hint={"center_x": 0.5},
)
close_button.bind(on_release=popup.dismiss)
tts_window.add_widget(close_button)
popup.open()
def build(self):
widget = Widget()
@ -60,6 +84,10 @@ class BotApp(App):
run_button.bind(on_release=self.run_bot)
layout.add_widget(run_button)
tts_button = Button(text="TTS button")
tts_button.bind(on_release=self.run_tts)
layout.add_widget(tts_button)
config_button = Button(text="Open config")
config_button.bind(on_release=self.run_config)
layout.add_widget(config_button)

View file

@ -0,0 +1,69 @@
from pathlib import Path
from kivy.metrics import dp
from kivy.uix.boxlayout import BoxLayout
from kivy.uix.button import Button
from kivy.uix.textinput import TextInput
from RealtimeTTS import (
CoquiEngine,
GTTSEngine,
GTTSVoice,
SystemEngine,
TextToAudioStream,
)
class TTSWindow(BoxLayout):
def __init__(self, config_path: Path, **kwargs):
super().__init__(**kwargs)
self.config_path = config_path
self.orientation = "vertical"
self.spacing = dp(10)
self.padding = dp(20)
# create a text input for the text to be converted to audio,
# and a button to execute the conversion
text_layout = BoxLayout(orientation="vertical")
self.add_widget(text_layout)
self.text_input = TextInput(multiline=True)
text_layout.add_widget(self.text_input)
gtts_button = Button(text="GTTS")
gtts_button.bind(on_release=self.run_gtts)
text_layout.add_widget(gtts_button)
stts_button = Button(text="STTS")
stts_button.bind(on_release=self.run_stts)
text_layout.add_widget(stts_button)
ctts_button = Button(text="CTTS")
ctts_button.bind(on_release=self.run_ctts)
text_layout.add_widget(ctts_button)
def play(self, stream):
stream.feed(self.text_input.text.strip())
stream.play(output_wavfile="output.wav", muted=True)
import simpleaudio as sa
wave_obj = sa.WaveObject.from_wave_file("output.wav")
play_obj = wave_obj.play()
play_obj.wait_done()
def run_gtts(self, instance):
engine = GTTSEngine(voice=GTTSVoice(language="es-ES"))
stream = TextToAudioStream(engine, language="es")
self.play(stream)
def run_stts(self, instance):
engine = SystemEngine()
stream = TextToAudioStream(engine, language="es")
self.play(stream)
def run_ctts(self, instance):
engine = CoquiEngine(language="es")
engine.download_model()
stream = TextToAudioStream(engine, language="es")
self.play(stream)

5243
uv.lock generated

File diff suppressed because it is too large Load diff