as3 Sound Class Разгрузка звука - PullRequest
2 голосов
/ 27 декабря 2011

Я пробовал это в течение ЧАСОВ.Должно быть простое решение, чтобы остановить звук и выгрузить его в формате as3.

Это не весь мой код, но вкратце я загружаю случайные звуки.Мне нужны Certian Vars, чтобы быть вне функции, чтобы я мог ссылаться на них с другими функциями для индикатора выполнения.

Как выгрузить звук, чтобы я мог загрузить новый, используя те же имена безполучить ошибку во второй раз, когда она называется?

У меня есть две кнопки в этом тесте.Звук воспроизведения и кнопка остановки звука.

вот мой код:

var TheSound:Sound = new Sound();
var mySoundChannel:SoundChannel = new SoundChannel();

PlayButton.addEventListener(MouseEvent.CLICK, PlaySound);
StopButton.addEventListener(MouseEvent.CLICK, Stopsound);

function PlaySound(e:MouseEvent)
        {
        TheSound.load(new URLRequest("http://www.MyWebsite.com/Noel.mp3"));
        mySoundChannel = TheSound.play(0);
        }

function StopSound(e:MouseEvent)
        {
        delete TheSound;
        }

ЗДЕСЬ ОШИБКА Я ПОЛУЧИЛ:

Error: Error #2037: Functions called in incorrect sequence, or earlier call was unsuccessful.
    at flash.media::Sound/_load()
    at flash.media::Sound/load()
    at Untitled_fla::MainTimeline/PlaySound()[Untitled_fla.MainTimeline::frame1:21]

ОБНОВЛЕНИЕ ....Я пытался остановить звук, а затем разгрузил его, как следует

mySoundChannel.stop();
TheSound.close();

Но сейчас я получаю эту ошибку:

Error: Error #2029: This URLStream object does not have a stream opened.
    at flash.media::Sound/close()
    at Untitled_fla::MainTimeline/shut1()[Untitled_fla.MainTimeline::frame1:35]

Я верю, что я ближе.Большое спасибо за вашу помощь.

Ответы [ 2 ]

3 голосов
/ 27 декабря 2011

Чтобы остановить воспроизведение звука, сначала нужно указать экземпляру SoundChannel прекратить так:

mySoundChannel.stop();

Как только вы это сделаете, вы можете закрыть поток, используемый экземпляром звука, вызвав метод close следующим образом:

TheSound.close();

Кроме того, ключевое слово delete редко используется в as3, и вы не должны этого делать, пока некоторые методы пытаются получить доступ к переменной, которую вы удаляете. Если вы хотите избавиться от экземпляра, который в данный момент назначен вашей переменной TheSound, вы должны установить его значение в null. Таким образом, Flash правильно соберет мусор старого экземпляра Sound, который больше не используется, когда найдет подходящее время для этого.

1 голос
/ 05 января 2014

Вы можете инициализировать переменную вне функции, но определять ее как новый объект Sound каждый раз, когда вызывается функция. Таким образом, он имеет глобальную область видимости, и вы можете в любое время загрузить новый URL.

var TheSound:Sound;
var mySoundChannel:SoundChannel = new SoundChannel();

PlayButton.addEventListener(MouseEvent.CLICK, PlaySound);
StopButton.addEventListener(MouseEvent.CLICK, StopSound);

function PlaySound(e:MouseEvent)
        {
        TheSound = new Sound();
        TheSound.load(new URLRequest("http://www.MyWebsite.com/Noel.mp3"));
        mySoundChannel = TheSound.play(0);
        }

function StopSound(e:MouseEvent)
        {
        mySoundChannel.stop();
        TheSound.close()
        }
...