From e195e83d315709d740dd1dcf28a268013c4ad53f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?c=C4=83t=C4=83lin?= Date: Tue, 3 Dec 2024 15:46:56 +0100 Subject: [PATCH] wip: add tts debug --- Makefile | 6 +++ pyproject.toml | 9 ++++- src/markovbot_gui/main.py | 28 +++++++++++++ src/markovbot_gui/output.mp3 | Bin 0 -> 15744 bytes src/markovbot_gui/output.wav | Bin 0 -> 78380 bytes src/markovbot_gui/tts_window.py | 39 ++++++++++++++++++ uv.lock | 68 +++++++++++++++++++++++++++++++- 7 files changed, 148 insertions(+), 2 deletions(-) create mode 100644 src/markovbot_gui/output.mp3 create mode 100644 src/markovbot_gui/output.wav create mode 100644 src/markovbot_gui/tts_window.py diff --git a/Makefile b/Makefile index 7b1af53..daabaf9 100644 --- a/Makefile +++ b/Makefile @@ -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 diff --git a/pyproject.toml b/pyproject.toml index 207f2de..3f95281 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -18,6 +18,11 @@ 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", + "pydub>=0.25.1", + "gtts>=2.5.4", ] [tool.uv] @@ -44,7 +49,9 @@ module = [ "nltk.tokenize.treebank", "nltk.tokenize.destructive", "TwitchWebsocket", - "tokenizer" + "tokenizer", + "simpleaudio", + "RealtimeTTS" ] ignore_missing_imports = true diff --git a/src/markovbot_gui/main.py b/src/markovbot_gui/main.py index d7ffdee..cad68b3 100644 --- a/src/markovbot_gui/main.py +++ b/src/markovbot_gui/main.py @@ -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) diff --git a/src/markovbot_gui/output.mp3 b/src/markovbot_gui/output.mp3 new file mode 100644 index 0000000000000000000000000000000000000000..90fa58a243f03628a69ea7b5a0b592ab71ba4726 GIT binary patch literal 15744 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 N4g9wT{y)^f{{n^s9%ldm literal 0 HcmV?d00001 diff --git a/src/markovbot_gui/tts_window.py b/src/markovbot_gui/tts_window.py new file mode 100644 index 0000000..f16b937 --- /dev/null +++ b/src/markovbot_gui/tts_window.py @@ -0,0 +1,39 @@ +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 + + +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.play) + text_layout.add_widget(gtts_button) + + def play(self, instance): + from gtts import gTTS + from pydub import AudioSegment + from pydub.playback import play + + tts = gTTS(self.text_input.text, lang="pt", tld="com.br") + tts.save("output.mp3") + audio = AudioSegment.from_mp3("output.mp3") + play(audio) diff --git a/uv.lock b/uv.lock index 3f9f0ad..ae14658 100644 --- a/uv.lock +++ b/uv.lock @@ -1,7 +1,8 @@ version = 1 requires-python = ">=3.11" resolution-markers = [ - "python_full_version < '3.13'", + "python_full_version < '3.12'", + "python_full_version == '3.12.*'", "python_full_version >= '3.13'", ] @@ -116,6 +117,46 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/8f/d7/9322c609343d929e75e7e5e6255e614fcc67572cfd083959cdef3b7aad79/docutils-0.21.2-py3-none-any.whl", hash = "sha256:dafca5b9e384f0e419294eb4d2ff9fa826435bf15f15b7bd45723e8ad76811b2", size = 587408 }, ] +[[package]] +name = "ffmpeg" +version = "1.4" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/f0/cc/3b7408b8ecf7c1d20ad480c3eaed7619857bf1054b690226e906fdf14258/ffmpeg-1.4.tar.gz", hash = "sha256:6931692c890ff21d39938433c2189747815dca0c60ddc7f9bb97f199dba0b5b9", size = 5055 } + +[[package]] +name = "ffmpeg-python" +version = "0.2.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "future" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/dd/5e/d5f9105d59c1325759d838af4e973695081fbbc97182baf73afc78dec266/ffmpeg-python-0.2.0.tar.gz", hash = "sha256:65225db34627c578ef0e11c8b1eb528bb35e024752f6f10b78c011f6f64c4127", size = 21543 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/d7/0c/56be52741f75bad4dc6555991fabd2e07b432d333da82c11ad701123888a/ffmpeg_python-0.2.0-py3-none-any.whl", hash = "sha256:ac441a0404e053f8b6a1113a77c0f452f1cfc62f6344a769475ffdc0f56c23c5", size = 25024 }, +] + +[[package]] +name = "future" +version = "1.0.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/a7/b2/4140c69c6a66432916b26158687e821ba631a4c9273c474343badf84d3ba/future-1.0.0.tar.gz", hash = "sha256:bd2968309307861edae1458a4f8a4f3598c03be43b97521076aebf5d94c07b05", size = 1228490 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/da/71/ae30dadffc90b9006d77af76b393cb9dfbfc9629f339fc1574a1c52e6806/future-1.0.0-py3-none-any.whl", hash = "sha256:929292d34f5872e70396626ef385ec22355a1fae8ad29e1a734c3e43f9fbc216", size = 491326 }, +] + +[[package]] +name = "gtts" +version = "2.5.4" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "click" }, + { name = "requests" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/57/79/5ddb1dfcd663581d0d3fca34ccb1d8d841b47c22a24dc8dce416e3d87dfa/gtts-2.5.4.tar.gz", hash = "sha256:f5737b585f6442f677dbe8773424fd50697c75bdf3e36443585e30a8d48c1884", size = 24018 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/e3/6c/8b8b1fdcaee7e268536f1bb00183a5894627726b54a9ddc6fc9909888447/gTTS-2.5.4-py3-none-any.whl", hash = "sha256:5dd579377f9f5546893bc26315ab1f846933dc27a054764b168f141065ca8436", size = 29184 }, +] + [[package]] name = "idna" version = "3.10" @@ -249,6 +290,9 @@ name = "markovbot-gui" version = "0.1.2" source = { virtual = "." } dependencies = [ + { name = "ffmpeg" }, + { name = "ffmpeg-python" }, + { name = "gtts" }, { name = "kivy", extra = ["base"] }, { name = "loguru" }, { name = "nltk" }, @@ -256,7 +300,9 @@ dependencies = [ { name = "platformdirs" }, { name = "pydantic" }, { name = "pydantic-settings" }, + { name = "pydub" }, { name = "pyinstaller" }, + { name = "simpleaudio" }, { name = "twitchwebsocket" }, ] @@ -269,6 +315,9 @@ dev = [ [package.metadata] requires-dist = [ + { name = "ffmpeg", specifier = ">=1.4" }, + { name = "ffmpeg-python", specifier = ">=0.2.0" }, + { name = "gtts", specifier = ">=2.5.4" }, { name = "kivy", extras = ["base"], specifier = ">=2.3.0" }, { name = "loguru", specifier = ">=0.7.2" }, { name = "nltk", specifier = ">=3.9.1" }, @@ -276,7 +325,9 @@ requires-dist = [ { name = "platformdirs", specifier = ">=4.3.6" }, { name = "pydantic", specifier = ">=2.9.2" }, { name = "pydantic-settings", specifier = ">=2.6.0" }, + { name = "pydub", specifier = ">=0.25.1" }, { name = "pyinstaller", specifier = ">=6.11.0" }, + { name = "simpleaudio", specifier = ">=1.0.4" }, { name = "twitchwebsocket", specifier = ">=1.2.1" }, ] @@ -490,6 +541,15 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/34/19/26bb6bdb9fdad5f0dfce538780814084fb667b4bc37fcb28459c14b8d3b5/pydantic_settings-2.6.0-py3-none-any.whl", hash = "sha256:4a819166f119b74d7f8c765196b165f95cc7487ce58ea27dec8a5a26be0970e0", size = 28578 }, ] +[[package]] +name = "pydub" +version = "0.25.1" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/fe/9a/e6bca0eed82db26562c73b5076539a4a08d3cffd19c3cc5913a3e61145fd/pydub-0.25.1.tar.gz", hash = "sha256:980a33ce9949cab2a569606b65674d748ecbca4f0796887fd6f46173a7b0d30f", size = 38326 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/a6/53/d78dc063216e62fc55f6b2eebb447f6a4b0a59f55c8406376f76bf959b08/pydub-0.25.1-py2.py3-none-any.whl", hash = "sha256:65617e33033874b59d87db603aa1ed450633288aefead953b30bded59cb599a6", size = 32327 }, +] + [[package]] name = "pygments" version = "2.18.0" @@ -701,6 +761,12 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/31/2d/90165d51ecd38f9a02c6832198c13a4e48652485e2ccf863ebb942c531b6/setuptools-75.2.0-py3-none-any.whl", hash = "sha256:a7fcb66f68b4d9e8e66b42f9876150a3371558f98fa32222ffaa5bced76406f8", size = 1249825 }, ] +[[package]] +name = "simpleaudio" +version = "1.0.4" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/94/1b/4dc29653733202b68c09d9c6ca085cf67ac54859ee860647ef21ac1ff3dc/simpleaudio-1.0.4.tar.gz", hash = "sha256:691c88649243544db717e7edf6a9831df112104e1aefb5f6038a5d071e8cf41d", size = 2042564 } + [[package]] name = "tqdm" version = "4.66.5"