Форум Flasher.ru
Ближайшие курсы в Школе RealTime
Список интенсивных курсов: [см.]  
  
Специальные предложения: [см.]  
  
 
Блоги Правила Справка Пользователи Календарь Поиск рулит! Сообщения за день Все разделы прочитаны
 

Вернуться   Форум Flasher.ru > Flash > ActionScript 3.0

Версия для печати  Отправить по электронной почте    « Предыдущая тема | Следующая тема »  
Опции темы Опции просмотра
 
Создать новую тему Ответ
Старый 26.08.2008, 14:26
Pow R. Toc H. вне форума Посмотреть профиль Отправить личное сообщение для Pow R. Toc H. Найти все сообщения от Pow R. Toc H.
  № 1  
Ответить с цитированием
Pow R. Toc H.

Регистрация: Nov 2006
Сообщений: 176
По умолчанию Как оборвать загрузку аудио файла (Sound.close())

Если делаю просто через Sound.close() выводит ошибку

Error: Error #2029: This URLStream object does not have a stream opened.

В самом же примере хелпа данное действие делается через блок try/catch:
Код:
try {
     snd.close();
     button.text = "Wait for loaded stream to finish.";
}
catch (error:IOError) {
     button.text = "Couldn't close stream " + error.message;    
}
А как всё таки правильно оборвать?

Старый 28.08.2008, 02:37
AL.exe вне форума Посмотреть профиль Отправить личное сообщение для AL.exe Посетить домашнюю страницу AL.exe Найти все сообщения от AL.exe
  № 2  
Ответить с цитированием
AL.exe
 
Аватар для AL.exe

Регистрация: Jan 2004
Адрес: Net
Сообщений: 1,049
Отправить сообщение для AL.exe с помощью ICQ
Приравнять snd к null?

Хотя в мануале говорится, что URLStream.close() должен обрывать загрузку...
__________________
Дело не в тебе


Последний раз редактировалось AL.exe; 28.08.2008 в 02:41.
Старый 29.08.2008, 15:33
kutuzov вне форума Посмотреть профиль Отправить личное сообщение для kutuzov Найти все сообщения от kutuzov
  № 3  
Ответить с цитированием
kutuzov
 
Аватар для kutuzov

Регистрация: Jul 2005
Сообщений: 135
Цитата:
Error: Error #2029: This URLStream object does not have a stream opened.
У меня данная ошибка появлялась только если пытаться закрыть соединения больше одного раза.
Если у вас после закрытия продолжает играть музыка, то это остатки забуференного.
При закрытии соединения вы можете остановить звук путем SoundChannel.stop();

Старый 30.08.2008, 04:38
konstantin.noir вне форума Посмотреть профиль Отправить личное сообщение для konstantin.noir Найти все сообщения от konstantin.noir
  № 4  
Ответить с цитированием
konstantin.noir

Регистрация: Jan 2008
Сообщений: 24
Можно сделать что-то наподобие класса-оболочки. Примерно так:
Код:
package
{
    import flash.events.EventDispatcher;
	
    //можно и не наследовать от EventDispatcher, если события от этого класса не нужны

    public class SoundWrapper extends EventDispatcher
    {
        import flash.events.Event;
        import flash.events.IOErrorEvent;
        import flash.media.Sound;
        import flash.media.SoundChannel;
        import flash.net.URLRequest;

        //экземпляр Sound
        protected var __sound:Sound;
        public function get sound():Sound
        {
            return __sound;
        }

        //экземпляр SoundChannel
        protected var __soundChannel:SoundChannel;
        public function get soundChannel():SoundChannel
        {
            return __soundChannel;
        }
        //true - если произошло событие OPEN объекта __sound
        protected var __isOpened:Boolean;
        /**
        *    если true, то при событии OPEN объекта __sound 
        *    нужно закрыть соединение
        */
        protected var __toClose:Boolean;

        //constructor
        public function SoundWrapper()
        {
            __sound = new Sound();
            __sound.addEventListener(Event.OPEN, __onSoundOpen);
            __sound.addEventListener(IOErrorEvent.IO_ERROR, __onSoundIOError);
            __isOpened = false;
            __toClose = false;
        }

        //начинает воспроизведение
        public function play():void
        {
            __soundChannel = __sound.play();
        }
		
        //останавливает воспроизведение
        public function stop():void
        {
            if(__soundChannel != null)
            {
                __soundChannel.stop();
            }
        }
		
        //начинает загрузку
        public function load(__aURLRequest:URLRequest):void
        {
            __sound.load(__aURLRequest);
        }
		
        //останавливает загрузку
        public function close():void
        {
            if(__isOpened)
            {
                __sound.close();
                __sound.removeEventListener(Event.OPEN, __onSoundOpen);
                __sound.removeEventListener(IOErrorEvent.IO_ERROR, __onSoundIOError);
            }
            else
            {
                __toClose = true;
            }
        }

        //при событии OPEN объекта __sound
        protected function __onSoundOpen(event:Event):void
        {
            __isOpened = true;
            if(__toClose)
            {
                close();
            }
        }
		
        //при событии IOError объекта __sound
        protected function __onSoundIOError(event:IOErrorEvent):void
        {
	
        }
    }
}
Соответственно, использование будет как и для Sound (этот объект будет тоже одноразовым)
Ещё можно проверять экземпляр Sound в этом классе на bytesLoaded, потому что бывают ситуации, когда загрузка началась (т.е. событие OPEN произошло) и больше ничего не грузится. Тогда при попытке закрыть тоже появляется ошибка #2029


Последний раз редактировалось konstantin.noir; 30.08.2008 в 05:01.
Старый 26.06.2009, 17:25
iznanka вне форума Посмотреть профиль Отправить личное сообщение для iznanka Найти все сообщения от iznanka
  № 5  
Ответить с цитированием
iznanka

Регистрация: Jun 2009
Сообщений: 1
спасибо большое с утра с этими ошибками мучаюсь

Создать новую тему Ответ Часовой пояс GMT +4, время: 17:31.
Быстрый переход
  « Предыдущая тема | Следующая тема »  
Опции темы
Опции просмотра

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.


 


Часовой пояс GMT +4, время: 17:31.


Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2024, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.