From f88a86f9b071ab8af7c132bce5c0aa643b60e36a Mon Sep 17 00:00:00 2001 From: Zohaib Rauf Date: Sun, 8 Sep 2024 22:57:33 -0700 Subject: [PATCH 1/4] Fixed build error --- .../chat/MessageInput/CallOverlay.svelte | 59 ++++++++++++++++++- 1 file changed, 57 insertions(+), 2 deletions(-) diff --git a/src/lib/components/chat/MessageInput/CallOverlay.svelte b/src/lib/components/chat/MessageInput/CallOverlay.svelte index 320efa922..b16b64a46 100644 --- a/src/lib/components/chat/MessageInput/CallOverlay.svelte +++ b/src/lib/components/chat/MessageInput/CallOverlay.svelte @@ -52,11 +52,36 @@ let videoInputDevices = []; let selectedVideoInputDeviceId = null; + let speechRate = 1; + let showSpeedMenu = false; + + const speedOptions = [0.5, 1, 1.5, 2, 2.5, 3]; + + const toggleSpeedMenu = () => { + showSpeedMenu = !showSpeedMenu; + }; + + const setSpeedRate = (rate: number) => { + speechRate = rate; + showSpeedMenu = false; + updateAudioSpeed(); + }; + + const updateAudioSpeed = () => { + if (currentUtterance) { + currentUtterance.rate = speechRate; + } + const audioElement = document.getElementById('audioElement') as HTMLAudioElement; + if (audioElement) { + audioElement.playbackRate = speechRate; + } + }; + const getVideoInputDevices = async () => { const devices = await navigator.mediaDevices.enumerateDevices(); videoInputDevices = devices.filter((device) => device.kind === 'videoinput'); - if (!!navigator.mediaDevices.getDisplayMedia) { + if (navigator.mediaDevices.getDisplayMedia) { videoInputDevices = [ ...videoInputDevices, { @@ -360,6 +385,7 @@ ?.at(0) ?? undefined; currentUtterance = new SpeechSynthesisUtterance(content); + currentUtterance.rate = speechRate; if (voice) { currentUtterance.voice = voice; @@ -381,11 +407,12 @@ const playAudio = (audio) => { if ($showCallOverlay) { return new Promise((resolve) => { - const audioElement = document.getElementById('audioElement'); + const audioElement = document.getElementById('audioElement') as HTMLAudioElement; if (audioElement) { audioElement.src = audio.src; audioElement.muted = true; + audioElement.playbackRate = speechRate; audioElement .play() @@ -918,6 +945,34 @@ +
+ + {#if showSpeedMenu} +
showSpeedMenu = false} + role="menu" + tabindex="0" + > + {#each speedOptions as speed} + + {/each} +
+ {/if} +
+