This commit is contained in:
Pacharapol Withayasakpunt committed 2019-12-25 00:11:26 +07:00
1 parent 36338ed0d7
commit 7fe8f5d154
96 files changed
+21326

No files matched your search

+51
View File
@@ -0,0 +1,51 @@
declare global {
interface Window {
speak(s: string, lang?: string): void
}
}
export function speak (s: string, lang?: string) {
lang = lang || 'zh-CN'
if (process.client) {
let trueLang = ''
const voices = speechSynthesis.getVoices()
const [la1, la2] = lang.split(/-_/)
if (la2) {
const langRegex = new RegExp(`${la1}[-_]${la2}`, 'i')
const matchedLang = voices.filter((v) => langRegex.test(v.lang))
if (matchedLang.length > 0) {
trueLang = matchedLang.sort((v1, v2) => v1.localService
? -1 : v2.localService ? 1 : 0)[0].lang
}
}
if (!trueLang) {
const langRegex = new RegExp(`^${la1}`, 'i')
const matchedLang = voices.filter((v) => langRegex.test(v.lang))
if (matchedLang.length > 0) {
trueLang = matchedLang.sort((v1, v2) => v1.localService
? -1 : v2.localService ? 1 : 0)[0].lang
}
}
if (trueLang) {
const u = new SpeechSynthesisUtterance(s)
u.lang = trueLang
speechSynthesis.speak(u)
}
}
}
if (process.client) {
window.speak = speak
document.body.addEventListener('keydown', (evt) => {
if (evt.code === 'KeyS') {
const s = getSelection()
if (s) {
speak(s.toString())
}
}
})
}