【问题标题】:How to play a sound in Actionscript 3 that is not in the same directory as the SWF?如何在 Actionscript 3 中播放与 SWF 不在同一目录中的声音?
【发布时间】:2010-09-11 14:50:15
【问题描述】:

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

错误 #2068:声音无效

或使用

引发 ioError

错误 #2032 流错误

// 尝试使用前缀为“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);

【问题讨论】:

    标签: flash url actionscript audio urlrequest


    【解决方案1】:

    除非您要放置完整的 url,否则不要使用 http:// 或 file://

    声音可以从完整或相对 url 加载 mp3 文件。您只需要确保您的网址正确且有效。

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

    【讨论】:

    • 对不起,我在顶部的示例中不清楚。如果我尝试您对 path = "../assets/the_song.mp3" 的建议,我会收到“错误 #2068:无效声音”的错误。 (我也刚刚尝试了“/../assets/the_song.mp3”,导致同样的错误。)
    【解决方案2】:

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

    你的实际目录结构是什么?

    【讨论】:

    • 我也没有任何编译时错误,但是当我尝试以下任一操作时出现运行时错误(并且声音不播放):path = "http:// /../assets/the_song.mp3" // ioErrorEvent, Error #2032 Stream Error path = "../assets/the_song.mp3" // Error #2068: Invalid Sound
    • 请注意,这是两个样本,看起来退货没有放入 cmets。只是想强调我收到的是运行时错误,而不是编译时错误。
    • 嗯,我也没有收到任何运行时错误。我的示例代码和您的示例代码之间的唯一区别是我没有监听任何 IO 或安全错误。你能把那些剥掉的试试看吗?
    • 我在做这个测试时意识到我需要把 MP3 移回原处。在它工作之后,我尝试重新添加安全事件,它也工作得很好。这是有道理的……因为没有流,所以出现了流错误。谢谢。
    【解决方案3】:

    你真的应该为 FireFox 下载 httpfox。此 SNIFFER 允许您查看哪些数据正在流经浏览器。你可以看到它加载的文件,包括每个文件的路径,你甚至可以嗅探 POST 和 GET 变量。这将向您显示文件是从哪里提取的,并据此您可以相应地修复您的相对路径。

    https://addons.mozilla.org/en-US/firefox/addon/6647

    重要:

    从 SWF 调用的所有外部资源都与加载到 Web 时加载它们的 html 文件相关,而不是 SWF。唯一的例外,这是从 AS3 开始的,FLV 与 SWF 相关,而不是像其他所有资源一样加载 SWF 的 HTML 文档。这就是为什么 SNIFFERS 是一个重要的工具的原因,我挠了挠头,直到我注意到 sniffer 中的 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 }

    【讨论】:

      【解决方案4】:

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

      【讨论】:

        猜你喜欢
        • 2011-01-08
        • 1970-01-01
        • 2010-09-18
        • 2010-12-09
        • 1970-01-01
        • 1970-01-01
        • 2011-09-04
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多