如何在ActionScript 3中播放与SWF不在同一目录中的声音?

时间:2020-03-06 14:29:06  来源:igfitidea点击:

我有一个包含SWF外部声音的项目。我想播放它们,但是每当我尝试将新的URL加载到声音对象中时,都会失败,

Error #2068: Invalid Sound

或者引发ioError与

Error #2032 Stream Error

//尝试使用前缀为" http:// .."," file:// .."," // .."和" .."的路径)

var path:String = "http://../assets/the_song.mp3";

var url:URLRequest = new URLRequest( path );

var sound:Sound = new Sound();

sound.addEventListener( IOErrorEvent.IO_ERROR, ioErrorHandler);

sound.addEventListener( SecurityErrorEvent.SECURITY_ERROR, secHandler);

sound.load(url);

解决方案

除非我们要输入完整的网址,否则请不要使用http://或者file://

声音可以从完整或者相对URL加载mp3文件。我们只需要确保网址正确无误即可。

例如,如果文件的完整路径为http://www.something.com/assets/the_song.mp3,则路径为" /assets/the_song.mp3"。

好吧,我刚刚通过将mp3放在一个目录中进行了测试:" soundTest / assets / song.mp3",然后在另一个目录中创建了一个调用mp3的swf:" soundTest / swfs / soundTest.swf",当我使用var path:String =" ../ assets / song.mp3";即可编译,没有错误。

实际目录结构是什么?

我们应该真正下载适用于FireFox的httpfox。 SNIFFER使我们可以查看浏览器中正在流动的数据。我们可以看到文件的加载,包括每个文件的路径,甚至可以嗅探POST和GET变量。这将向我们显示从中提取文件的位置,并据此为基础,我们可以相应地修复相对路径。

https://addons.mozilla.org/zh-CN/firefox/addon/6647

重要的:

从SWF调用的所有外部资产都是相对于在Web上加载而不是在SWF上加载它们的html文件。唯一的例外,这是从AS3开始的,FLV是相对于SWF的,而不是像其他所有资产一样加载SWF的HTML文档。这就是嗅探器是一个重要工具的原因,我挠了一下头,直到发现嗅探器中的URL调用了一个奇怪的路径。

以下是如何加载声音的方法。

var soundRequest:URLRequest = "path/to/file.mp3";
var s:Sound = new Sound(soundRequest);
var sChannel = s.play(0, int.MAX_VALUE); //Causes it to repeat by the highest possible number to flash.
//Above starts the sound immediatly (Streaming);

//Now to wait for completion instead, pretend we didnt start it before.
s.addEventLister(Event.SOUND_COMPLETE, onSComplete, false, 0, true);
function onSComplete(e:Event):void
{
   var sChannel = s.play(0, int.MAX_VALUE); //Causes it to repeat by the highest possible
}

在RTMP和HTTP两种协议中,路径均应为-" path / to / mp3:file.mp3"或者" path / to / mp3:file"。我能记住。请同时检查。