diff --git a/mimic.patch b/mimic.patch new file mode 100644 index 0000000..eeef537 --- /dev/null +++ b/mimic.patch @@ -0,0 +1,100 @@ +From 30596836fcd707098bbae6ebe453e67eb2caef87 Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?Mat=C4=9Bj=20Cepl?= +Date: Mon, 20 Dec 2021 19:50:30 +0100 +Subject: [PATCH] Use mimic instead of pico2wave. + +Unfortunately, the language setting is gone again. + +Fixes #42 +--- + README.md | 10 ++++------ + epy.py | 22 +++++++++------------- + 2 files changed, 13 insertions(+), 19 deletions(-) + +diff --git a/README.md b/README.md +index d434d79..a3950c3 100644 +--- a/README.md ++++ b/README.md +@@ -87,21 +87,19 @@ But you can enable it by setting `MouseSupport` to `true` in config file. + + To get Text-to-Speech (TTS) support, you need to install these external dependencies: + +-- `pico2wave` (from `libttspico-utils` package (Ubuntu) or `svox-pico-bin` package (AUR)) +-- `play` (from `sox` package) ++- `mimic` package (AUR)) + + eg. + + ```shell + $ # Ubuntu +-$ apt install libttspico-utils sox ++$ apt install mimic + + $ # Arch +-$ yay -S svox-pico-bin +-$ pacman -S sox ++$ pacman -S mimic + ``` + +-And then make sure `pico2wave` and `play` is in `$PATH`. ++And then make sure `mimic` is in `$PATH`. + + ## Double Spread + +diff --git a/epy.py b/epy.py +index 6b131b7..6c9510b 100755 +--- a/epy.py ++++ b/epy.py +@@ -1881,7 +1881,7 @@ class Reader: + self.jump_list: Mapping[str, ReadingState] = dict() + + # TTS speaker utils +- self._tts_support: bool = any([shutil.which("pico2wave"), shutil.which("play")]) ++ self._tts_support: bool = any([shutil.which("mimic")]) + self.is_speaking: bool = False + + # multi process & progress percentage +@@ -2344,19 +2344,16 @@ class Reader: + self.screen.refresh() + self.screen.timeout(1) + try: +- _, path = tempfile.mkstemp(suffix=".wav") +- subprocess.call( +- ["pico2wave", f"--lang={self.setting.TTSLang}", "-w", path, text], ++ spk = subprocess.Popen( ++ ["mimic"], text=True, ++ stdin=subprocess.PIPE, + stdout=subprocess.DEVNULL, +- stderr=subprocess.DEVNULL, +- ) +- speaker = subprocess.Popen( +- ["play", path, "tempo", str(self.setting.TTSSpeed)], +- stdout=subprocess.DEVNULL, +- stderr=subprocess.DEVNULL, ++ stderr=subprocess.STDOUT, + ) ++ spk.stdin.write(text) ++ spk.stdin.close() + while True: +- if speaker.poll() is not None: ++ if spk.poll() is not None: + k = self.keymap.PageDown[0] + break + tmp = self.screen.getch() +@@ -2383,12 +2380,11 @@ class Reader: + + self.keymap.ScrollDown + + (curses.KEY_RESIZE,) + ): +- speaker.terminate() ++ spk.terminate() + # speaker.kill() + break + finally: + self.screen.timeout(-1) +- os.remove(path) + + if k in self.keymap.Quit: + self.is_speaking = False +-- +2.34.1 + diff --git a/tts_lang.patch b/tts_lang.patch deleted file mode 100644 index 7029434..0000000 --- a/tts_lang.patch +++ /dev/null @@ -1,21 +0,0 @@ -diff --git a/epy.py b/epy.py -index 11eca60..d4ea184 100755 ---- a/epy.py -+++ b/epy.py -@@ -195,6 +195,7 @@ class Settings: - MouseSupport: bool = False - StartWithDoubleSpread: bool = False - TTSSpeed: int = 1 -+ TTSLang: str = "en-US" - # -1 is default terminal fg/bg colors - DarkColorFG: int = 252 - DarkColorBG: int = 235 -@@ -2336,7 +2337,7 @@ class Reader: - try: - _, path = tempfile.mkstemp(suffix=".wav") - subprocess.call( -- ["pico2wave", "-w", path, text], -+ ["pico2wave", f"--lang={self.setting.TTSLang}", "-w", path, text], - stdout=subprocess.DEVNULL, - stderr=subprocess.DEVNULL, - )