浏览代码

refac: audio

Timothy J. Baek 11 月之前
父节点
当前提交
27417dd771

+ 1 - 10
src/lib/components/admin/Settings/Audio.svelte

@@ -234,7 +234,7 @@
 								bind:value={TTS_VOICE}
 							>
 								<option value="" selected={TTS_VOICE !== ''}>{$i18n.t('Default')}</option>
-								{#each voices.filter((v) => nonLocalVoices || v.localService === true) as voice}
+								{#each voices as voice}
 									<option
 										value={voice.voiceURI}
 										class="bg-gray-100 dark:bg-gray-700"
@@ -244,15 +244,6 @@
 							</select>
 						</div>
 					</div>
-					<div class="flex items-center justify-between my-1.5">
-						<div class="text-xs">
-							{$i18n.t('Allow non-local voices')}
-						</div>
-
-						<div class="mt-1">
-							<Switch bind:state={nonLocalVoices} />
-						</div>
-					</div>
 				</div>
 			{:else if TTS_ENGINE === 'openai'}
 				<div class=" flex gap-2">

+ 8 - 1
src/lib/components/chat/MessageInput.svelte

@@ -913,7 +913,14 @@
 													try {
 														await navigator.mediaDevices.getUserMedia({ audio: true, video: true });
 														// If the user grants the permission, proceed to show the call overlay
-														showCallOverlay.set(true);
+
+														if ($config.audio.stt.engine !== 'web') {
+															showCallOverlay.set(true);
+														} else {
+															toast.error(
+																$i18n.t('Call feature is not supported when using Web STT engine')
+															);
+														}
 													} catch (err) {
 														// If the user denies the permission or an error occurs, show an error message
 														toast.error($i18n.t('Permission denied when accessing media devices'));

+ 5 - 4
src/lib/components/chat/MessageInput/CallOverlay.svelte

@@ -221,11 +221,12 @@
 							)
 							?.at(0) ?? undefined;
 
-					console.log($settings?.audio?.tts?.voice ?? $config?.audio?.tts?.voice);
-					console.log(voices);
-
 					currentUtterance = new SpeechSynthesisUtterance(content);
-					currentUtterance.voice = voice;
+
+					if (voice) {
+						currentUtterance.voice = voice;
+					}
+
 					speechSynthesis.speak(currentUtterance);
 				}
 			}, 100);

+ 9 - 1
src/lib/components/chat/Messages/ResponseMessage.svelte

@@ -279,15 +279,23 @@
 								)
 								?.at(0) ?? undefined;
 
+						console.log(voice);
+
 						const speak = new SpeechSynthesisUtterance(message.content);
 
+						console.log(speak);
+
 						speak.onend = () => {
 							speaking = null;
 							if ($settings.conversationMode) {
 								document.getElementById('voice-input-button')?.click();
 							}
 						};
-						speak.voice = voice;
+
+						if (voice) {
+							speak.voice = voice;
+						}
+
 						speechSynthesis.speak(speak);
 					}
 				}, 100);