javascript - 如何让我的网络浏览器以编程方式说话?

标签 javascript

是否可以让网站以编程方式向用户传达欢迎信息?

假设我想在成功登录我的网站后向用户打招呼。我知道我可以录制问候消息(即作为 MP3)并播放,但我希望能够以编程方式执行此操作,因为所有用户的名称都会不同。

例如,我可能想说Welcome, John Doe当 John Doe 登录时。

我怎么能用普通的javascript做到这一点?

注意:这不打算在生产系统中使用,而是打算用作更大的 UX 实验的一小部分。

最佳答案

对于 window.speechSynthesis.speak()要在 Chromium 浏览器上呈现音频输出,用户需要拥有 speech-dispatcher 使用 --enable-speech-dispatcher 安装并启动浏览器旗帜。

  • How to use Web Speech API at chromium?
  • onvoiceschanged事件处理程序和 window.speech.synthesis.getVoices()需要调用以填充可用语音列表。 API 并不简单。 .getVoices() SpeechSynthesisVoice 可能需要调用两次填充 .getVoices() 返回的数组的对象.

    请注意,可能会调用 .speak()。放置在队列中,而不是呈现为音频输出,这不是立即显而易见的;调用window.speechSynthesis.cancel()清除队列,然后可能会意外呈现音频输出。
  • speechSynthesis.getVoices() is empty array in Chromium Fedora

  • 然后您可以使用 window.speechSynthesis.speak() .

    一段时间以来一直在尝试在 Chromium 浏览器中为 *nix 默认启用 SSML 解析;无需使用需要某种形式的 EUA 或不像啤酒那样免费的外部 Web 服务。

    例如,为实现这一目标而联系过的实体和被问到的问题的列表很长
  • SSML parsing implementation at browsers
  • How to extract SSML parsing code of espeak to implement SSML parsing at SpeechSynthesisUtterance?
  • How to set SSML parsing to on at user configuration file?
  • Why hasn't Issue 88072 and Issue 795371 been answered? Are Internals>SpeechSynthesis and Blink>Speech dead?

  • *nix 的 Firefox 也不解析 SSML。

    也许随着广大用户的更多兴趣,我们最终可以默认启用此功能。

    尽管有不使用外部 Web 服务的 SSML 解析的变通方法;下面的第一个链接仍未得到答复;虽然包括使用 shell_exec() 调用二进制文件的 PHP 代码关注 $_POST到本地服务器
  • How to programmatically send a unix socket command to a system server autospawned by browser or convert JavaScript to C++ souce code for Chromium?
  • SpeechSynthesisSSMLParser

  • 请注意,当前的 Web Speech API 实现存在几个错误,尤其是更改 volume位于 SpeechSynthesisUtterance 的房产对 Chromium 和 Firefox 的音频输出没有影响
  • Setting SpeechSynthesisUtterance.volume does not change volume of audio output of speechSynthesis.speak()
  • Setting SpeechSynthesisUtterance.volume does not change volume of audio output of speechSynthesis.speak()

  • 使用 .pause() 时还有一个 bug和 .resume() ,在尝试以编程方式解析 <break> 时遇到SSML 元素
  • "speak speak slash" is audio output of .speak() following two calls to .speak(), .pause() and .resume()

  • speak.js 是使用明显已死的 Web Speech API 的替代方法。它是通过移植 espeak 创建的转至 JavaScript 或 meSpeak.js ,它是 speak.js 的一个分支. espeak-ng 现在正在积极维护,例如使用 meSpeak.js 的修改版本
  • generate audio file with W3C Web Speech API

  • 或使用提供反射(reflect)单词的语音文件的在线词典
  • How to create or convert text to audio at chromium browser?

  • 有趣的是,在发布该答案后,“gstatic”“字典”不再提供音频文件。

    幸运的是,我们有
  • mozilla/voice-web

  • This is a web, Android and iOS app for collecting speech donations for the Common Voice project.



    这是相当活跃的。

    我们还可以在 Chromium/Chrome 和 Firefox 中使用 Native Message 来调用与原生 shell 交互并调用二进制文件本身
  • How to parse JSON from stdin at Chrome Native Messaging host?
  • How to parse JSON from stdin at Native Messaging host?
  • Chrome Native Messaging throwing error when sending a base64 string to client

  • 此代码使用 Native Messaging 以最小的修改达到预期结果
  • Chrome Native messaging with PHP

  • 或者作为一个严厉的措施,改变二进制
  • How to set options of commands called by browser?


  • (观点,有事实支持)

    语音合成技术有一个庞大的网络服务市场,无论是在其生成(“[L]yrebird”)还是以盈利为目的的识别,例如“*lexa”; “*奥利”; (*bm) "*atson *luemix"; (*oogle) "*actions";等等

    开源开发人员应继续努力在开源浏览器上维护开源(FOSS;FLOSS)语音合成技术。如果我们希望这些技术默认在浏览器中实现,开源开发人员必须编写代码来实现这一点。

    关于javascript - 如何让我的网络浏览器以编程方式说话?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48504228/

    相关文章:

    javascript - 如何将场景图实现到WebGL

    javascript - 在javascript dom中,如何获取当前窗口的目标?

    javascript - 从不希望我拥有它的组件获取鼠标移动事件

    javascript - 使用jquery隐藏html元素后RequestVerificationToken值为空

    javascript - 将部分文本字符串转换为分数

    javascript - 我正在使用 javascript 在另一个 html 页面中加载一些 html 页面。它在 Mozilla Firefox 中工作正常但在 Google Chrome 和 IE10 中不工作

    javascript - 谷歌地图折线根本不显示

    javascript - 使用 jQuery 在预制/单独页面之间滑动

    javascript - 如何显示悬停在表格行上的 Bootstrap 编辑和删除按钮

    javascript - 隐藏 tr 元素以防止在其中单击