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мс в худшем случае. на практике етот файл будет в кэше жесткого диска скорее всего и будет почти бесплатно. но ето очень стремно - когда одну музыку надо играть в разных местах. для звуков (повторно проигрывающихся) зачем стриминг? если это звук роде там смены уровня - то пусть стримится. если ето звук выстрела - то грузи в оперативку целиком.

mr.DIMAS 25.10.2011 18:57

Ответ: Russian Sound System
 
Понято. Начинаю делать.

mr.DIMAS 25.10.2011 21:43

Ответ: Russian Sound System
 
Вложений: 2
Демка №2

Что нового?

1) Добавлена загрузка ogg
2) Прикрутил еще несколько эффектов
3) Обновленная сцена
4) Исправлены баги с EnvironmentAABB
5) В лог выводится больше инфы

Что еще делается?

1) Потоковое воспроизведение.

Почему так долго делаешь?

Универ съедает все свободное время.

Вопрос

Как получить направление взгляда из матрицы камеры?

HolyDel 25.10.2011 23:19

Ответ: Russian Sound System
 
скопировать матрицу
в скопированной матрице занулить вектор перемещения
трансформировать скопированной матрицей вектор 0,0,1.

или не?

mr.DIMAS 25.10.2011 23:36

Мне нужно получить вектор взгляда и перпендикулярный ему вектор up. Это для правильного восприятия звука слушателем - в OpenAL есть такая плюшка - звук сзади звучит приглушеннее, чем спереди. Вот мне и нужно узнать эти векторы из блицевской матрицы. Я получу ее элементы через bbGetMatElement. Заполню матрицу. Что дальше?

Народ! Ну подскажите! А то разработка стоит

impersonalis 26.10.2011 23:17

Ответ: Russian Sound System
 
http://yandex.ru/yandsearch?clid=958...Element&lr=213
может найдёшь нужное, к сожалению, сам практически не работал с сабжем

mr.DIMAS 25.12.2011 15:44

Ответ: Russian Sound System
 
Вложений: 2
Всем привет!

%Username%: Почему ты так долго не писал? Универ.

Докладываю о проделанной работе.

1) Исправил просто уйму багов. Один фатальный из-за которого звуки не правильно позиционировались( вы наверное заметили в предыдущих демках - что когда ходишь звук не пойми откуда идет )
2) Добавил еще 10 пресетов
3) Начал писать документацию
4) Самое главное: двиг теперь в отдельной длл'ке.

А теперь о том, что в архивах.

Developer.rar - собсно название говорит само за себя. Версия для разработчика. Вот ее то и нужно вам оттестировать( подключить к проекту, сделать двигающийся кубик( b3d sdk в помощь ) со звуком ).

Demo.rar - демка. "Лес", дом, ангар бетонный, и большая труба + птичьи голоса + Водка!:russian:

mr.DIMAS 25.12.2011 19:57

Ответ: Russian Sound System
 
Стоит ли делать враппер под Б3Д?

HolyDel 26.12.2011 00:59

Ответ: Russian Sound System
 
все работает. респект. бзд умеет звук играть сам, зачем еще?

mr.DIMAS 26.12.2011 01:39

В Б3Д звук куцый. Впрочем нужно еще сам движок дорабатывать, прежде чем враппер писать.

Какова вероятность загнать этот двиг за бабло буржую?

mr.DIMAS 27.12.2011 21:45

Ответ: Russian Sound System
 
Народ - это не дело. Качайте и тестируйте! Я же стараюсь и пишу юзабельную библу, а не очередной "SuperMegaGraphicsEngine100D".

зы. Перенесите тему в раздел "Проекты на C++" - ведь это уже вполне юзабельная библа.

LLI.T.A.L.K.E.R. 27.12.2011 22:55

Ответ: Russian Sound System
 
Хорошо.
Заметил недочёт: рядом с ангаром бетонным, музыка на этом расстоянии далека - играет тихо. Но когда заходишь - в ангаре эхо (да это хорошо), но вот громкость далёкой музыки увеличивается (будто уже внутри ангара играет).

Графика B3D? Думал неужели летает на нетбуке, вроде деревца есть.. Но как только ушёл на край карты и посмотрел на всё её пространство - становится заметен слайдшоу..
Ну блин у меня FIFA07 и JamesBond Night Fire летает.. Что за проблемы с оторбажением количества вертексов????

А b3d wrapper стоит сделать, если не очень сложно.

Послушал предыдущую демку. Звук намного лучше чем у самого b3d. Да и 3Д-окружение у меня не работало с обычным способом (тупо: либо громко до 5 метров, либо дальше очень тихо)

mr.DIMAS 27.12.2011 23:43

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


Графика B3D? Думал неужели летает на нетбуке, вроде деревца есть.. Но как только ушёл на край карты и посмотрел на всё её пространство - становится заметен слайдшоу..
Ну блин у меня FIFA07 и JamesBond Night Fire летает.. Что за проблемы с оторбажением количества вертексов????

А b3d wrapper стоит сделать, если не очень сложно.

Это из-за того что я загрузил уровень как аним-меш. Чтобы все EAABB найти и настроить.

Враппер сделать просто. На новогодних каникулах займусь.

Цитата:

Заметил недочёт: рядом с ангаром бетонным, музыка на этом расстоянии далека - играет тихо. Но когда заходишь - в ангаре эхо (да это хорошо), но вот громкость далёкой музыки увеличивается (будто уже внутри ангара играет).
Я об этом уже думаю. Нужно сделать учет окружения - погуглю, почитаю и тоже добавлю эту фишку.

Цитата:

Да и 3Д-окружение у меня не работало с обычным способом (тупо: либо громко до 5 метров, либо дальше очень тихо)
Поясни. Не понял о чем ты.

mr.DIMAS 27.12.2011 23:52

Ответ: Russian Sound System
 
Насчет учета геометрии уровня. Думаю сделать это простым "бросанием лучей". Смысл такой: проверяем пересечение луча с геометрией уровня( опять же математика ) т.е от звука к слушателю, если нашлась точка пересечения то:
1) Вычисляем расстояние от точки пересечения до слушателя. Пусть оно будет R
2) функцией setGain устанавливаем звуку усиление которое равно gain = clamp( user_gain - 1 / R ) , где user_gain усиление установленное пользователем, clamp функция обрезки по ( 0, 1 )

И так для всех звуков.

Можете посоветовать лучший закон изменения усиления?

UPD.
gain = clamp( user_gain - 1 / R ) не будет работать! gain = clamp( user_gain / R ) - это будет

LLI.T.A.L.K.E.R. 28.12.2011 03:49

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

Сообщение от mr.DIMAS (Сообщение 215475)
Поясни. Не понял о чем ты.

Встроенный Blitz 3Д-звук не устраивал. Будто эмуляция, близко - громкость выше, в дали - громкость уменьшается. Другие врапы не смотрел.

А отдельно для звуков учёт геометрии, бросание луча - блитз потянет?

mr.DIMAS 28.12.2011 11:09

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

А отдельно для звуков учёт геометрии, бросание луча - блитз потянет?
Потянет. LinePick достаточно быстро работает. Но нужно еще и для общего случая написать учет геометрии. Думаю нужно в двиг передавать массив вершин и массив индексов этих вершин. Строить для них Octree затем найти тот узел где находится слушатель и проверить пересечение луча с треугольниками в этом узле. В принципе не сложно. Благо с Octree уже работал. И математику неплохо знаю.

UPD
Цитата:

узел где находится слушатель и проверить пересечение луча с треугольниками в этом узле
Не, не так. Выделить все узлы лежащие на пути от слушателя до звука. И проверить пересечение луча от звука до слушателя с геометрией этих узлов. Самый лучший случай это, когда препятствие вообще существует.

Можно обойтись и без Octree, но думаю, при большом количестве звуков и сложной геометрии, производительность будет страдать.

Samodelkin 14.04.2012 17:53

Ответ: Russian Sound System
 
Попробовал подключить RSS к С++ проекту... но не получилось.

1. В инструкции описаны функции, но не указана их взаимосвязь, в какой последовательности вызывать. Хотелось бы посмотреть на исходники готового приложения, где и как вызываются функции RSS.

2. Функции либо не возвращают коды ошибок, либо они не описаны в инструкции. Поэтому программа работает, а звука нет - функции вызываю, а что они возвращают непонятно (но точно не 0).

mr.DIMAS 14.04.2012 18:08

Ответ: Russian Sound System
 
Вложений: 1
Например как во вложении. Все работает.


Ты заставил меня заняться дальнейшей разработкой движка

4yBa4Ok 14.04.2012 18:28

Ответ: Russian Sound System
 
Я тоже думаю использовать твой звуковой движок после того как встрою PhysX в Axelynx

mr.DIMAS 14.04.2012 18:41

Ответ: Russian Sound System
 
Убедили. Продолжаю разработку.

Samodelkin 14.04.2012 18:43

Ответ: Russian Sound System
 
mr.DIMAS, да все я разобрался, спасибо.

Но всетаки хелп нужно больше делать - там не все объекты расписаны. А еще коды ошибок нужны, я вот например в семпле указываю загрузить несуществующий файл, а он что то ненулевое возвращает :)

Вот такой вопрос: Чем лучше использовать твой движок вместо отдельного использования OpenAL и vorbisOGG ?
1. Вот вроде планировалось делать трассировку звука через октри, затенение звука и т. п., это еще актуально?
2. Если например железо не поддерживает EFX и EAX, то проигрываться без эффектов будет или вообще не будет? Программная эмуляция возможна?
3. Какие планы с поддержкой других платформ, например линух или может быть андроид даже?

mr.DIMAS 14.04.2012 18:59

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

1) Актуально. Соберу мысли в кучу и прикручу. Моя мат. подготовка позволяет )))
2) Насколько я знаю сейчас на большинстве компов EAX эмулируется.
3) Задела на кроссплатформенность небыло. Особо платформенно-зависимых штук в движке нету. Так что с переводом на другие платформы проблем не должно возникнуть.

mr.DIMAS 15.04.2012 14:40

Ответ: Russian Sound System
 
Небольшое изменение.

1) Все собрано в одну дллку
2) Добавлена поддержка файлов с двумя каналами. Для музыки и т.п.

http://rghost.ru/37593020

зы. буду писать в теме о всех этапах разработки


почему булка, когда я пытаюсь добавить аттач, говорит мне "Request Entity Too Large"( Error 413 ) - когда файл весит 1,5 мб. Эм?

Samodelkin 15.04.2012 15:48

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

2) Добавлена поддержка файлов с двумя каналами. Для музыки и т.п.
Музыка и так вроде работает, только надо Pitch = 2.0 поставить.

Вобщем я думаю буду RSS использовать - вроде нормально :)

HolyDel 15.04.2012 16:00

Ответ: Russian Sound System
 
что там со стриммингом?

mr.DIMAS 15.04.2012 16:00

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

Музыка и так вроде работает, только надо Pitch = 2.0 поставить.
Я про фоновую музыку, т.е без пространственного расположения
Цитата:

Сообщение от HolyDel (Сообщение 225550)
что там со стриммингом?

почти готово, как раз класс RSSMusic сделал

HolyDel 05.05.2012 19:45

Ответ: Russian Sound System
 
как дела?

mr.DIMAS 10.05.2012 22:03

Ответ: Russian Sound System
 
Дела впорядке( был на даче, такие дела ). Запилил учет геометрии при излучении звука. Ну и стриминг естественно. Но вот с интерфейсом к библе вышла такая жопа, что хоть караул кричи. И тут естественно возникает вопрос: а зачем мне ООП интерфейс? Руки так и тянутся сделать процедурный интерфейс. Тем более так возьни меньше с наследованием и прочим барахлом. Подумываю о запиле поддержки mp3

ЗЫ. Поглядел хедеры BASS'a - увидел процедурный интерфейс.
Поглядел хедеры SQUALL'a - увидел процедурный интерфейс.
Поглядел хедеры FMOD'a - увидел процедурный интерфейс.

Ваше мнение?

HolyDel 10.05.2012 22:19

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

mr.DIMAS 10.05.2012 23:30

Ответ: Russian Sound System
 
Немного поразмыслил. Сделаю процедурным. Слишком много гемора с наследованием от интерфейсов. Через денька два скину демку.

Samodelkin 11.05.2012 00:49

Ответ: Russian Sound System
 
Я считаю надо ООП! Процедурные оправданы только для совместимости с большой кучей языков и прочими трансцендентными вещами.
Цитата:

ЗЫ. Поглядел хедеры BASS'a - увидел процедурный интерфейс.
Поглядел хедеры SQUALL'a - увидел процедурный интерфейс.
Поглядел хедеры FMOD'a - увидел процедурный интерфейс.
Я на С++ работал с OpenGL и DirectX, с OpenDynamicEngine и PhysX и могу точно сказать что работать с ООП интерфейсами намного удобней. Использовать на С++ процедурные интерфейсы без особой на то причины будет большой ошибкой.

jimon 11.05.2012 01:09

Ответ: Russian Sound System
 
http://www.youtube.com/watch?v=XHosLhPEN3k
Имхо найболее удобными и правильными интерфейсами для выделенных библиотек (звуковая библиотека делает большинство операций внутри себя, а наружу прокидывает только функции наподобие проиграть звук и тд) являются процедурные интерфейсы, это позволяет не заморачивать пользователя своими уникальными познаниями в области ООП и значительно упрощает интерфейс библиотеки.

ps. самые профессиональные библиотеки имеют функции переопределения аллокаций на хипе или вообще работают с выделенным им буфером статического размера, библиотеки которые позволяют себе выделять память без разрешения пользователя показывают весьма посредственную инженерную культуру программиста в области приложений реального времени, которыми отчасти являются интерактивные игры :)

Samodelkin 11.05.2012 01:59

Ответ: Russian Sound System
 
В случае с Russian Sound System это можно назвать звуковым движком ( в перспективе ), если я правильно понимаю, там нужно создавать объекты источников звука, слушателей, объекты преграды и т. п. помойму ООП самый удобный вариант.

Вообще я помню Джон Кармак где то написал: если не уверен какой вариант лучше - сделай оба.

pax 11.05.2012 09:16

Ответ: Russian Sound System
 
ИМХО для каждого языка проще написать свою ООП обертку

mr.DIMAS 11.05.2012 11:46

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

если не уверен какой вариант лучше - сделай оба.
Кстати да. В FMOD'e есть еще заголовочник FMOD.hpp для сиплюсов, там обернуты в классы функции из fmod.h.

Samodelkin 11.05.2012 21:34

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

ps. самые профессиональные библиотеки имеют функции переопределения аллокаций на хипе или вообще работают с выделенным им буфером статического размера
А можно ссылку на какие-нибудь примеры как это можно сделать.

HolyDel 11.05.2012 22:04

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

самые профессиональные библиотеки имеют функции переопределения аллокаций на хипе или вообще работают с выделенным им буфером статического размера
хз.хз. я считаю что библиотека лучше знает как ей работать с памятью, чем клиентский код.

Samodelkin 11.05.2012 23:21

Ответ: Russian Sound System
 
Оба подхода хороши. Но мне просто сам механизм интересен.

Вот я правильно понимаю, что в куче находятся всякие методы класса и с помощью переопределения аллокаций, можно получать доступ к разному набору этих методов? Но ведь хедеры не меняются, как пользователь узнает ( до попытки скомпилировать ) к каким именно методам у него есть доступ? Или там находу генерируются указатели на методы?

Я раньше делал интерфейсы с помощью абстрактных классов и последующего наследования различных реализаций, но вобщем оказалось неудачно. Сейчас вот использую паттерн типа мост. Но просто интересно есть ли еще более гибкие варианты интерфейсов?

Кстати какое мнение насчет COM?

jimon 12.05.2012 00:19

Ответ: Russian Sound System
 
Samodelkin
а ?

пример кода библиотеки который позволяет переопределить аллокацию на хипе, плюс я в юзерской части кода показал как делать топорный аллокатор с статическим массивом
Код:

// ------------- lib

typedef void*(*mylib_mem_alloc)(size_t size);
typedef void(*mylib_mem_free)(void * ptr);

static mylib_mem_alloc mem_alloc;
static mylib_mem_free mem_free;

void mylib_setOverride(mylib_mem_alloc setA, mylib_mem_free setF)
{
        mem_alloc = setA;
        mem_free = setF;
}

struct mylib_context
{
        int a, b, c;
};

mylib_context * mylib_init()
{
        return (mylib_context*)(*mem_alloc)(sizeof(mylib_context));
}

void mylib_free(mylib_context * ctx)
{
        (*mem_free)(ctx);
}

// ------------- user code

static char mbuf[4096];
static size_t mpos = 0;

void * usr_alloc(size_t size)
{
        size_t mpos_old = mpos;
        mpos += size;
        return mbuf + mpos_old;
}

void usr_free(void * ptr)
{
}

int main()
{
        printf("mbuf ptr %p\n", mbuf);
       
        mylib_setOverride(usr_alloc, usr_free);
       
        mylib_context * ctx = mylib_init();
       
        printf("ctx ptr %p\n", (void*)ctx);
       
        mylib_free(ctx);
       
        return 0;
}

на выходе получаем два одинаковых поинтера в консоли, что означает что наш супер аллокатор памяти работает

ps. методы классов не находятся в куче, они находятся в скомпилированном коде, в куче разве что может находится vtable с указателями на методы для классов с виртуальными методами

mr.DIMAS 18.05.2012 00:15

Ответ: Russian Sound System
 
Докладываю. Полностью отлажен стриминг. Оставил классовый интерфейс - но с небольшими изменениями. Добавлены различные примитивы звукового окружения( RSSEnvironmentSphere, RSSEnvironmentCylinder ). Вскоре добавлю еще и выпуклые тела ( RSSEnvironmentHull ). Хотя с учетом множества бесплатных физ.движком есть возможность использовать их средства для проверки попадания точки в меш.

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

В итоге я опять не знаю что делать:
а) Добавлять поддержку еще кучи разных форматов
б) Пилить учет геометрии окружения. Там всякие октарные деревья для оптимизации и прочее.
в) Писать документацию

С удовольствием обсудил бы ситуацию насчет функции затухания звука.

Еще встает вопрос о лицензировании. Думаю вкрутить в двиг таймер как в Хорсе. Ну и ключики раздавать. Форумчанам бесплатно. Но это все перспективы, а нерешенные проблемы изложены выше.

Для демки уже имеется идея. Сделать что-то типа хоррора, где звук играет основную роль( ну вы же играли в Dead Space или инди SCP ).

Samodelkin 18.05.2012 17:29

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

Добавлены различные примитивы звукового окружения( RSSEnvironmentSphere, RSSEnvironmentCylinder ). Вскоре добавлю еще и выпуклые тела ( RSSEnvironmentHull ).
Я думаю нужен бокс тоже.

Цитата:

Из-за этого получается что при загораживании слушателя небольшим объектом( к примеру, ящиком ) звук как-то не естественно себя ведет.
А ты только один луч трассируешь? Я думаю этого мало...

ИМХО:
1. Можно сделать медленную но точную трассировку, когда от слушателя во все стороны трассируются лучи до каждой стены, затем из точек пересечения со стенами трассируется до каждого источника звука и микшируется. Ну вобщем принцип тот же как при трассировке света. А прохождение звука сквозь стены можно сравнить с рефракцией лучей проходящих через прозрачные объекты. Возможно звук даже можно на шейдерах посчитать.

2. Упрощенный вариант - можно трассировать только один раз от слушателя и до источника как ты делаешь, но у тебя не учитывается дифракция - когда большие волны огибают мелкие препятствия. Я думаю тебе нужно просто считать размер объекта или его бокса и если он маленький то и коэффициент затухания будет меньше. Только еще нужно учесть когда много маленьких объектов стоят вплотную это будет один большой.

3. Еще проще - вот у тебя же есть боксы с характеристиками сцены (там где эхо и т п). Так вот туда нужно добавить коэффициент затухания. Дизайнер или мэппер сам установит нужный коэффициент затухания. Тут нужно еще одну вещь добавить - надо сделать возможность взаимосвязи двух боксов. Например есть две комнаты, каждая комната это бокс со своими настройками звучания. Между комнатами есть дверь - она представляется как связь между боксами. Если дверь закрыта, то слушатель в одном боксе, будет слышать источники из второго бокса с большим коэффициентом затенения звука, чем когда дверь открыта.

Вот ну еще стоит добавить что трассировку лучей в любом случае надо делать с помощью октри - сцены то могут быть большие.

И еще вот если возвратиться к варианту 1, ведь в случае с освещением делают лайт мэп. Может что то похожее можно сделать со звуком? Например есть сцена где очень много статических источников звука, это все можно с помощью трассировок рассчитать и сгенерировать объемную карту звука, где будут описаны результирующие характеристики звука в каждой точке пространства.

Цитата:

а) Добавлять поддержку еще кучи разных форматов
Я думаю можно обойтись wav и ogg, но использовать их на 100%. Лучше напиши рекомендации как и с помощью каких утилит конвертировать из других форматов в эти два.

Цитата:

в) Писать документацию
Обязательно!

Цитата:

Еще встает вопрос о лицензировании.
Главное чтобы пользователям разрешался профит от коммерческого использования движка.

Цитата:

Думаю вкрутить в двиг таймер как в Хорсе
Бред.

mr.DIMAS 18.05.2012 18:56

Ответ: Russian Sound System
 
Фух. Прямо таки мыслей подлил в голову. Твои мысли взяты на вооружение. Начинаю запиливать!

Цитата:

Бред.
Согласен. Просто лицензия на использование и все. Без ограничений

Alex_028 27.12.2012 21:55

Ответ: Russian Sound System
 
Как идет разработка библы?
Для меня она была бы очень полезна.

mr.DIMAS 19.04.2013 18:28

Ответ: Russian Sound System
 
Вложений: 1
Проект переименован в ProjectF. Полностью переписан. Функциональный интерфейс. Тестировал много раз. Не факт что все баги нашел.

Новые фичи.

1) Препятствия для звуков. Obstacles.
2) Фильтры.
3) Атмосфера. В прямом смысле. На затухание высоких частот влияет сухость или влажность воздуха.
4) Группы звуков.
5) Поддержка разных систем координат.
6) Отладочный рендеринг.
7) Полная лояльность к ошибкам использования. Просто код ошибки ( pfSystemGetLastError() ) и никаких вылетов.
8) Воспроизведение файла по частям.
9) Мелочи.


Демки нет. Будет время - сделаю. Справки нет. В заголовочнике названия функций сами по себе справка.

Пример

Код:

#include "ProjectF.h"

void main()
{
pfSystemCreateLogFile( "ProjectF.log" );

pfSystemEnableMessagesOutputToConsole();
pfSystemEnableMessagesOutputToLogFile();

pfSystemInit();

SoundData data = pfDataLoad( "music.ogg", true );
assert( pfSystemGetLastError() == PF_NO_ERROR );

Sound music = pfCreateSound( data, true );
assert( pfSystemGetLastError() == PF_NO_ERROR );

while( !bbKeyHit( KEY_ESCAPE ))
{
        pfPlaySound( music, true );
}

pfSystemDestroy();

}


Samodelkin 27.04.2013 15:27

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

* Планируется ли ОО интерфейс, для С++ или других языков? Или только функциональный будет для большей совместимости с разными языками?
* Что насчет компиляции под Linux или другие платформы? ( я так понимаю в ProjectF только OpenAL и VorbisOGG используется или еще что-то? ).
* Помнится предыдущая версия ( еще RSS ) вылетала без предупреждения если на компьютере не поддерживался EAX или еще что-то. Вот собственно в ProjectF будет режим без EAX или какой-нибудь софтварный? Ведь не на всех компьютерах есть аппаратная поддержка, и пользователь скорей выберет тот звуковой движок, у которого есть и софтварный режим и аппаратный, чем тот у которого только аппаратный.

mr.DIMAS 10.05.2013 02:40

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

* Планируется ли ОО интерфейс, для С++ или других языков? Или только функциональный будет для большей совместимости с разными языками?
Нет. Не планируется.

Цитата:

Что насчет компиляции под Linux или другие платформы? ( я так понимаю в ProjectF только OpenAL и VorbisOGG используется или еще что-то? ).
Собрать под линукс без проблем. Используются только OpenAL и VorbisOGG. Загрузка wav сделана без windows.h

Цитата:

Помнится предыдущая версия ( еще RSS ) вылетала без предупреждения если на компьютере не поддерживался EAX или еще что-то. Вот собственно в ProjectF будет режим без EAX или какой-нибудь софтварный? Ведь не на всех компьютерах есть аппаратная поддержка, и пользователь скорей выберет тот звуковой движок, у которого есть и софтварный режим и аппаратный, чем тот у которого только аппаратный.
Софтварную реверберацию запилить не сложно. Но нужно ли? Creative же сделала эмуляцию EAX'a.

LLI.T.A.L.K.E.R. 10.05.2013 04:15

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

Или выложи как-нибудь исходник примера блитз, каким бы он не был.

mr.DIMAS 10.05.2013 16:28

Ответ: Russian Sound System
 
Запилил пример. Плюс поправил маленький баг. Все внутри. Исходник примера + бинарник + обновленная библа. Исходник с коментами. Все хорошо собирается в студии.

Пример показывает работу зон с разной реверберацией. И работу "препятствий". Соответственно "ZONE", "OBSTACLE"

http://rghost.ru/45893801

mr.DIMAS 11.05.2013 21:57

Ответ: Russian Sound System
 
Для тех кому лень качать запилил видос.

Mr_F_ 11.05.2013 22:11

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


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

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