Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > ActionScript 3 > Не работает _sound.close()


Автор: webster 14.9.2008, 20:59
Всем привет!
У меня появилась такая проблема, при построении проигрывателя я создаю список воспроизведения при помощи объекта List, далее при щелчке в нем мне нужно, чтобы при выборе песни (при щелчке в списке) у меня прекращала проигрываться и ЗАГРУЖАТЬСЯ предыдущая песня и начинала воспроизводиться следующая выбранная.
Это все должен проделывать метод close() - останавливать не только вопроизведение, но и загрузку предыдущего файла, но выдается ошибка:

Код

playList.addEventListener(Event.CHANGE, listPlay);
function listPlay(event:Event):void {
    if(_sound) {
        _playing = false;
        soundPosition = 0;
        _sound.close();
    }
    _buffer = new SoundLoaderContext(10000); /* Задание 10-ти секундного буфера */
    _sound = new Sound(new URLRequest(event.target.selectedItem.data), _buffer);
    _channel = _sound.play();
    _playing = true; /* Начало проигрывания звука */
    //_sound.addEventListener(Event.COMPLETE, soundLoaded);
    _sound.addEventListener(ProgressEvent.PROGRESS, soundLoadedProgress);
}

Ошибка:
Код

Error #2029: This URLStream object does not have a stream opened.
    at flash.media::Sound/close()

Автор: bars80080 14.9.2008, 21:08
может воспроизведение останавливать .stop()
а загружать другую мелодию путём смены у этого объекта url? если это возможно конечно

Автор: webster 14.9.2008, 21:29
Да, метод stop() поддерживается классом SoundChannel, но его удобнее использовать только для создания паузы.
Мнее же нужно, чтобы прекратилась загрузка предыдущей мелодии и началась загрузка следующей выбранной, иначе ползунок загрузки начинает прыгать туда-сюда, отображая загрузку и предыдущей песни (вот ее-то мне и надо отменить) и следующей выбранной.

Автор: bars80080 14.9.2008, 21:42
может вообще уничтожить экземпляр класса? каким-нибудь remove()
или есть ли у этого элемента глубина? по логике у любого клипа должна быть, тогда создание нового объекта на ней же должно вытеснить предыдущий

но это всё конечно хитровыверты. документации нет?

Автор: webster 14.9.2008, 22:01
Кроме книги Лотта и хелпа практически ничего нет.  smile 
Я пробовал уничтожать экземпляр класса при помощи delete, но чего-то все-равно загрузка предыдущей песни не прерывается.

Вроде как решилась проблема, поставил в трай-катч:
Код

try {
_sound.close();
} catch (error:IOError) {
SoundMixer.stopAll();
}
Получается, что метод close() может прервать процесс загрузки потока данных только когда загрузка еще идет, а когда он уже закончился, то этот метод вызывает ошибку...?

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)