Собственно две последних недели были потрачены не зря. За это время я пришил к движку поддержку звука на основе библиотечки Audiere. И скажу я вам это было весьма не лёгким занятием :) Траблов было не много, а очень много.
Ну для начала после приделывания звуковых эффектов приложения начало самопроизвольно падать во внутренней audiere.dll. Разматывая стек в дебаг-режиме я обнаружил что эти падения связаны с тем, что звуковой буфер самостоятельно может приравняться к NULL. От чего это происходит – понять так и не удалось, проблему же решил просто – при обнаружении NULL звуковой буфер перебиндивается к нужному sound source, тем самым восстанавливая указатель.
Далее я случайно заметил что память у меня подтекает. И сурово так – 1-2 метра на 10 свежедобавленных роботов. Начал гуглить проблему – конечно весь интернет был усеян об течках памяти в аудиере. Решения проблемы не было. И вот когда я уже начал подумывать об смене саунд-движка – я наткнулся на одинокий пост на каком то буржуйском форуме, где какойто умелец пересобрал dll аудиера и вроде как пофиксел проблему с утечками. Я конечно её сразу скачал и начал тестировать – и, о чудо! Эти кошмарные утечки действительно прекратились :)
Но это было только начало мучений. Потом я начал прикручивать Sounds Streams – это новая сущность моего движка, позволяющие эмулировать 3d звук с помощью изменения Volume, Pan и Pitch (сам audiere 3д звук не умеет). Особенность их в том что они ПОСТОЯННО должны менять pitch. И вот тут началась жесть :)
При большом количестве роботов находящихся рядом и синхронно проигрывающие один и тот же саунд мотора – звук в колонках начал трещать. И заметно так, с надрывом. Вот что я тут не делал: и затухатие дальних источников, и интеллектуальное отсечение не важных звуков, и настройки самого звука, всё было бестолку. Решение оказалось простым – я забыл что отключил аппаратное ускорение звука в системе. Всего навсего )
Поставил ускорение на максимум – никаких щелчков и хрипения колонок :)
Но всю эту хитромудрую систему я оставил, всё таки существенно снижает нагрузку на проц.
Вообщем что в итоге за эти две недели:
1) Прикрутил поддержку как управляемых звуков (Sound Streams) так и нет (Sound Effects). Различие между ними в том, что стримы можно контролировать на всём протяжении их работы, а на эффекты после их запуска уже повлиять никак нельзя. Вот такой оптимизейшн.
2) Сделал самопальную поддержку 3D звука.
3) Сделал наконец то Collision Report физики с поддержкой проталкивания информации по всех иерархии объектов от agePhysicsObject до высокоуровневых ageDynObject и ageActor. Это всё надо для того что когда например бочка падает – проигрывался звук падения бочки )
4) Сделал архиудобную систему загрузки и проигрывания звуков - Sound Mapper. (правда надо её будет помониторить в VTunes на предмет оверхеда производительности… но на глаз с фпс пока всё вроде в полном порядке, никаких проседаний не замечено)
Вообще надо сказать API у Audiere весьма приятный. Если бы он не был таким удобным я бы уже на середине своих страданий забил бы на него :)
Видео же со звуком пока НЕ будет. На днях выпущу звуковой патч для демки03, тогда и видео выложу.
Offtopic
В последнее время стал замечать, что во время отладки игры, я пока не завалю 3-4 волны роботов не отключаю игру, хотя это и не требовалось для отладки фичи… странно, к чему бы это…
Подписаться на:
Комментарии к сообщению (Atom)

Комментариев нет:
Отправить комментарий