|
|
|||||
Регистрация: Nov 2009
Адрес: СПб
Сообщений: 2,236
|
Resume звука в том же канале
То ли у меня лыжи не едут, то ли еще что.
Мне нужно, чтобы сначала я тормознул звук, а потом запустил его с того места, где он остановился. Запускаю, естественно, через sound.play( pausePosition ). Но, как я понимаю, в этот момент создается новый SoundChannel, а мне нужно, чтобы канал остался тем же самым, потому что несколько раньше на него был повешен листенер на Event.SOUND_COMPLITE. Никто такую задачку не решал? Собственно, вот кусок кода, чтобы понимать, что именно я хочу сделать. Это фрамент класса, который оптом фризит все каналы звука, которые переданы ему через addChannel, и оптом же запускает с той позиции, где зафризил. private static var _currentSoundChannels : Dictionary = new Dictionary(); public static function addChannel( channel : SoundChannel, sound : Sound ) : void { _currentSoundChannels[channel] = { sound : sound, pausePosition : -1 }; } public static function freezeAll() : void { for ( var soundChannel : SoundChannel in _currentSoundChannels ) { _currentSoundChannels[soundChannel].pausePosition = soundChannel.position; soundChannel.stop(); } } public static function unFreezeAll() : void { for ( var soundChannel : SoundChannel in _currentSoundChannels ) { var sound : Sound = _currentSoundChannels[soundChannel].sound as Sound; var pausePosition : int = _currentSoundChannels[soundChannel].pausePosition; soundChannel = sound.play( pausePosition ); } } |
|
|||||
Lorem ipsum
|
Не выйдет, потому что play возвращает новый канал и ничего с этим не поделать.
__________________
Поймай яблоко 2! |
|
|||||
Регистрация: Nov 2009
Адрес: СПб
Сообщений: 2,236
|
Цитата:
Цитата:
Как вариант, получается знатный костыль - сохранить базовый канал, после фриза/унфриза слушать новый и, когда по нему придет событие Event.SOUND_COMPLETE, продиспатчить его по базовому каналу. Слушатель и не догадается. Добавлено через 20 часов 3 минуты Появилось кровожадное желание что-нибудь оторвать тому, кто делал саунд в AS3. )) Если звук зациклен и мы запускаем его с некоторой точки pausePosition, то в цикле проигрывается потом именно этот отрезок - от pausePosition до конца. Есть какой-нибудь способ, кроме как проиграть этот хвост один раз, а потом по SOUND_COMPLETE запуститься в цикле с нуля? |
|
|||||
Lorem ipsum
|
Очевидно, нет.
__________________
Поймай яблоко 2! |
|
|||||
Цитата:
Только если делать play(time, 1); и тогда по комплиту заново запускать. Но это же вообще шняга. Каждый раз будут новые каналы, каждый раз новая подписка на событие. Отстой короче. Цитата:
|
|
|||||
Lorem ipsum
|
Как не сработает? Речь идет о первом запуске без loop.
__________________
Поймай яблоко 2! |
|
|||||
Регистрация: Nov 2009
Адрес: СПб
Сообщений: 2,236
|
Цитата:
В принципе, работает. Столкнулся с довольно занятной проблемой - надо сбросить дамп текущих активных каналов, но у SoundChannel нет свойства, которое может его идентифицировать. Чего бы им name-то было не сделать, как у тех же дисплей-объектов? А то получается вывод десяти [object SoundChannel] и хз, что за каналы. Хотя видно, что если брейкпойнт поставить, то у каждого канала вполне себе есть идентификатор. Ну и, конечно, финализация SoundChannel'а - это отдельная песня. Последний раз редактировалось mikhailk; 17.03.2015 в 14:40. |
Часовой пояс GMT +4, время: 02:01. |
|
« Предыдущая тема | Следующая тема » |
|
|