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

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

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

Регистрация: Feb 2017
Сообщений: 6
По умолчанию Корректная очистка Sound

Ребята! Подскажите, пожалуйста, по звуку - утекает память из-за звука. Звук останавливаю, ссылку на канал удаляю, но память похоже не чистится. Есть ли какие-то трики? На всякий случай кидаю кусок по остановке звука у меня в коде:

Код AS3:
_soundChannel.removeEventListener(Event.SOUND_COMPLETE, onPlaybackComplete);
_soundChannel.stop();
_soundChannel = null;
где _soundChannel это

Код AS3:
_soundChannel = _sound.play(0, getLoopsCount(), _audioTransform.soundTransform);
Буду рада любым советам и ответам!

Старый 06.02.2017, 14:26
Tails вне форума Посмотреть профиль Отправить личное сообщение для Tails Найти все сообщения от Tails
  № 2  
Ответить с цитированием
Tails
 
Аватар для Tails

блогер
Регистрация: Dec 2008
Адрес: г. Чебоксары
Сообщений: 2,259
Записей в блоге: 6
Звук потоковый?
__________________
Дети не должны знать о своих родителях

Старый 06.02.2017, 15:03
juliaplayrix вне форума Посмотреть профиль Отправить личное сообщение для juliaplayrix Найти все сообщения от juliaplayrix
  № 3  
Ответить с цитированием
juliaplayrix

Регистрация: Feb 2017
Сообщений: 6
Грузятся mp3-шки, и ещё часть звука упакована в swf-ки

Старый 06.02.2017, 15:07
juliaplayrix вне форума Посмотреть профиль Отправить личное сообщение для juliaplayrix Найти все сообщения от juliaplayrix
  № 4  
Ответить с цитированием
juliaplayrix

Регистрация: Feb 2017
Сообщений: 6
нет, не потоковый

Старый 06.02.2017, 16:30
Tails вне форума Посмотреть профиль Отправить личное сообщение для Tails Найти все сообщения от Tails
  № 5  
Ответить с цитированием
Tails
 
Аватар для Tails

блогер
Регистрация: Dec 2008
Адрес: г. Чебоксары
Сообщений: 2,259
Записей в блоге: 6
Почему вы решили, что память утекает? Сборщик мусора не чистит память сразу же, как только вы присвоите null. Выложите весь код целиком, или попробуйте собрать минимальный пример, демонстрирующий утечку.
__________________
Дети не должны знать о своих родителях

Старый 06.02.2017, 16:58
caseyryan вне форума Посмотреть профиль Отправить личное сообщение для caseyryan Найти все сообщения от caseyryan
  № 6  
Ответить с цитированием
caseyryan
 
Аватар для caseyryan

Регистрация: Jun 2012
Адрес: Новосибирск
Сообщений: 6,644
Записей в блоге: 4
Во флеше со звуком все плохо, да. Память там утекает изза того, что для каждого вызова sound.play() создается новый звуковой канал. Невозможно сохранить ссылку на старый. Мне этот механизм тоже дико не нравится и доставляет много проблем, но увы, с этим ничего не поделать.
Потом она конечно отчищается сборщиком мусора, но если каналов успевает накопиться много, то приложение в этот момент "фризит"
__________________
Ко мне можно и нужно обращаться на ты)


Последний раз редактировалось caseyryan; 06.02.2017 в 17:20.
Старый 07.02.2017, 11:47
juliaplayrix вне форума Посмотреть профиль Отправить личное сообщение для juliaplayrix Найти все сообщения от juliaplayrix
  № 7  
Ответить с цитированием
juliaplayrix

Регистрация: Feb 2017
Сообщений: 6
caseyryan, вот меня и смущает пересоздание потоков каждый раз после паузы туда-сюда. Утечка там, где снимается с паузы, в моей игре это место, когда персонаж ходит, и открываешь какое-либо окно поверх персонажа, то звуки ставятся на паузу (птицы, шаги, строительство идёт, много звука). Эту логику я менять не могу, так задумано. Просто выключать не могу громкость тоже, потому что анимации, к которым привязаны все звуки, тоже ставятся на паузу. Ну и вот если открывать закрывать окошки, то естественно пауза в звуках (вернее последующее снятие с паузы) вызывает создание нового потока. Может можно как-то всё же пооптимизировать работу звуков? Как считаете?

Добавлено через 11 минут
Tails, самый обыкновенный запуск, запуск звука

Код AS3:
_soundChannel = _sound.play(_pausePosition, getLoopsCount(), _audioTransform.soundTransform);
где _audioTransform.soundTransform, это штуковина, отдающаяя SoundTransform с заданными значениями громкости и панорамы.

Постановка на паузу такая -

Код AS3:
_playbackComplete = false;
_pausePosition = _soundChannel.position;
_currentState = AudioState.ACTUAL_PAUSED;
clearChannel();
А очистка это метод clearChannel, вот он

Код AS3:
protected function clearChannel():void
{
	if (isChannelValid()) //_soundChannel != null
	{
		_soundChannel.removeEventListener(Event.SOUND_COMPLETE, onPlaybackComplete);
		_soundChannel.stop();
		_soundChannel = null;
	}
}


Последний раз редактировалось juliaplayrix; 07.02.2017 в 12:00.
Старый 07.02.2017, 12:05
undefined вне форума Посмотреть профиль Отправить личное сообщение для undefined Найти все сообщения от undefined
  № 8  
Ответить с цитированием
undefined

Регистрация: Oct 2006
Сообщений: 2,283
Цитата:
Просто выключать не могу громкость тоже, потому что анимации, к которым привязаны все звуки, тоже ставятся на паузу.
А что мешает уменьшить громкость до 0?Вообще странная логика привязываться к позиции воспроизводимого звука.При определенных условиях звук может и не заиграть вообще.

Старый 07.02.2017, 12:13
juliaplayrix вне форума Посмотреть профиль Отправить личное сообщение для juliaplayrix Найти все сообщения от juliaplayrix
  № 9  
Ответить с цитированием
juliaplayrix

Регистрация: Feb 2017
Сообщений: 6
undefined, я имела ввиду то, что звук привязан к анимациям логически, то есть мне нужно всё равно запускать с того места, где поставили анимацию на паузу, иначе звук оторван по логике будет от своей анимации

Добавлено через 2 минуты
И так как нативного метода паузы нет, то я при паузе запоминаю место -

Код AS3:
_pausePosition = _soundChannel.position;
и потом при вызове плэй играю звук с того места -

Код AS3:
_soundChannel = _sound.play(_pausePosition, getLoopsCount(), _audioTransform.soundTransform);
И снова создаётся поток

Старый 07.02.2017, 12:37
Tails вне форума Посмотреть профиль Отправить личное сообщение для Tails Найти все сообщения от Tails
  № 10  
Ответить с цитированием
Tails
 
Аватар для Tails

блогер
Регистрация: Dec 2008
Адрес: г. Чебоксары
Сообщений: 2,259
Записей в блоге: 6
апи звука действительно не удобное, без своих велосипедов или сторонних библиотек, пользоваться им практически невозможно.

Так в чём конкретно проявляется утечка, у вас не очищается память? Вы пробовали смотреть дебаггером состояние массивов, может быть, они не очищаются где-то у вас.
__________________
Дети не должны знать о своих родителях

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

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

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


 


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


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