From 16120d8b39c3e1a27e5de4fb850a272faf1fe4bf Mon Sep 17 00:00:00 2001 From: Kovid Goyal Date: Tue, 3 Sep 2024 09:23:52 +0530 Subject: [PATCH] ... --- src/calibre/gui2/tts2/develop.py | 2 +- src/calibre/gui2/tts2/piper.py | 22 ++++++++++++---------- 2 files changed, 13 insertions(+), 11 deletions(-) diff --git a/src/calibre/gui2/tts2/develop.py b/src/calibre/gui2/tts2/develop.py index dfcd5e2650..1e61168f2b 100644 --- a/src/calibre/gui2/tts2/develop.py +++ b/src/calibre/gui2/tts2/develop.py @@ -42,7 +42,7 @@ class MainWindow(MainWindow): marked_text.append(c.position()) if not c.movePosition(QTextCursor.MoveOperation.NextWord, QTextCursor.MoveMode.KeepAnchor): break - marked_text.append(c.selectedText()) + marked_text.append(c.selectedText().replace('\u2029', '\n')) c.setPosition(c.position()) c.setPosition(0) self.marked_text = marked_text diff --git a/src/calibre/gui2/tts2/piper.py b/src/calibre/gui2/tts2/piper.py index 281125943c..0725a75fd6 100644 --- a/src/calibre/gui2/tts2/piper.py +++ b/src/calibre/gui2/tts2/piper.py @@ -167,16 +167,18 @@ def split_long_sentences(sentence: str, offset: int, lang: str = 'en', limit: in def split_into_utterances(text: str, counter: count, lang: str = 'en'): text = re.sub(r'\n{2,}', PARAGRAPH_SEPARATOR, text.replace('\r', '')).replace('\n', ' ') for start, length in sentence_positions(text, lang): - sentence = text[start:start+length].rstrip().replace('\n', ' ') - for start, sentence in split_long_sentences(sentence, start, lang): - payload = json.dumps({'text': sentence}).encode('utf-8') - ba = QByteArray() - ba.reserve(len(payload) + 1) - ba.append(payload) - ba.append(UTTERANCE_SEPARATOR) - u = Utterance(id=next(counter), payload_size=len(ba), audio_data=QByteArray(), left_to_write=ba, start=start, length=len(sentence)) - debug(f'Utterance created {u.id}: {sentence}') - yield u + sentence = text[start:start+length].rstrip().replace('\n', ' ').strip() + if sentence: + for start, sentence in split_long_sentences(sentence, start, lang): + payload = json.dumps({'text': sentence}).encode('utf-8') + ba = QByteArray() + ba.reserve(len(payload) + 1) + ba.append(payload) + ba.append(UTTERANCE_SEPARATOR) + u = Utterance(id=next(counter), payload_size=len(ba), audio_data=QByteArray(), + left_to_write=ba, start=start, length=len(sentence)) + debug(f'Utterance created {u.id}: {sentence}') + yield u class Piper(TTSBackend):