Javascript 如何从语音合成API访问音频结果?

Javascript 如何从语音合成API访问音频结果?,javascript,google-chrome,text-to-speech,speech-synthesis,Javascript,Google Chrome,Text To Speech,Speech Synthesis,允许在Chrome Beta中使用文本到语音功能。但是,TTS请求的结果由浏览器自动播放。如何访问音频结果进行后期处理并禁用API的默认行为 TTS系统没有标准音频输出,这似乎是有意为之,因此不太可能很快改变 要了解原因,您可以查看此界面的另一面,其中浏览器扩展可以充当TTS引擎,并提供客户端可以使用的语音: 在chrome中,作为一个可访问的API,支持启动/暂停/取消和恢复TTS请求,并将进度更新作为以下类型的事件发送: 因此,除了实际播放之外,TTS引擎没有标准的方法来指示生成的音频。根

允许在Chrome Beta中使用文本到语音功能。但是,TTS请求的结果由浏览器自动播放。如何访问音频结果进行后期处理并禁用API的默认行为

TTS系统没有标准音频输出,这似乎是有意为之,因此不太可能很快改变

要了解原因,您可以查看此界面的另一面,其中浏览器扩展可以充当TTS引擎,并提供客户端可以使用的语音:

在chrome中,作为一个可访问的API,支持启动/暂停/取消和恢复TTS请求,并将进度更新作为以下类型的事件发送:

因此,除了实际播放之外,TTS引擎没有标准的方法来指示生成的音频。根据特定的TTS引擎,它可能不使用标准音频格式,甚至不使用浏览器的正常音频设备访问。(例如,它可能正在将文本转发到平台的可访问性系统。)

如果您了解特定的TTS引擎(或创建自己的引擎),则可以构建自己的接口1来检索音频文件。但是,TTS引擎必须安装在您想要使用它的每个客户端的浏览器上。这就是为什么任何解决方案都必须将您指向特定的TTS引擎或外部TTS解决方案,如果您想要控制播放,而不仅仅是调整TTS引擎请求的有效输入(相对音高、相对音量、相对速率、性别)

注释-

1如果您为TTS引擎提供这样一个接口,它不能简单地扩展现有的TTS事件API,因为浏览器正在检查它们:

// attempt to add properties to an otherwise legal event in an Engine:
sendTTSev({'type': 'end', 'charIndex': len, foo:'george'});
...
Uncaught Error: Invalid value for argument 2. Property 'foo': Unexpected property.
    at validate (extensions::schemaUtils:34:13)
    at Object.normalizeArgumentsAndValidate  (extensions::schemaUtils:117:3)
    at Object.<anonymous> (extensions::binding:361:30)
    at sendTtsEvent (extensions::ttsEngine:17:22)
//尝试向引擎中的其他合法事件添加属性:
sendTTSev({'type':'end','charIndex':len,foo:'george'});
...
未捕获错误:参数2的值无效。属性“foo”:意外的属性。
验证时(扩展::schemaUtils:34:13)
在Object.normalizeArgumentsAndValidate(扩展::schemaUtils:117:3)
反对。(扩展:绑定:361:30)
在SendtSevent(扩展::ttsEngine:17:22)

看看这个答案--你需要自己做一个HTTP请求。我希望有一种方法可以通过编程方式访问音频结果,以便在我的应用程序中保持一致。HTTP请求现在就可以了。希望API能很快实现这一点@brandall谢谢。api不提供输出,所以您现在必须使用getUserMedia(恶心)