|
@@ -1,7 +1,10 @@
|
|
|
<script lang="ts">
|
|
|
- import { user, settings, config } from '$lib/stores';
|
|
|
- import { createEventDispatcher, onMount, getContext } from 'svelte';
|
|
|
import { toast } from 'svelte-sonner';
|
|
|
+ import { createEventDispatcher, onMount, getContext } from 'svelte';
|
|
|
+
|
|
|
+ import { user, settings, config } from '$lib/stores';
|
|
|
+ import { getVoices as _getVoices } from '$lib/apis/audio';
|
|
|
+
|
|
|
import Switch from '$lib/components/common/Switch.svelte';
|
|
|
const dispatch = createEventDispatcher();
|
|
|
|
|
@@ -20,26 +23,26 @@
|
|
|
let voices = [];
|
|
|
let voice = '';
|
|
|
|
|
|
- const getOpenAIVoices = () => {
|
|
|
- voices = [
|
|
|
- { name: 'alloy' },
|
|
|
- { name: 'echo' },
|
|
|
- { name: 'fable' },
|
|
|
- { name: 'onyx' },
|
|
|
- { name: 'nova' },
|
|
|
- { name: 'shimmer' }
|
|
|
- ];
|
|
|
- };
|
|
|
+ const getVoices = async () => {
|
|
|
+ if ($config.audio.tts.engine === '') {
|
|
|
+ const getVoicesLoop = setInterval(async () => {
|
|
|
+ voices = await speechSynthesis.getVoices();
|
|
|
|
|
|
- const getWebAPIVoices = () => {
|
|
|
- const getVoicesLoop = setInterval(async () => {
|
|
|
- voices = await speechSynthesis.getVoices();
|
|
|
+ // do your loop
|
|
|
+ if (voices.length > 0) {
|
|
|
+ clearInterval(getVoicesLoop);
|
|
|
+ }
|
|
|
+ }, 100);
|
|
|
+ } else {
|
|
|
+ const res = await _getVoices(localStorage.token).catch((e) => {
|
|
|
+ toast.error(e);
|
|
|
+ });
|
|
|
|
|
|
- // do your loop
|
|
|
- if (voices.length > 0) {
|
|
|
- clearInterval(getVoicesLoop);
|
|
|
+ if (res) {
|
|
|
+ console.log(res);
|
|
|
+ voices = res.voices;
|
|
|
}
|
|
|
- }, 100);
|
|
|
+ }
|
|
|
};
|
|
|
|
|
|
const toggleResponseAutoPlayback = async () => {
|
|
@@ -61,11 +64,7 @@
|
|
|
voice = $settings?.audio?.tts?.voice ?? $config.audio.tts.voice ?? '';
|
|
|
nonLocalVoices = $settings.audio?.tts?.nonLocalVoices ?? false;
|
|
|
|
|
|
- if ($config.audio.tts.engine === 'openai') {
|
|
|
- getOpenAIVoices();
|
|
|
- } else {
|
|
|
- getWebAPIVoices();
|
|
|
- }
|
|
|
+ await getVoices();
|
|
|
});
|
|
|
</script>
|
|
|
|
|
@@ -195,7 +194,7 @@
|
|
|
|
|
|
<datalist id="voice-list">
|
|
|
{#each voices as voice}
|
|
|
- <option value={voice.name} />
|
|
|
+ <option value={voice.id}>{voice.name}</option>
|
|
|
{/each}
|
|
|
</datalist>
|
|
|
</div>
|