Звук вспышки не воспроизводится - PullRequest
0 голосов
/ 08 февраля 2011

У меня есть код как показано ниже

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.].

Если я непосредственно добавлю «playBeep ()» в код AS3, то он воспроизводит звук. Любая подсказка, почему? Я добавил allowcriptaccess = всегда в код для вставки.

1 Ответ

1 голос
/ 08 февраля 2011

Возможно ли, что вы вызываете функцию beep из вашего Javascript до того, как beep.mp3 полностью загрузится в swf?Вы можете получить ошибку, вызвав .play () для объекта Sound, который еще не готов.

Попробуйте либо обернуть вызов .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функция.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...