Make this feature togglable in extensions > "Narrate by paragraphs (when not streaming)"

63e7acb87bfdd1b10de1a2e669d371ae2ecd90f0

Dzmitry Kazlouski <d.kazlouski@pxlnd.com>

2 files changed, +26 -5Ignore whitespace
public/scripts/extensions/tts/index.js+22 -5
@@ -120,7 +120,7 @@ async function onNarrateOneMessage() {
120 }120 }
121121
122 resetTtsPlayback();122 resetTtsPlayback();
123 splitMessageAndAddToTtsJobQueue(message);123 processAndQueueTtsMessage(message);
124 moduleWorker();124 moduleWorker();
125}125}
126126
@@ -147,7 +147,7 @@ async function onNarrateText(args, text) {
147 }147 }
148148
149 resetTtsPlayback();149 resetTtsPlayback();
150 splitMessageAndAddToTtsJobQueue({ mes: text, name: name });150 processAndQueueTtsMessage({ mes: text, name: name });
151 await moduleWorker();151 await moduleWorker();
152152
153 // Return back to the chat voices153 // Return back to the chat voices
@@ -227,7 +227,12 @@ function isTtsProcessing() {
227 * @param {string} message.name - The name associated with the message.227 * @param {string} message.name - The name associated with the message.
228 * @returns {void}228 * @returns {void}
229 */229 */
230function splitMessageAndAddToTtsJobQueue(message) {230function processAndQueueTtsMessage(message) {
231 if (!extension_settings.tts.narrate_by_paragraphs) {
232 ttsJobQueue.push(message);
233 return;
234 }
235
231 const lines = message.mes.split("\n");236 const lines = message.mes.split("\n");
232237
233 for (let i = 0; i < lines.length; i++) {238 for (let i = 0; i < lines.length; i++) {
@@ -375,7 +380,7 @@ function onAudioControlClicked() {
375 talkingAnimation(false);380 talkingAnimation(false);
376 } else {381 } else {
377 // Default play behavior if not processing or playing is to play the last message.382 // Default play behavior if not processing or playing is to play the last message.
378 splitMessageAndAddToTtsJobQueue(context.chat[context.chat.length - 1]);383 processAndQueueTtsMessage(context.chat[context.chat.length - 1]);
379 }384 }
380 updateUiAudioPlayState();385 updateUiAudioPlayState();
381}386}
@@ -594,6 +599,7 @@ function loadSettings() {
594 $('#tts_narrate_quoted').prop('checked', extension_settings.tts.narrate_quoted_only);599 $('#tts_narrate_quoted').prop('checked', extension_settings.tts.narrate_quoted_only);
595 $('#tts_auto_generation').prop('checked', extension_settings.tts.auto_generation);600 $('#tts_auto_generation').prop('checked', extension_settings.tts.auto_generation);
596 $('#tts_periodic_auto_generation').prop('checked', extension_settings.tts.periodic_auto_generation);601 $('#tts_periodic_auto_generation').prop('checked', extension_settings.tts.periodic_auto_generation);
602 $('#tts_narrate_by_paragraphs').prop('checked', extension_settings.tts.narrate_by_paragraphs);
597 $('#tts_narrate_translated_only').prop('checked', extension_settings.tts.narrate_translated_only);603 $('#tts_narrate_translated_only').prop('checked', extension_settings.tts.narrate_translated_only);
598 $('#tts_narrate_user').prop('checked', extension_settings.tts.narrate_user);604 $('#tts_narrate_user').prop('checked', extension_settings.tts.narrate_user);
599 $('#tts_pass_asterisks').prop('checked', extension_settings.tts.pass_asterisks);605 $('#tts_pass_asterisks').prop('checked', extension_settings.tts.pass_asterisks);
@@ -663,6 +669,11 @@ function onPeriodicAutoGenerationClick() {
663 saveSettingsDebounced();669 saveSettingsDebounced();
664}670}
665671
672function onNarrateByParagraphsClick() {
673 extension_settings.tts.narrate_by_paragraphs = !!$('#tts_narrate_by_paragraphs').prop('checked');
674 saveSettingsDebounced();
675}
676
666677
667function onNarrateDialoguesClick() {678function onNarrateDialoguesClick() {
668 extension_settings.tts.narrate_dialogues_only = !!$('#tts_narrate_dialogues').prop('checked');679 extension_settings.tts.narrate_dialogues_only = !!$('#tts_narrate_dialogues').prop('checked');
@@ -841,7 +852,12 @@ async function onMessageEvent(messageId, lastCharIndex) {
841 lastChatId = context.chatId;852 lastChatId = context.chatId;
842853
843 console.debug(`Adding message from ${message.name} for TTS processing: "${message.mes}"`);854 console.debug(`Adding message from ${message.name} for TTS processing: "${message.mes}"`);
844 splitMessageAndAddToTtsJobQueue(message);855
856 if (extension_settings.tts.periodic_auto_generation) {
857 ttsJobQueue.push(message);
858 } else {
859 processAndQueueTtsMessage(message);
860 }
845}861}
846862
847async function onMessageDeleted() {863async function onMessageDeleted() {
@@ -1181,6 +1197,7 @@ jQuery(async function () {
1181 $('#tts_pass_asterisks').on('click', onPassAsterisksClick);1197 $('#tts_pass_asterisks').on('click', onPassAsterisksClick);
1182 $('#tts_auto_generation').on('click', onAutoGenerationClick);1198 $('#tts_auto_generation').on('click', onAutoGenerationClick);
1183 $('#tts_periodic_auto_generation').on('click', onPeriodicAutoGenerationClick);1199 $('#tts_periodic_auto_generation').on('click', onPeriodicAutoGenerationClick);
1200 $('#tts_narrate_by_paragraphs').on('click', onNarrateByParagraphsClick);
1184 $('#tts_narrate_user').on('click', onNarrateUserClick);1201 $('#tts_narrate_user').on('click', onNarrateUserClick);
11851202
1186 $('#playback_rate').on('input', function () {1203 $('#playback_rate').on('input', function () {
public/scripts/extensions/tts/settings.html+4 -0
@@ -30,6 +30,10 @@
30 <input type="checkbox" id="tts_periodic_auto_generation">30 <input type="checkbox" id="tts_periodic_auto_generation">
31 <small data-i18n="Narrate by paragraphs (when streaming)">Narrate by paragraphs (when streaming)</small>31 <small data-i18n="Narrate by paragraphs (when streaming)">Narrate by paragraphs (when streaming)</small>
32 </label>32 </label>
33 <label class="checkbox_label" for="tts_narrate_by_paragraphs">
34 <input type="checkbox" id="tts_narrate_by_paragraphs">
35 <small data-i18n="Narrate by paragraphs (when not streaming)">Narrate by paragraphs (when not streaming)</small>
36 </label>
33 <label class="checkbox_label" for="tts_narrate_quoted">37 <label class="checkbox_label" for="tts_narrate_quoted">
34 <input type="checkbox" id="tts_narrate_quoted">38 <input type="checkbox" id="tts_narrate_quoted">
35 <small data-i18n="Only narrate quotes">Only narrate "quotes"</small>39 <small data-i18n="Only narrate quotes">Only narrate "quotes"</small>