diff --git a/public/scripts/extensions/tts/index.js b/public/scripts/extensions/tts/index.js
index 6d187c76b..bb45414fa 100644
--- a/public/scripts/extensions/tts/index.js
+++ b/public/scripts/extensions/tts/index.js
@@ -261,6 +261,7 @@ async function playAudioData(audioJob) {
audioElement.addEventListener('ended', completeCurrentAudioJob);
audioElement.addEventListener('canplay', () => {
console.debug('Starting TTS playback');
+ audioElement.playbackRate = extension_settings.tts.playback_rate;
audioElement.play();
});
}
@@ -538,6 +539,7 @@ const defaultSettings = {
currentProvider: 'ElevenLabs',
auto_generation: true,
narrate_user: false,
+ playback_rate: 1
};
function setTtsStatus(status, success) {
@@ -1022,6 +1024,20 @@ $(document).ready(function () {
Pass Asterisks to TTS Engine
+
+
+
+ Audio Playback Speed
+
+
+
@@ -1046,6 +1062,17 @@ $(document).ready(function () {
$('#tts_pass_asterisks').on('click', onPassAsterisksClick);
$('#tts_auto_generation').on('click', onAutoGenerationClick);
$('#tts_narrate_user').on('click', onNarrateUserClick);
+
+ $('#playback_rate').val(extension_settings.tts.playback_rate);
+ $('#playback_rate_counter').val(Number(extension_settings.tts.playback_rate).toFixed(2));
+ $('#playback_rate').on('input', function () {
+ const value = $(this).val();
+ const formattedValue = Number(value).toFixed(2);
+ extension_settings.tts.playback_rate = value;
+ $('#playback_rate_counter').val(formattedValue);
+ saveSettingsDebounced();
+ });
+
$('#tts_voices').on('click', onTtsVoicesClick);
for (const provider in ttsProviders) {
$('#tts_provider').append($('').val(provider).text(provider));