forum.boolean.name

forum.boolean.name (http://forum.boolean.name/index.php)
-   Проекты C++ (http://forum.boolean.name/forumdisplay.php?f=56)
-   -   Russian Sound System (http://forum.boolean.name/showthread.php?t=15687)

mr.DIMAS 20.10.2011 23:23

Russian Sound System
 
Вложений: 1
В играх очень мало уделяется внимания звуку - "ай нахватаю звуков из игр и буду счастлив". Без эффектов окружения звук проигрывается сухо и в большинстве случаев не вписывается в окружение( выстрел в закрытом большом каменном помещении звучит как в чистом поле ). Я решил исправить эти недостатки и сделать чисто русскую звуковую библу - для своих! :russian:

Что пока имеется:

1) Сырая версия умеющая грузить wav файлы.
2) Куча! ( около 113 ) всевозможных эффектов окружения( EAX + EFX ) - начиная от гостинной и заканчивая космической станцией.
3) Специальная фишка( Environment AABB ) меняющая настойки при переходе из одной среды в другую. Все происходит автоматически - слушатель движется - настройки меняются.
4) Разные мелкие плюшки.

Библа написана на C++ с использованием OpenAL.

Собственно тема планируется как дневник для записи хода разработки. Здравая критика приветствуется.

Че в архиве? Демка движка - на блицевском сдк в качестве рендерера. Большая бетонная комната в ней поменьше. Ходим WSAD. "Стреляем" левой кнопкой мыши. Если выдает ошибку - ставим oalinst.exe

Ps. это всего лишь начальная стадия - у всех она бывала. тем более звук - это новое для меня поприще.
pss. исходники по требованию

FireOwl 21.10.2011 01:27

Ответ: Russian Sound System
 
Во время теста бегал старательно огибая стены, пока не заметил, что коллизии отсутствуют :-D

Mr_F_ 21.10.2011 02:02

Ответ: Russian Sound System
 
как я понял, сабж - враппер опенала с ААББ фичей и кучей готовых пресетов окружения?

Черный крыс 22.10.2011 11:39

Ответ: Russian Sound System
 
Ты главное поддержку .ogg сделай. =) А на .mp3 можно смело плюнуть =)

mr.DIMAS 22.10.2011 13:18

Ответ: Russian Sound System
 
Да! Уже работаю. Парюсь с подзагрузкой файла с диска( чтобы память не лохматить )

Morganolla 22.10.2011 14:34

Ответ: Russian Sound System
 
Требует загрузку MSVSP100.dll. Сделай без нее.

mr.DIMAS 22.10.2011 14:39

Ответ: Russian Sound System
 
Ок. У меня студия 10. Потому и требует. Сам движок после полной отладки планируется перенести в отдельную длл'ку

mr.DIMAS 22.10.2011 15:10

Ответ: Russian Sound System
 
Как вы считаете - требуется ли дозагрузка файла с диска по мере необходимости?
Мне кажется что не очень, т.к. если даже в вашей игре будет около 200 звуков. То при средней длительности в 2 секунды общий объем ИКМ( PCM ) данных будет не более 60 мб. В общем как скажете так и сделаю.

HolyDel 22.10.2011 15:29

Ответ: Russian Sound System
 
стриминг нужен обязательно. но это должны быть две разные вещи - звуки и музыка. звуки небольшие и играются часто - должны быть в оперативке. музыка играется редко и большая - она должна стримиться.

Черный крыс 22.10.2011 19:18

Ответ: Russian Sound System
 
Не обязательно разбивать на звук и музыку, достаточно в функции загрузки поставить флаг стриминга.

И еще... не забудь сделать возможность ручного управления размера буффера для стриминга

ABTOMAT 23.10.2011 16:05

Ответ: Russian Sound System
 
Хм, запустил - по-моему что в домике, что снаружи звуки играются одинаково.

mr.DIMAS 23.10.2011 21:56

Ответ: Russian Sound System
 
Ребята, объяните популярно - как правильно сделать стриминг. Я уже мозг сломал.

Кстати загрузку ogg реализовал. Осталось этот стремный стриминг сделать.

Насколько я понял нужно делать так:

Грузим кусок данных в буфер. Ставим буфер в очередь проигрывания. Как только буфер проигран, убираем его из очереди. Дальше грузим следующий кусок данных и забрасываем их в тот же буфер. Буфер обратно в очередь проигрывания. НО! Как сделать подкачку, если с семплом работают МНОГО источников? Держать вечно открытым файл и в каждом источнике хранить позицию следующего куска данных в буфере и подзагружать их с неё? На геймдеве читал статью
http://www.gamedev.ru/code/articles/OpenAL

но там говнокод - слишком сильная интеграция загрузчика и OpenAL'a.

HolyDel 24.10.2011 20:37

Ответ: Russian Sound System
 
пользователь зовет функцию OpenSoundStream
библиотека создает новый поток
в потоке открывает файл ТОЛЬКО для чтения
в функции есть код вида
Код:

while(!stream.eof())
{
if(need_reed_next_chunk())
{
stream.Read(somechunk,somechunk.size());
playchunks.add(somechunk);
}
}

естественно, со стримящейся музыкой должен работать ОДИН проигрыватель.

mr.DIMAS 24.10.2011 21:46

Ответ: Russian Sound System
 
Цитата:

естественно, со стримящейся музыкой должен работать ОДИН проигрыватель.
т.е для обычных звуков стриминг не нужен? А что насчет моего подхода - в каждом источнике хранить позицию следующего куска данных. Если нужен этот кусок - грузим из с позиции( ifstream.seek ) и записываем в буфер( файл при этом всегда открыт )? Не? Или это тормозно?

HolyDel 25.10.2011 01:37

Ответ: Russian Sound System
 
вообще все ето работать должно в других потоках, такчто не так уж и важно. ну поиск по файлу до 10мс в худшем случае. на практике етот файл будет в кэше жесткого диска скорее всего и будет почти бесплатно. но ето очень стремно - когда одну музыку надо играть в разных местах. для звуков (повторно проигрывающихся) зачем стриминг? если это звук роде там смены уровня - то пусть стримится. если ето звук выстрела - то грузи в оперативку целиком.


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

vBulletin® Version 3.6.5.
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Перевод: zCarot