3

我在一家公司工作,正在尝试制作一个新的演示页面。我很想将页面简化为无法正常工作的页面,但不幸的是,它与我服务器上的各种脚本以及必须转到相同域名的 AJAX 请求相关联。但是,我将尽可能地描述正在发生的事情。

本质上,我的会话代码几乎按预期工作。这不是问题所在。问题是单击“说出来”按钮后播放的音频在 Chrome 中按预期工作,但 firefox 仅播放第一个音频请求,即使在随后的具有不同文本的请求之后也是如此,并且在 Internet Explorer 中没有播放任何内容。相关代码都在 head 部分,其中一组三个函数控制所有正在发生的事情。当点击“Say It”按钮时调用 formSubmit(),一旦加载音频就会调用 onAudioLoad(),而 limitText() 确实限制了人们可以输入的文本数量。

因此 formSumbmit() 向我的服务器脚本发送一个 AJAX 请求,该脚本返回以下两种情况之一:

1) 带有正确 src 属性的源元素的 HTML5 音频标签,或 2) 表示会话已过期的 p 元素。

我只是想让音频在没有可怕回声的情况下播放(这可能是也可能不是由实际的 mp3/ogg 转换软件引起的),并让它在所有浏览器上按预期工作。

onAudioLoad 发送删除音频的请求,以避免人们太容易窃取我们的产品:D

预期行为:

演示文本区域中存在的任何文本都将发送到服务器端进行合成,然后通过客户端的扬声器播放音频。

如果您有任何进一步的问题,我会定期回来查看。

这是演示的网址:

http://www.cepstral.com/demos/temp/cepstral_tts_demo.php

感谢您的任何帮助。

终极问题:

为什么这在 Chrome 中按预期工作,但在 Firefox 11 和 IE9 中却没有?

在 Firefox 中,它只会播放第一个音频请求。

在 IE9 中不播放音频。

我知道音频永远不会安全。我们只是想让普通用户更难。

4

1 回答 1

2

在试图找出发生了什么并在聊天(成绩单)中取得联系之后,我得出了以下结论:这是一个缓存问题。

当尝试更改 FF 中的文本并请求新的声音文件时,它仍会播放旧声音。通过检查请求和响应,看起来您总是使用相同的文件名(对于音频文件)进行响应,尽管声音本身不同。

当下载该声音文件或在新选项卡中打开它并在没有缓存的情况下刷新它时,它会播放正确的声音(带有新文本),所以我很确定缓存。

您应该找到一种方法来为不同的文本返回唯一的文件名,以防止浏览器播放缓存的版本。

在我的机器上的 IE 上测试它时也是如此。

由 OP 编辑

想要补充一点,它无法在我的 IE 上运行的原因似乎是我使用的是 Windows 7 N。在 IE9 的发行说明中指出,Windows 7 N 需要特殊更新才能播放 HTML5 视频。他们没有提到 HTML5 音频,但我认为这是问题所在。

于 2012-04-04T20:03:55.733 回答