2

我正在创建一个语音/文本备忘录 Web 应用程序。这里: http: //gustavstromberg.se/sandbox/html5/localstorage/看看它的源码(很短,大部分是css)

这是:

  • 据我所知,语音识别仅适用于 chrome。
  • 本地存储,将笔记存储为文本。
  • 谷歌翻译文本到语音。

一切正常,但在不同的浏览器中。语音输入完美,仅在 chrome 中。文字转语音在 safari 中工作。

要将备忘录动态加载到我使用的音频>源元素中:

$("#spokenmemory").html("<source src='http://translate.google.com/translate_tts?tl=en&q="+localStorage['memory']+"' />");

(localStorage['memory'] 包含我存储的文本备忘录)

要使用谷歌的文字转语音功能播放我最近保存的备忘录,我使用:

$("#listenplay").click(function(){
    $("#spokenmemory")[0].play();
});

(spokenmemory 是我的音频标签的 id 属性)

这在 chrome 中不起作用,但如果我访问翻译链接(例如:http ://translate.google.com/translate_tts?tl=en&q= Japan,我的文本备忘录是“日本”)单独的浏览器选项卡,然后返回我的站点并重新加载页面(保存相同的文本备忘录“日本”),播放正常。多么奇怪,多么令人讨厌!

有人知道这种奇怪的行为吗?

4

2 回答 2

2

这是因为 google 对某些类型的请求进行了限制,以防止服务过载。因此,当您的浏览器尝试获取音频文件时,它不会被获取。一旦您访问翻译链接,音频文件就会被获取并缓存,这就是播放工作的原因(假设文本备忘录相同)。这是我的观察,但我不太确定。

当我使用 CURL 来获取文件时,这是我得到的回应:


403.这是一个错误。

您的客户端无权/translate_tts?q=hello从此服务器获取 URL。


于 2011-07-31T02:47:20.847 回答
0

我努力尝试了古斯塔夫,这是我经过一番研究和测试后发现的。

似乎 Chrome 在流式传输 mp3(谷歌返回的格式)时遇到了问题。我能想象的唯一解决方案是将文件(cURL?)发送到您的服务器,然后将其呈现给用户。我假设当 Google 发布官方 API 时,也会有某种格式选项。

http://code.google.com/p/chromium/issues/detail?id=45152

http://www.trygve-lie.com/blog/entry/html_5_audio_element_and(是的,播放按钮与背景颜色相同,时髦)

于 2011-05-18T23:05:36.663 回答