问题描述
我正在尝试创建一个简单的网页,该网页连接到 websocket 并使用 speech synthesis 播放传入的消息,以通过浏览器源在 OBS 中使用。它几乎可以工作,除了 Chrome 自动播放策略不允许在用户与文档交互之前使用语音合成(或任何类型的音频自动播放):
[Deprecation] speechSynthesis.speak() without user activation is no longer allowed since M71,around December 2018. See https://www.chromestatus.com/feature/5687444770914304 for more details
这是一个交易破坏者,因为在 OBS 中,您从未真正与浏览器源进行交互,并且每次都这样做很麻烦。如果点击页面的任何部分,之后的所有语音合成都可以正常工作。我试过从 javascript 调用 document.body.click()
,但这不起作用,因为它不是受信任的事件。
我现在猜测可能 OBS 浏览器源确实以某种方式触发了用户与文档的交互,但我在 the readme 中找不到任何相关信息。
简而言之,有没有办法在 OBS 浏览器源中自动播放声音(和 tts)? Streamlabs 警报框是否做了任何奇怪的事情来使这项工作?非常感谢任何帮助!
编辑:我发布了一个简单的示例 on GitHub。在浏览器中打开 index.html
应该(尝试)在 1 秒后自动播放语音合成。在 Firefox 中它可以工作(他们的自动播放策略显然没有那么严格),但在 Chrome 或 OBS 浏览器源中却没有。
更新:我原来的帖子在这里完全走错了路。在 OBS 中远程调试页面(使用 --remote-debugging-port=9222
)后,我发现 Chromium 嵌入(默认情况下)没有任何语音合成声音。调用 window.speechSynthesis.getVoices()
会返回一个空数组,并且永远不会调用 voiceschanged
事件。
更新 2:在播放和搜索了更多内容之后,我尝试将这些标志传递给 OBS:
--enable-speech-dispatcher --enable-speech-synthesis
然后它也应该传递给 CEF,从而实现语音合成。但仍然没有声音可用(甚至没有内置的 Windows 声音,我在普通 Chrome 中确实可以听到)。
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)