Друзья, у меня возник неожиданный вопрос по поводу звука в играх.
Звуки же обычно хранятся сжатыми в огг или мп3, а вот в какой момент они разжимаются? Непосредственно во время проигрывания или предварительно при загрузке?
ncuxonaT писал: Друзья, у меня возник неожиданный вопрос по поводу звука в играх.
Звуки же обычно хранятся сжатыми в огг или мп3, а вот в какой момент они разжимаются? Непосредственно во время проигрывания или предварительно при загрузке?
может ошибаюсь, но mp3 и ogg это ж не архивы, они сжимаются с потерями и типа их не нужно разжимать. Прекешируются видимо во время загрузки
Они не сжаты, а перекодированы со срезом частот, недоступных человеческому уху. Почитай про декодеры на педивикии, например. Ничего разжимать не нужно, нужен только соотв. кодек в системе или в движке, чтобы воспроизвести файл. А вообще, обычно звуковые файлы кэшируются в оперативную память на этапе загрузки уровня, и читаются оттуда в процессе игры. Чтобы наглядно уловить разницу, попробуй загрузить винчестер множеством операций чтения/записи, и параллельно поиграть в кс: кз. Заранее прекэшенные звуки будут играться без задержки, а вот чаттер ботов может вызывать микрофризы при подгрузке файлов налету. Там, ЕМНИП, более 600 файлов, и все они, естественно, в звуковой кэш халфы не влезут.
Ku2zoff сжатие с потерями, кагбэ. В звуковой буфер всё пишется уже разжатое и в сыром виде. Когда игра декодирует огг/мрз - это ей решать. Но, как говорится, 7 раз воспроизведи - 1 раз разожми. )
Спасибо всем за ответы!
Полагаю, оптимальный подход - проигрываемые однократно звуки декодировать на ходу, многократно - декодировать заранее и хранить в памяти, верно?
Встречный вопрос, а как ты определишь какие звуки должны проиграться однократно, а какие нет?
Помоему логичнее исходить из размеров распакованного mp3. Если это музыка, она вполне может занять 50-60 мегабайт в распакованном виде.
Ну вот допустим у тебя S_LoadSound. Про звук известно только его имя. Как ты угадаешь что будет использоваться часто, а что не очень? Подобные допущения это признак очень хреновой архитектуры в первую очередь.
Добавлено 04-02-2018 в 00:54:
Можно реализовать аналитически, пост-фактум. В структурке звука завести счётчик вызовов. И если он превысит скажем 10 проигрываний - распаковать в wav. Впрочем это всё излишнее усложнение.
Есть у кого карта-пример по использованию выключаемых светотекстур для спирита? С исходниками. Я уже всё перепробовал, без лампочки функ_валлы не хотят переключаться. Хотя весь необходимый код из спирита взят.