0

我已经将这个问题带到了各个论坛,并且曾经在这里(它在哪里被屏蔽为题外话)。对我来说,这似乎是一个话题——一个特定的编程问题、一个软件算法和一个程序员常用的软件工具。

我有一个带有声音的 Flash SWF 动画网站。我使用Google 的 swiffy将 SWF 转换为 HTML5 。在台式电脑上,使用 Chrome、FF 和 IE,有声音,但在Mobile Safari 和 Android 浏览器中没有。而不是在我 iPad 上的 Chrome 中。

音频嵌入在 swiffy 生成的代码中,看起来像是用 base64 编码的 MP3(参见 html 中的“data:audio/mpeg;base64”和“format”:“MP3”)。

由于 swiffy 没有开发者论坛,而且我没有从反馈表中得到任何回复,我环顾四周以确定是什么阻止了 Mobile Safari、Android 浏览器和 iPad Chrome 播放声音。对于 Safari,我发现诸如“您无法预加载声音文件”之类的内容,但由于声音嵌入在 swiffy 中,因此没有要预加载的声音文件。为什么谷歌产品 Android 和 iPad Chrome 都没有声音,这也是一个谜。

我想如果谷歌没有设法解决这个问题,没有任何黑客可以解决问题,但我们很感激你的见解。

4

2 回答 2

1

我知道这对你来说已经很晚了,但我认为有些人也可能面临同样的问题并来到这篇文章。所以我想在这里提供我的答案

正如维克多所说,您可以使用 getURL 来触发外部声音。但如果我使用 getURL,我会在 javascript 端使用 Web Audio API。因为使用 Web Audio API,可以在移动设备中同时播放多个曲目。我将库 SoundJS 集成到我的项目中。

但是,由于您必须将每个音频帧都更改为 getURL 函数,因此实际上会花费您很多时间。我发现了另一个可选的想法,即您可以一劳永逸地编辑 swiffy 核心,它使用本机音频对象(但这也意味着您一次只能在移动设备中播放一种声音)。

最初,swiffy 创建原生音频对象来播放 base64 编码的声音。由于移动设备的限制,如果声音不是由输入事件触发的,则它是静音的。但是,可以重用活动的音频对象。

首先,我有一个按钮来启动动画,它还创建一个音频对象并播放它(使用零长度的 base64 编码声音);

audio = new Audio("data:audio/mpeg;base64,");
audio.play();

在 swiffy 核心脚本中,搜索关键词“new Audio”,你会看到 swiffy 播放声音的部分。不要创建一个新的音频对象,而是使用你的旧音频对象

audio.src = a.sound;
audio.play();

之后,无需修改,您的 swf 即使在移动设备中也应该能够播放声音。

但是,因为它很像一个黑客。它可能会遇到一些意想不到的问题

于 2015-10-12T02:00:47.123 回答
0

您可以将 swiffy flash 与主 HTML 文件进行通信,因此,在 actionscript 中,您可以向 javascript 发送 getURL 调用,其中您有一个隐藏的 html5 mp3 播放器,例如:

getURL("Javascript:playSound();");

在 HTML 中,在 javascript 函数内部,类似于:

 <audio controls>
 <source src="test.ogg" type="audio/ogg">
 <source src="test.mp3" type="audio/mpeg">
 </audio> 

我仍在从事这项工作,但希望对您有所帮助。

于 2015-03-06T15:25:13.840 回答