如何从Speech Synthesis API访问音频结果?

Naw*_*ami 7 javascript google-chrome text-to-speech speech-synthesis

语音合成API允许文本到语音功能的浏览器测试版.但是,浏览器会自动播放TTS请求的结果.如何访问音频结果以进行后处理并禁用API的默认行为?

los*_*der 1

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

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

作为Chrome 中此 API 可以访问的有效 TTS 引擎,需要支持启动/暂停/取消和恢复 TTS 请求,并将进度更新作为以下类型的事件发送:

https://developer.chrome.com/extensions/tts#type-TtsEvent

因此,除了实际播放之外,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)
Run Code Online (Sandbox Code Playgroud)