【问题标题】:How to access audio result from Speech Synthesis API?如何从语音合成 API 访问音频结果?
【发布时间】:2014-02-26 04:26:47
【问题描述】:

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

【问题讨论】:

  • 查看这个答案 - stackoverflow.com/q/9893175/1256219 - 你需要自己做一个 HTTP 请求
  • 我希望有一种方法可以以编程方式访问音频结果,以便在我的应用程序中保持一致。 HTTP 请求现在就可以了。希望 API 很快就会允许这样做。 @brandall 谢谢。
  • 该 api 不提供输出,所以你现在必须使用 getUserMedia (yuck)

标签: javascript google-chrome text-to-speech speech-synthesis


【解决方案1】:

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

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

作为 chrome 中此 API 可访问的 valid TTS Engine 是关于支持启动/暂停/取消和恢复 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)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-03-06
    • 1970-01-01
    • 2015-07-09
    • 1970-01-01
    相关资源
    最近更新 更多