【问题标题】:as3 load, play and mute external swfas3 加载、播放和静音外部 swf
【发布时间】:2010-08-16 12:12:04
【问题描述】:

我有一个我没有源文件的文件 - 一个带有令人讨厌的声音介绍的 flash 标头,我需要将所有声音静音。如果没有来源,我能做的事情就很有限。我有一些 as3 代码,用于尝试将 swf 加载到并静音(在 FlashDevelop 中构建)。这是有问题的代码:

package 
{
import flash.display.MovieClip;
import flash.display.Sprite;
import flash.events.Event;
import flash.media.SoundTransform;
import flash.net.URLRequest;
import flash.display.Loader;
import flash.media.SoundTransform;

public class Main extends Sprite 
{
    private var mLoader:Loader;
    private var mc1:MovieClip;
    private var holder:Sprite;
    private var mSound:SoundTransform;

    public function Main():void 
    {
        if (stage) init();
        else addEventListener(Event.ADDED_TO_STAGE, init);
    }

    private function init(e:Event = null):void 
    {
        var mRequest:URLRequest = new URLRequest('header_v8.swf');
        mLoader = new Loader();
        mLoader.load(mRequest);
        holder = new Sprite();
        holder.addChild(mLoader);
        addChild(holder);
        mSound = new SoundTransform(0);
        holder.soundTransform = mSound;

    }

}

}

上面的这段代码仍然播放音频,并且没有显示原始的 swf。所以,我的问题是:

如何使外部音频静音? 如何像直接查看时一样显示外部 swf?

任何有用的示例/文档的建议或指针将不胜感激

【问题讨论】:

    标签: actionscript-3 audio


    【解决方案1】:

    您是在调试播放器中运行它吗?查看您的代码,它似乎应该在这一行至少抛出一个错误:

    holder.addChild(mLoader);
    

    似乎holder 那时还没有初始化。也许有一个你没有看到的错误会破坏你的代码......静音的代码看起来是正确的(虽然我没有尝试过)。也许您可以将其应用于holder 而不是内容本身;否则,您的标头 swf 可能会部分加载并在调用完整处理程序之前开始播放声音。

    另外SoundMixer 可以让你控制全局音量(我提到它是因为虽然它可能不是这样做的理想方式,但也许它只是在这里工作)。

    编辑

    这在我做的快速测试中有效地使加载的 swf 静音:

    var mRequest:URLRequest = new URLRequest('banner.swf');
    var mLoader:Loader = new Loader();
    mLoader.load(mRequest);
    var holder:Sprite = new Sprite();
    holder.addChild(mLoader);
    addChild(holder);
    var t:SoundTransform = new SoundTransform(0);
    holder.soundTransform = t;
    

    我删除了完整的处理程序,因为它不再需要了。

    【讨论】:

    • 回过头来看,持有者变量并不是真正需要的。删除它并简单地使用 addChild(mLoader);它按预期加载了 swf。但是,在调试播放器中查看后,我发现加载的 swf 是 AVM1Movie。我将不得不对如何正确加载和静音进行更多研究。
    • 在这种情况下,您无法直接与其通信。但也许(我从来没有这样做过)拥有一个持有人Sprite 并将其静音可以使加载的 swf 静音。
    • 我试过了(见已编辑的 OP),但它仍在播放加载的 swf 中的音频。有什么建议吗?
    • 太棒了..谢谢。我编辑了 OP 以显示工作代码。再次感谢
    • 没问题。我很高兴这对您有所帮助。