是否可以让网站以编程方式向用户传达欢迎信息?
假设我想在成功登录我的网站后向用户打招呼。我知道我可以录制问候消息(即作为 MP3)并播放,但我希望能够以编程方式执行此操作,因为所有用户的名称都会不同。
例如,我可能想说Welcome, John Doe
当 John Doe 登录时。
我怎么能用普通的javascript做到这一点?
注意:这不打算在生产系统中使用,而是打算用作更大的 UX 实验的一小部分。
最佳答案
对于 window.speechSynthesis.speak()
要在 Chromium 浏览器上呈现音频输出,用户需要拥有 speech-dispatcher
使用 --enable-speech-dispatcher
安装并启动浏览器旗帜。
onvoiceschanged
事件处理程序和 window.speech.synthesis.getVoices()
需要调用以填充可用语音列表。 API 并不简单。 .getVoices()
SpeechSynthesisVoice
可能需要调用两次填充 .getVoices()
返回的数组的对象.请注意,可能会调用
.speak()
。放置在队列中,而不是呈现为音频输出,这不是立即显而易见的;调用window.speechSynthesis.cancel()
清除队列,然后可能会意外呈现音频输出。然后您可以使用
window.speechSynthesis.speak()
.一段时间以来一直在尝试在 Chromium 浏览器中为 *nix 默认启用 SSML 解析;无需使用需要某种形式的 EUA 或不像啤酒那样免费的外部 Web 服务。
例如,为实现这一目标而联系过的实体和被问到的问题的列表很长
*nix 的 Firefox 也不解析 SSML。
也许随着广大用户的更多兴趣,我们最终可以默认启用此功能。
尽管有不使用外部 Web 服务的 SSML 解析的变通方法;下面的第一个链接仍未得到答复;虽然包括使用
shell_exec()
调用二进制文件的 PHP 代码关注 $_POST
到本地服务器请注意,当前的 Web Speech API 实现存在几个错误,尤其是更改
volume
位于 SpeechSynthesisUtterance
的房产对 Chromium 和 Firefox 的音频输出没有影响使用
.pause()
时还有一个 bug和 .resume()
,在尝试以编程方式解析 <break>
时遇到SSML 元素speak.js
是使用明显已死的 Web Speech API 的替代方法。它是通过移植 espeak
创建的转至 JavaScript 或 meSpeak.js
,它是 speak.js
的一个分支. espeak-ng
现在正在积极维护,例如使用 meSpeak.js
的修改版本或使用提供反射(reflect)单词的语音文件的在线词典
有趣的是,在发布该答案后,“gstatic”“字典”不再提供音频文件。
幸运的是,我们有
This is a web, Android and iOS app for collecting speech donations for the Common Voice project.
这是相当活跃的。
我们还可以在 Chromium/Chrome 和 Firefox 中使用 Native Message 来调用与原生 shell 交互并调用二进制文件本身
此代码使用 Native Messaging 以最小的修改达到预期结果
或者作为一个严厉的措施,改变二进制
(观点,有事实支持)
语音合成技术有一个庞大的网络服务市场,无论是在其生成(“[L]yrebird”)还是以盈利为目的的识别,例如“*lexa”; “*奥利”; (*bm) "*atson *luemix"; (*oogle) "*actions";等等
开源开发人员应继续努力在开源浏览器上维护开源(FOSS;FLOSS)语音合成技术。如果我们希望这些技术默认在浏览器中实现,开源开发人员必须编写代码来实现这一点。
关于javascript - 如何让我的网络浏览器以编程方式说话?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48504228/