Files
ko-grammar/docs/.vitepress/theme/components/TTS.vue
T
2026-03-25 06:24:45 +07:00

36 lines
769 B
Vue
Raw Blame History

This file contains invisible Unicode characters
This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
<template>
<span>
<span ref="main" :class="class">
<slot />
</span>
<span>
<button type="button" @click="playAudio()">🎤︎︎</button>
</span>
</span>
</template>
<script setup lang="ts">
import { useTemplateRef } from "vue";
const { lang = "ko" } = defineProps<{
class?: string;
lang?: string;
}>();
const mainEl = useTemplateRef("main");
async function playAudio() {
if (!mainEl.value) return;
const voices = speechSynthesis
.getVoices()
.filter((v) => v.lang.split(/[-_]/)[0] === lang);
if (!voices.length) return;
const u = new SpeechSynthesisUtterance(mainEl.value.innerText);
u.voice = voices[Math.floor(Math.random() * voices.length)];
speechSynthesis.speak(u);
}
</script>
<style module></style>