html - 将语言添加到 Web 语音 API
问题描述
我有一个表格,可以让我输入文本并像这样说
<script>
window.addEventListener('DOMContentLoaded', () => {
const form = document.getElementById('voice-form');
const input = document.getElementById('speech');
form.addEventListener('submit', event => {
event.preventDefault();
const toSay = input.value.trim();
const msg = new SpeechSynthesisUtterance();
msg.text = toSay;
msg.lang = "sv-SE";
speechSynthesis.speak(msg);
});
});
</script>
<body>
<form id="voice-form">
<textarea type="text" id="speech"></textarea><br>
<input type="submit"/>
</form>
</body>
看起来像
但似乎 sv-SE 没有实现。
window.speechSynthesis.onvoiceschanged = function ()
{
voices = window.speechSynthesis.getVoices();
console.log("voices", voices);
}
向我展示了 21 种声音,现在我已经确认瑞典语未实施。
0: SpeechSynthesisVoice {voiceURI: "Microsoft Zira Desktop - English (United States)", name: "Microsoft Zira Desktop - English (United States)", lang: "en-US", localService: true, default: true}
1: SpeechSynthesisVoice {voiceURI: "Microsoft David Desktop - English (United States)", name: "Microsoft David Desktop - English (United States)", lang: "en-US", localService: true, default: false}
2: SpeechSynthesisVoice {voiceURI: "Google Deutsch", name: "Google Deutsch", lang: "de-DE", localService: false, default: false}
3: SpeechSynthesisVoice {voiceURI: "Google US English", name: "Google US English", lang: "en-US", localService: false, default: false}
4: SpeechSynthesisVoice {voiceURI: "Google UK English Female", name: "Google UK English Female", lang: "en-GB", localService: false, default: false}
5: SpeechSynthesisVoice {voiceURI: "Google UK English Male", name: "Google UK English Male", lang: "en-GB", localService: false, default: false}
6: SpeechSynthesisVoice {voiceURI: "Google español", name: "Google español", lang: "es-ES", localService: false, default: false}
7: SpeechSynthesisVoice {voiceURI: "Google español de Estados Unidos", name: "Google español de Estados Unidos", lang: "es-US", localService: false, default: false}
8: SpeechSynthesisVoice {voiceURI: "Google français", name: "Google français", lang: "fr-FR", localService: false, default: false}
9: SpeechSynthesisVoice {voiceURI: "Google हिन्दी", name: "Google हिन्दी", lang: "hi-IN", localService: false, default: false}
10: SpeechSynthesisVoice {voiceURI: "Google Bahasa Indonesia", name: "Google Bahasa Indonesia", lang: "id-ID", localService: false, default: false}
11: SpeechSynthesisVoice {voiceURI: "Google italiano", name: "Google italiano", lang: "it-IT", localService: false, default: false}
12: SpeechSynthesisVoice {voiceURI: "Google 日本語", name: "Google 日本語", lang: "ja-JP", localService: false, default: false}
13: SpeechSynthesisVoice {voiceURI: "Google 한국의", name: "Google 한국의", lang: "ko-KR", localService: false, default: false}
14: SpeechSynthesisVoice {voiceURI: "Google Nederlands", name: "Google Nederlands", lang: "nl-NL", localService: false, default: false}
15: SpeechSynthesisVoice {voiceURI: "Google polski", name: "Google polski", lang: "pl-PL", localService: false, default: false}
16: SpeechSynthesisVoice {voiceURI: "Google português do Brasil", name: "Google português do Brasil", lang: "pt-BR", localService: false, default: false}
17: SpeechSynthesisVoice {voiceURI: "Google русский", name: "Google русский", lang: "ru-RU", localService: false, default: false}
18: SpeechSynthesisVoice {voiceURI: "Google 普通话(中国大陆)", name: "Google 普通话(中国大陆)", lang: "zh-CN", localService: false, default: false}
19: SpeechSynthesisVoice {voiceURI: "Google 粤語(香港)", name: "Google 粤語(香港)", lang: "zh-HK", localService: false, default: false}
20: SpeechSynthesisVoice {voiceURI: "Google 國語(臺灣)", name: "Google 國語(臺灣)", lang: "zh-TW", localService: false, default: false}
是否可以在该列表中添加一种语言?
解决方案
可用语言由可用的浏览器或底层 TTS 引擎决定。例如,如果您在安装了适当语言语音的 Windows 10 上使用 Microsoft Edge,您可能会选择,而且我认为如果您安装其他语言,Chromebook 可能会有更广泛的范围。如果您需要可靠的特定语言,您可能需要转向 3rd 方语音合成(如 Polly 或 Google 的 Cloud-to-Speech),或者如果您不关心语音质量,则使用确实有瑞典语选项的mespeak / espeak .
推荐阅读
- mysql - 如何告诉 debezuim Mysql 源连接器停止重新拍摄 kafka 主题中现有表的快照?
- cakephp - CakePHP3 如何让所有客户与他们所有的活动合同有什么到期的声明
- vuetify.js - Vuetify 数据表添加水平童车栏
- zeromq - 在使用 ZeroMQ 的 majordomo 模式中是否有往返消息时间的标准,如何测量或找到该标准?
- reactjs - 单击导航栏中给出的链接时,如何在同一位置显示不同的 API 结果?
- javascript - 使用javascript检查var中的字符
- python - 如何在 PGPy 中使用公钥解密 PGP 文件
- django - 石墨烯错误消息
- javascript - 如何在 React Native 中使用 componentDidUpdate 和 shouldComponentUpdate?
- docker - VueCLI3 应用程序(nginx/docker)使用环境特定变量