PDA

Просмотр полной версии : sound.play() - искажается фоновая музыка в игре


Mintonist
20.08.2010, 13:30
При игровом процессе flash-игры должна проигрываться фоновая музыка (примерно 10 секундный фрагмент в цикле). Музыка берётся из подгружаемой swf (пробовал так же встраивать в проект [embeded]). Играю её стандартно (sound.play()) но она тормозит. Ощущение такое будто меняется частота дискретизации - очень не приятный эффект. Проигрывание той же музыки по завершению игрового процесса происходит нормально. Слышал, что flash может плохо распределить ресурсы во время множественной анимации. но я не могу сказать, что там уж очень сложная анимация (загрузка ЦП ~20%).

Встречался ли кто-нибудь с проблемой воспроизведения музыки?

tsarapkabel
20.08.2010, 15:49
Расскажи подробнее, как музыку загоняешь. SoundChannel/SoundMixer?
Может попробовать буферизировать её при подгрузке с помощью SoundLoaderContext?

OwnerOfSuccuby
20.08.2010, 15:51
Может быть ты неправильно зациклил звук - и он по циклу начинает гонять сам себя и накладывается поверх уже играющего - в этом случае обычно противный звук возникает. Попробуй посмотреть не накладуется ли звук.

Покрайней мере у меня когда то такая проблема была.

Mintonist
31.08.2010, 13:37
Класс с музыкой экспортирован в 1-й кадр swf-ки, которая подгружается к основному приложению. Соответственно оттуда извлекаю объект (класса Sound), далее в нужный момент играю - play(). Перепробовал все варианты сжатия, битрейта и проч. Пробовал так же внедрять исходную mp3 в проект (Embeded[]).

Почти уверен, что тормоза из-за того, что в момент проигрывания, довольно много анимации на сцене. В итоге придумал, как "обмануть" систему. Нужные звуки начинаю проигрывать заранее (до анимации) с нулевой громкостью, а в нужный момент регулирую громкость нужных мне звуков - никаких тормозов! Что и понятно, т.к. звуковой буфер уже на аудиокарточке, которой абсолютно всё равно, что у меня в системе происходит.

Тем не менее, думаю, что flash-player косячит с проигрванием звуков. Для нас он конечно однопоточный, но сам-то плеер многопоточный, и в чём проблема нормально отправить звуковой буфер во время сложной анимации - для меня загадка. Эксперимент провести не сложно - создайте класс, который при добавлении на сцену начнёт проигрывать ~10 сложных анимаций (MovieClip.gotoAndPlay(0)) и одновременно запустите какой-нибудь звук (Sound.play()). И добавьте его на сцену (не в первом кадре, а программно - например, по нажатию кнопки).

Всем спасибо!