【问题标题】:Flash sound not playing没有播放闪光灯声音
【发布时间】:2011-02-08 06:31:10
【问题描述】:

我有如下代码

import flash.media.Sound;
import flash.media.SoundChannel;

flash.system.Security.allowDomain("*");

var request:URLRequest = new URLRequest('beep.mp3');
var beepSound:Sound = new Sound();
beepSound.load(request);

function playBeep() {
    var channel:SoundChannel = beepSound.play();
}

ExternalInterface.addCallback("beep", playBeep);

问题是当我尝试使用 JS 播放此哔声时,我收到以下错误:

Error calling method on NPObject! [plugin exception: Error in Actionscript. Use a try/catch block to find error.].

如果我在 AS3 代码中直接添加“playBeep()”,那么它会播放声音。任何线索为什么?我在嵌入代码中添加了 allowscriptaccess=always。

【问题讨论】:

    标签: flash actionscript-3


    【解决方案1】:

    是否有可能在 beep.mp3 完全加载到 swf 之前从 Javascript 调用 beep 函数?您可以通过在未准备好的 Sound 对象上调用 .play() 来获得错误。

    尝试将 .play() 调用封装在 try/catch 块中,或者将 ExternalInterface.addCallback 声明放在声音对象的 onLoadComplete 处理程序中。

    beepSound.addEventListener(Event.COMPLETE, onLoadComplete);
    beepSound.load(request);
    
    function onLoadComplete(e:Event):void{
        ExternalInterface.addCallback("beep", playBeep);
        beepSound.removeEventListener(Event.COMPLETE, onLoadComplete);
    }
    

    编辑:当然,这不考虑下一个问题 - Javascript 如何知道 mp3 已加载?在这种情况下,onLoadComplete 处理程序也可以调用

    ExternalInterface.call("notifyJSThatMP3isHere", "someArgs");
    

    其中 notifyJSThatMP3isHere 是您在 Javascript 中定义的一个函数,它让它知道现在可以尝试调用 swf 的公开“哔”函数。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-12-24
      • 1970-01-01
      • 2016-05-29
      相关资源
      最近更新 更多