Привет.
Для казуальной игры нужен простой звуковой движок, никакого 3d. Volume и Pan - больше ничего не требуется. Поэтому хочу написать сам. Для windows взял DirectSound, если будет переноситься на другие ос - OpenAL.
Для загрузки ogg взял Ogg Vorbis. Для загрузки wav - пока не знаю, но нужен ли вообще этот wav? Может всё в .ogg хранить?
Звуковые ресурсы подразделяются на два вида - звуковые эффекты (щелчок кнопки, взрывы, шаги и т.д.) и музыка (фоновая музыка, диалоги). Насколько я понял, звуковые эффекты можно целиком загружать в оперативную память (т.е. создавать статические вторичные буфферы в DirectSound) и запускать при необходимости.
С музыкой и диалогами, насколько я понял, нужен стриминг, т.е. создавать потоковые вторичные буферы и стримить в них данные периодически.
Вопрос вот в чём. Стоил ли заморачиваться с потоковыми буферами или можно все звуковые ресурсы целиком загрузить в в статические буферы и не париться?
Если всё же лучше стримить длинные звуки (музыку, речь), то данные всё равно в раскодированном виде деражать в оперативке или же с жёского диска их стримить, налету раскодируя Ogg Vorbis?
Спасибо.
Riddik
возьми Squall и не парься. http://www.gamedev.ru/projects/forum/?id=61955
Aroch
Спасибо, но лучше немного попариться но сделать самому)
>Для загрузки wav - пока не знаю, но нужен ли вообще этот wav?
Полностью самостоятельно загрузить wav легче, чем даже ogg с использованием библиотеки. Так что это вопрос 10 строк кода.
>Вопрос вот в чём. Стоил ли заморачиваться с потоковыми буферами или можно все звуковые ресурсы целиком загрузить в в статические буферы и не париться?
Для начала не парься, а когда понадобится, тогда запарься. Раскодированная музыка на две минуты займёт 10 МБ.
>Если всё же лучше стримить длинные звуки (музыку, речь), то данные всё равно в раскодированном виде деражать в оперативке или же с жёского диска их стримить, налету раскодируя Ogg Vorbis?
В оперативке при стримминге смысла хранить нет. Обычно читают сразу с жёсткого диска и скармливают декодеру постепенно.
Riddik
> Стоил ли заморачиваться с потоковыми буферами или можно все звуковые ресурсы целиком загрузить в в статические буферы и не париться?
Нафига писать движок ущербнее чем он нужен?
Потоковый звук отжирает десятки мегабайт, застрименный - вряд ли больше 1Мб на все одновременно производимые звуки.
Сам движок довольно прост в написании - на openAL я его сделал за три дня в 2008 (я обычно медлительный, люди порой за день все форматы успевают найти и "подхватить").
CasDev
Спасибо!
gammaker
> Полностью самостоятельно загрузить wav легче, чем даже ogg с использованием
> библиотеки. Так что это вопрос 10 строк кода.
Если wav с компрессией, тогда как?
>Если wav с компрессией, тогда как?
wav с компрессией - это уже извращение. Хватит несжатого wav + сжатый ogg. Хотя и вообще wav не нужен, но на всякий случай можешь и реализовать.
o.k:)
Я бы посоветовал лучше сразу писать на OpenAL. Либа сама перейдет в софтварный режим DirectSound'а, если не найдет родных драйверов. Поэтому смысла писать отдельный двиг под DirectSound не вижу. К тому же он уже давненько deprecated. Плюс сразу получаем кроссплатформенность.
Riddik
А что с Юнити не срослось?
fullspektr
> на OpenAL
На некоторых старых системах (на Windows XP) даже родные примеры из OpenAL SDK не запускаются, нужны дрова. А требования - чтобы от XP на любом хламе всё работало. Не у всех пользователей есть. Может я и не допонял чего-то, как заставить OpenAL работать всюду.
fullspektr
> А что с Юнити не срослось?
Срослось.
Это уже следующий проект, его без Unity делаем)
Riddik
чтобы OpenAL везде работал надо с собой таскать и устанавливать этот пакет oalinst
Duncon
Могу ошибаться, но вроде в этом случае не подхватываются "железные" драйвера. В итоге будем иметь только софтварную реализацию. Ведь OpenAL ищет рядом сначала драйвера от Creative или Nvidia, если находит, то включается режим Hardware, иначе переходит в режим Software. Не таскать же с собой еще драйвера от вендоров.
Многие игры устанавливают же этот дистрибутив, да и можно запускать установку в фоне, там есть специальный ключ для этого
Riddik
> Для загрузки wav - пока не знаю, но нужен ли вообще этот wav?
несжатый Wav очень просто грузится. в мсдн где-то был пример.
Riddik
> Если wav с компрессией, тогда как?
он тебе не нужен
а не сжатый ты можешь использовать для дебага, в релизе он вряд ли пригодится
Спасибо, будет две реализации - DirectSound и OpenAL.
Насчёт DirectSound. Как правильно реалиовать звуковые инстансы? Т.е. один буффер с данными, например, звука падающего камня. Камнепад - каждый камень при падении "издаёт" этот звук.
Правильно ли будет вызывать directSound->DuplicateSoundBuffer()? при каждом запуске звукового эффекта?
Не гуглится, я бы не задавал.
OpenAL не взлетает без установки oalinst на голой XP, на wrap_oal.dll ругается. Если будет можно ставить oalinst в фоне, тогда нет проблем. Инсталлер не я делаю, а издатель, не факт, что он захочет ставить oalinst на машинах своих клиентов.
Тема в архиве.