|
|
« Предыдущая тема | Следующая тема » |
Опции темы | Опции просмотра |
|
|
|||||
Регистрация: Nov 2006
Сообщений: 176
|
Как оборвать загрузку аудио файла (Sound.close())
Если делаю просто через Sound.close() выводит ошибку
Error: Error #2029: This URLStream object does not have a stream opened. В самом же примере хелпа данное действие делается через блок try/catch: А как всё таки правильно оборвать? |
|
|||||
Приравнять snd к null?
Хотя в мануале говорится, что URLStream.close() должен обрывать загрузку...
__________________
Дело не в тебе Последний раз редактировалось AL.exe; 28.08.2008 в 02:41. |
|
|||||
Регистрация: Jul 2005
Сообщений: 135
|
Цитата:
Если у вас после закрытия продолжает играть музыка, то это остатки забуференного. При закрытии соединения вы можете остановить звук путем SoundChannel.stop(); |
|
|||||
Регистрация: 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 в этом классе на bytesLoaded, потому что бывают ситуации, когда загрузка началась (т.е. событие OPEN произошло) и больше ничего не грузится. Тогда при попытке закрыть тоже появляется ошибка #2029 Последний раз редактировалось konstantin.noir; 30.08.2008 в 05:01. |
|
|||||
Регистрация: Jun 2009
Сообщений: 1
|
спасибо большое с утра с этими ошибками мучаюсь
|
Часовой пояс GMT +4, время: 17:31. |
|
« Предыдущая тема | Следующая тема » |
Опции темы | |
Опции просмотра | |
|
|