在 OBS 浏览器源中使用语音合成Chromium 嵌入式

问题描述

我正在尝试创建一个简单的网页,该网页连接到 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 (将#修改为@)