TTS for ko_text when ko with abbrev

This commit is contained in:
polv committed 2026-09-07 21:31:43 +07:00
1 parent 0c628cc3f5
commit 5c25d24073
4 files changed
+157 -8

No files matched your search

@@ -1,5 +1,9 @@
<template>
<component :is="lang !== 'ko' || v.audio ? 'span' : TTS" ref="stts">
<component
:is="lang !== 'ko' || v.audio ? 'span' : TTS"
ref="stts"
:text="v.ko_text"
>
<span
v-for="(seg, i) in v[lang].split('**')"
:key="i"
+12 -6
View File
@@ -24,31 +24,36 @@ defineExpose({
playAudio,
});
const { lang = "ko-KR" } = defineProps<{
const { lang = "ko-KR", text } = defineProps<{
class?: string;
lang?: string;
text?: string;
}>();
const mainEl = useTemplateRef("main");
const audioEl = useTemplateRef("audio");
function getMainText() {
if (text) return text;
if (!mainEl.value) return "";
return mainEl.value.innerText
.replace(/[*]/gu, " ")
.replace(/[\p{Ps}\p{Pe}]/gu, "");
.replace(/[\p{Ps}\p{Pe}]/gu, "")
.trim();
}
async function playAudio() {
if (!mainEl.value) return;
const mainText = getMainText();
if (!mainText) return;
if (navigator.platform === "Win32" || !(await playAudioTTSPlugin())) {
if (!audioEl.value) return;
const url = new URL("/api/tts", location.origin);
url.searchParams.set("voice", "glow-speak:ko_kss");
url.searchParams.set("text", getMainText());
url.searchParams.set("text", mainText);
audioEl.value.src = url.href;
audioEl.value.currentTime = 0;
@@ -57,7 +62,8 @@ async function playAudio() {
}
async function playAudioTTSPlugin(): Promise<boolean> {
if (!mainEl.value) return false;
const mainText = getMainText();
if (!mainText) return false;
const voices = await getVoices(lang);
if (!voices.length) return false;
@@ -69,7 +75,7 @@ async function playAudioTTSPlugin(): Promise<boolean> {
const v = voices[Math.floor(Math.random() * voices.length)];
console.log(JSON.stringify(v));
await speak({
text: getMainText(),
text: mainText,
language: null,
rate: null,
volume: null,
+1
View File
@@ -2,6 +2,7 @@ import * as z from "zod";
export const Voc = z.object({
ko: z.string(),
ko_text: z.string().optional(),
audio: z.string().optional(),
en: z.string(),
get usage() {