![]() |
Russian Sound System
Вложений: 1
В играх очень мало уделяется внимания звуку - "ай нахватаю звуков из игр и буду счастлив". Без эффектов окружения звук проигрывается сухо и в большинстве случаев не вписывается в окружение( выстрел в закрытом большом каменном помещении звучит как в чистом поле ). Я решил исправить эти недостатки и сделать чисто русскую звуковую библу - для своих! :russian:
Что пока имеется: 1) Сырая версия умеющая грузить wav файлы. 2) Куча! ( около 113 ) всевозможных эффектов окружения( EAX + EFX ) - начиная от гостинной и заканчивая космической станцией. 3) Специальная фишка( Environment AABB ) меняющая настойки при переходе из одной среды в другую. Все происходит автоматически - слушатель движется - настройки меняются. 4) Разные мелкие плюшки. Библа написана на C++ с использованием OpenAL. Собственно тема планируется как дневник для записи хода разработки. Здравая критика приветствуется. Че в архиве? Демка движка - на блицевском сдк в качестве рендерера. Большая бетонная комната в ней поменьше. Ходим WSAD. "Стреляем" левой кнопкой мыши. Если выдает ошибку - ставим oalinst.exe Ps. это всего лишь начальная стадия - у всех она бывала. тем более звук - это новое для меня поприще. pss. исходники по требованию |
Ответ: Russian Sound System
|
Ответ: Russian Sound System
как я понял, сабж - враппер опенала с ААББ фичей и кучей готовых пресетов окружения?
|
Ответ: Russian Sound System
Ты главное поддержку .ogg сделай. =) А на .mp3 можно смело плюнуть =)
|
Ответ: Russian Sound System
Да! Уже работаю. Парюсь с подзагрузкой файла с диска( чтобы память не лохматить )
|
Ответ: Russian Sound System
Требует загрузку MSVSP100.dll. Сделай без нее.
|
Ответ: Russian Sound System
Ок. У меня студия 10. Потому и требует. Сам движок после полной отладки планируется перенести в отдельную длл'ку
|
Ответ: Russian Sound System
Как вы считаете - требуется ли дозагрузка файла с диска по мере необходимости?
Мне кажется что не очень, т.к. если даже в вашей игре будет около 200 звуков. То при средней длительности в 2 секунды общий объем ИКМ( PCM ) данных будет не более 60 мб. В общем как скажете так и сделаю. |
Ответ: Russian Sound System
стриминг нужен обязательно. но это должны быть две разные вещи - звуки и музыка. звуки небольшие и играются часто - должны быть в оперативке. музыка играется редко и большая - она должна стримиться.
|
Ответ: Russian Sound System
Не обязательно разбивать на звук и музыку, достаточно в функции загрузки поставить флаг стриминга.
И еще... не забудь сделать возможность ручного управления размера буффера для стриминга |
Ответ: Russian Sound System
Хм, запустил - по-моему что в домике, что снаружи звуки играются одинаково.
|
Ответ: Russian Sound System
Ребята, объяните популярно - как правильно сделать стриминг. Я уже мозг сломал.
Кстати загрузку ogg реализовал. Осталось этот стремный стриминг сделать. Насколько я понял нужно делать так: Грузим кусок данных в буфер. Ставим буфер в очередь проигрывания. Как только буфер проигран, убираем его из очереди. Дальше грузим следующий кусок данных и забрасываем их в тот же буфер. Буфер обратно в очередь проигрывания. НО! Как сделать подкачку, если с семплом работают МНОГО источников? Держать вечно открытым файл и в каждом источнике хранить позицию следующего куска данных в буфере и подзагружать их с неё? На геймдеве читал статью http://www.gamedev.ru/code/articles/OpenAL но там говнокод - слишком сильная интеграция загрузчика и OpenAL'a. |
Ответ: Russian Sound System
пользователь зовет функцию OpenSoundStream
библиотека создает новый поток в потоке открывает файл ТОЛЬКО для чтения в функции есть код вида Код:
while(!stream.eof()) |
Ответ: Russian Sound System
Цитата:
|
Ответ: Russian Sound System
вообще все ето работать должно в других потоках, такчто не так уж и важно. ну поиск по файлу до 10мс в худшем случае. на практике етот файл будет в кэше жесткого диска скорее всего и будет почти бесплатно. но ето очень стремно - когда одну музыку надо играть в разных местах. для звуков (повторно проигрывающихся) зачем стриминг? если это звук роде там смены уровня - то пусть стримится. если ето звук выстрела - то грузи в оперативку целиком.
|
Ответ: Russian Sound System
Понято. Начинаю делать.
|
Ответ: Russian Sound System
Вложений: 2
Демка №2
Что нового? 1) Добавлена загрузка ogg 2) Прикрутил еще несколько эффектов 3) Обновленная сцена 4) Исправлены баги с EnvironmentAABB 5) В лог выводится больше инфы Что еще делается? 1) Потоковое воспроизведение. Почему так долго делаешь? Универ съедает все свободное время. Вопрос Как получить направление взгляда из матрицы камеры? |
Ответ: Russian Sound System
скопировать матрицу
в скопированной матрице занулить вектор перемещения трансформировать скопированной матрицей вектор 0,0,1. или не? |
Мне нужно получить вектор взгляда и перпендикулярный ему вектор up. Это для правильного восприятия звука слушателем - в OpenAL есть такая плюшка - звук сзади звучит приглушеннее, чем спереди. Вот мне и нужно узнать эти векторы из блицевской матрицы. Я получу ее элементы через bbGetMatElement. Заполню матрицу. Что дальше?
Народ! Ну подскажите! А то разработка стоит |
Ответ: Russian Sound System
http://yandex.ru/yandsearch?clid=958...Element&lr=213
может найдёшь нужное, к сожалению, сам практически не работал с сабжем |
Ответ: Russian Sound System
Вложений: 2
Всем привет!
%Username%: Почему ты так долго не писал? Универ. Докладываю о проделанной работе. 1) Исправил просто уйму багов. Один фатальный из-за которого звуки не правильно позиционировались( вы наверное заметили в предыдущих демках - что когда ходишь звук не пойми откуда идет ) 2) Добавил еще 10 пресетов 3) Начал писать документацию 4) Самое главное: двиг теперь в отдельной длл'ке. А теперь о том, что в архивах. Developer.rar - собсно название говорит само за себя. Версия для разработчика. Вот ее то и нужно вам оттестировать( подключить к проекту, сделать двигающийся кубик( b3d sdk в помощь ) со звуком ). Demo.rar - демка. "Лес", дом, ангар бетонный, и большая труба + птичьи голоса + Водка!:russian: |
Ответ: Russian Sound System
Стоит ли делать враппер под Б3Д?
|
Ответ: Russian Sound System
все работает. респект. бзд умеет звук играть сам, зачем еще?
|
В Б3Д звук куцый. Впрочем нужно еще сам движок дорабатывать, прежде чем враппер писать.
Какова вероятность загнать этот двиг за бабло буржую? |
Ответ: Russian Sound System
Народ - это не дело. Качайте и тестируйте! Я же стараюсь и пишу юзабельную библу, а не очередной "SuperMegaGraphicsEngine100D".
зы. Перенесите тему в раздел "Проекты на C++" - ведь это уже вполне юзабельная библа. |
Ответ: Russian Sound System
Хорошо.
Заметил недочёт: рядом с ангаром бетонным, музыка на этом расстоянии далека - играет тихо. Но когда заходишь - в ангаре эхо (да это хорошо), но вот громкость далёкой музыки увеличивается (будто уже внутри ангара играет). А b3d wrapper стоит сделать, если не очень сложно. Послушал предыдущую демку. Звук намного лучше чем у самого b3d. Да и 3Д-окружение у меня не работало с обычным способом (тупо: либо громко до 5 метров, либо дальше очень тихо) |
Ответ: Russian Sound System
Цитата:
Враппер сделать просто. На новогодних каникулах займусь. Цитата:
Цитата:
|
Ответ: 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 ) - это будет |
Ответ: Russian Sound System
Цитата:
А отдельно для звуков учёт геометрии, бросание луча - блитз потянет? |
Ответ: Russian Sound System
Цитата:
UPD Цитата:
Можно обойтись и без Octree, но думаю, при большом количестве звуков и сложной геометрии, производительность будет страдать. |
Ответ: Russian Sound System
Попробовал подключить RSS к С++ проекту... но не получилось.
1. В инструкции описаны функции, но не указана их взаимосвязь, в какой последовательности вызывать. Хотелось бы посмотреть на исходники готового приложения, где и как вызываются функции RSS. 2. Функции либо не возвращают коды ошибок, либо они не описаны в инструкции. Поэтому программа работает, а звука нет - функции вызываю, а что они возвращают непонятно (но точно не 0). |
Ответ: Russian Sound System
Вложений: 1
Например как во вложении. Все работает.
|
Ответ: Russian Sound System
Я тоже думаю использовать твой звуковой движок после того как встрою PhysX в Axelynx
|
Ответ: Russian Sound System
Убедили. Продолжаю разработку.
|
Ответ: Russian Sound System
mr.DIMAS, да все я разобрался, спасибо.
Но всетаки хелп нужно больше делать - там не все объекты расписаны. А еще коды ошибок нужны, я вот например в семпле указываю загрузить несуществующий файл, а он что то ненулевое возвращает :) Вот такой вопрос: Чем лучше использовать твой движок вместо отдельного использования OpenAL и vorbisOGG ? 1. Вот вроде планировалось делать трассировку звука через октри, затенение звука и т. п., это еще актуально? 2. Если например железо не поддерживает EFX и EAX, то проигрываться без эффектов будет или вообще не будет? Программная эмуляция возможна? 3. Какие планы с поддержкой других платформ, например линух или может быть андроид даже? |
Ответ: Russian Sound System
Почему мой двиг?
Не нужно велик изобретать, т.е. писать пресловутые загрузчики файлов, всякие плюшки мелкие. Плюс простая архитектура движка( она еще будет перерабатываться в сторону упрощения, т.е не будет неочевидных вещей типа RSSSample::reserveSample ). 1) Актуально. Соберу мысли в кучу и прикручу. Моя мат. подготовка позволяет ))) 2) Насколько я знаю сейчас на большинстве компов EAX эмулируется. 3) Задела на кроссплатформенность небыло. Особо платформенно-зависимых штук в движке нету. Так что с переводом на другие платформы проблем не должно возникнуть. |
Ответ: Russian Sound System
Небольшое изменение.
1) Все собрано в одну дллку 2) Добавлена поддержка файлов с двумя каналами. Для музыки и т.п. http://rghost.ru/37593020 зы. буду писать в теме о всех этапах разработки |
Ответ: Russian Sound System
Цитата:
Вобщем я думаю буду RSS использовать - вроде нормально :) |
Ответ: Russian Sound System
что там со стриммингом?
|
Ответ: Russian Sound System
Цитата:
Цитата:
|
Ответ: Russian Sound System
как дела?
|
Ответ: Russian Sound System
Дела впорядке( был на даче, такие дела ). Запилил учет геометрии при излучении звука. Ну и стриминг естественно. Но вот с интерфейсом к библе вышла такая жопа, что хоть караул кричи. И тут естественно возникает вопрос: а зачем мне ООП интерфейс? Руки так и тянутся сделать процедурный интерфейс. Тем более так возьни меньше с наследованием и прочим барахлом. Подумываю о запиле поддержки mp3
ЗЫ. Поглядел хедеры BASS'a - увидел процедурный интерфейс. Поглядел хедеры SQUALL'a - увидел процедурный интерфейс. Поглядел хедеры FMOD'a - увидел процедурный интерфейс. Ваше мнение? |
Ответ: Russian Sound System
делай как удобнее. ООП придумали для удобства, если с ним удобнее - делай с ним, если без него - делай без него. ООП ради самого ООП не нужен.
|
Ответ: Russian Sound System
Немного поразмыслил. Сделаю процедурным. Слишком много гемора с наследованием от интерфейсов. Через денька два скину демку.
|
Ответ: Russian Sound System
Я считаю надо ООП! Процедурные оправданы только для совместимости с большой кучей языков и прочими трансцендентными вещами.
Цитата:
|
Ответ: Russian Sound System
http://www.youtube.com/watch?v=XHosLhPEN3k
Имхо найболее удобными и правильными интерфейсами для выделенных библиотек (звуковая библиотека делает большинство операций внутри себя, а наружу прокидывает только функции наподобие проиграть звук и тд) являются процедурные интерфейсы, это позволяет не заморачивать пользователя своими уникальными познаниями в области ООП и значительно упрощает интерфейс библиотеки. ps. самые профессиональные библиотеки имеют функции переопределения аллокаций на хипе или вообще работают с выделенным им буфером статического размера, библиотеки которые позволяют себе выделять память без разрешения пользователя показывают весьма посредственную инженерную культуру программиста в области приложений реального времени, которыми отчасти являются интерактивные игры :) |
Ответ: Russian Sound System
В случае с Russian Sound System это можно назвать звуковым движком ( в перспективе ), если я правильно понимаю, там нужно создавать объекты источников звука, слушателей, объекты преграды и т. п. помойму ООП самый удобный вариант.
Вообще я помню Джон Кармак где то написал: если не уверен какой вариант лучше - сделай оба. |
Ответ: Russian Sound System
ИМХО для каждого языка проще написать свою ООП обертку
|
Ответ: Russian Sound System
Цитата:
|
Ответ: Russian Sound System
Цитата:
|
Ответ: Russian Sound System
Цитата:
|
Ответ: Russian Sound System
Оба подхода хороши. Но мне просто сам механизм интересен.
Вот я правильно понимаю, что в куче находятся всякие методы класса и с помощью переопределения аллокаций, можно получать доступ к разному набору этих методов? Но ведь хедеры не меняются, как пользователь узнает ( до попытки скомпилировать ) к каким именно методам у него есть доступ? Или там находу генерируются указатели на методы? Я раньше делал интерфейсы с помощью абстрактных классов и последующего наследования различных реализаций, но вобщем оказалось неудачно. Сейчас вот использую паттерн типа мост. Но просто интересно есть ли еще более гибкие варианты интерфейсов? Кстати какое мнение насчет COM? |
Ответ: Russian Sound System
Samodelkin
а ? пример кода библиотеки который позволяет переопределить аллокацию на хипе, плюс я в юзерской части кода показал как делать топорный аллокатор с статическим массивом Код:
// ------------- lib ps. методы классов не находятся в куче, они находятся в скомпилированном коде, в куче разве что может находится vtable с указателями на методы для классов с виртуальными методами |
Ответ: Russian Sound System
Докладываю. Полностью отлажен стриминг. Оставил классовый интерфейс - но с небольшими изменениями. Добавлены различные примитивы звукового окружения( RSSEnvironmentSphere, RSSEnvironmentCylinder ). Вскоре добавлю еще и выпуклые тела ( RSSEnvironmentHull ). Хотя с учетом множества бесплатных физ.движком есть возможность использовать их средства для проверки попадания точки в меш.
Почему я не выкладываю демку? Потому что учет геометрии окружения при прогрывании звуков довольно медленно работает и я так и не смог придумать нормальной функции затухания звука. Из-за этого получается что при загораживании слушателя небольшим объектом( к примеру, ящиком ) звук как-то не естественно себя ведет. В итоге я опять не знаю что делать: а) Добавлять поддержку еще кучи разных форматов б) Пилить учет геометрии окружения. Там всякие октарные деревья для оптимизации и прочее. в) Писать документацию С удовольствием обсудил бы ситуацию насчет функции затухания звука. Еще встает вопрос о лицензировании. Думаю вкрутить в двиг таймер как в Хорсе. Ну и ключики раздавать. Форумчанам бесплатно. Но это все перспективы, а нерешенные проблемы изложены выше. Для демки уже имеется идея. Сделать что-то типа хоррора, где звук играет основную роль( ну вы же играли в Dead Space или инди SCP ). |
Ответ: Russian Sound System
Цитата:
Цитата:
ИМХО: 1. Можно сделать медленную но точную трассировку, когда от слушателя во все стороны трассируются лучи до каждой стены, затем из точек пересечения со стенами трассируется до каждого источника звука и микшируется. Ну вобщем принцип тот же как при трассировке света. А прохождение звука сквозь стены можно сравнить с рефракцией лучей проходящих через прозрачные объекты. Возможно звук даже можно на шейдерах посчитать. 2. Упрощенный вариант - можно трассировать только один раз от слушателя и до источника как ты делаешь, но у тебя не учитывается дифракция - когда большие волны огибают мелкие препятствия. Я думаю тебе нужно просто считать размер объекта или его бокса и если он маленький то и коэффициент затухания будет меньше. Только еще нужно учесть когда много маленьких объектов стоят вплотную это будет один большой. 3. Еще проще - вот у тебя же есть боксы с характеристиками сцены (там где эхо и т п). Так вот туда нужно добавить коэффициент затухания. Дизайнер или мэппер сам установит нужный коэффициент затухания. Тут нужно еще одну вещь добавить - надо сделать возможность взаимосвязи двух боксов. Например есть две комнаты, каждая комната это бокс со своими настройками звучания. Между комнатами есть дверь - она представляется как связь между боксами. Если дверь закрыта, то слушатель в одном боксе, будет слышать источники из второго бокса с большим коэффициентом затенения звука, чем когда дверь открыта. Вот ну еще стоит добавить что трассировку лучей в любом случае надо делать с помощью октри - сцены то могут быть большие. И еще вот если возвратиться к варианту 1, ведь в случае с освещением делают лайт мэп. Может что то похожее можно сделать со звуком? Например есть сцена где очень много статических источников звука, это все можно с помощью трассировок рассчитать и сгенерировать объемную карту звука, где будут описаны результирующие характеристики звука в каждой точке пространства. Цитата:
Цитата:
Цитата:
Цитата:
|
Ответ: Russian Sound System
Фух. Прямо таки мыслей подлил в голову. Твои мысли взяты на вооружение. Начинаю запиливать!
Цитата:
|
Ответ: Russian Sound System
Как идет разработка библы?
Для меня она была бы очень полезна. |
Ответ: Russian Sound System
Вложений: 1
Проект переименован в ProjectF. Полностью переписан. Функциональный интерфейс. Тестировал много раз. Не факт что все баги нашел.
Новые фичи. 1) Препятствия для звуков. Obstacles. 2) Фильтры. 3) Атмосфера. В прямом смысле. На затухание высоких частот влияет сухость или влажность воздуха. 4) Группы звуков. 5) Поддержка разных систем координат. 6) Отладочный рендеринг. 7) Полная лояльность к ошибкам использования. Просто код ошибки ( pfSystemGetLastError() ) и никаких вылетов. 8) Воспроизведение файла по частям. 9) Мелочи. Демки нет. Будет время - сделаю. Справки нет. В заголовочнике названия функций сами по себе справка. Пример Код:
#include "ProjectF.h" |
Ответ: Russian Sound System
На первый взгляд неплохо. Наверное скоро какую-нибудь демку попробую написать - тогда точно скажу.
* Планируется ли ОО интерфейс, для С++ или других языков? Или только функциональный будет для большей совместимости с разными языками? * Что насчет компиляции под Linux или другие платформы? ( я так понимаю в ProjectF только OpenAL и VorbisOGG используется или еще что-то? ). * Помнится предыдущая версия ( еще RSS ) вылетала без предупреждения если на компьютере не поддерживался EAX или еще что-то. Вот собственно в ProjectF будет режим без EAX или какой-нибудь софтварный? Ведь не на всех компьютерах есть аппаратная поддержка, и пользователь скорей выберет тот звуковой движок, у которого есть и софтварный режим и аппаратный, чем тот у которого только аппаратный. |
Ответ: Russian Sound System
Цитата:
Цитата:
Цитата:
|
Ответ: Russian Sound System
Описание функций бы, а то разбираться на разработке своего примера ''больше отталкивает''. А так хотелось бы для начала побаловаться, а потом уж и использовать.
Или выложи как-нибудь исходник примера блитз, каким бы он не был. |
Ответ: Russian Sound System
Запилил пример. Плюс поправил маленький баг. Все внутри. Исходник примера + бинарник + обновленная библа. Исходник с коментами. Все хорошо собирается в студии.
Пример показывает работу зон с разной реверберацией. И работу "препятствий". Соответственно "ZONE", "OBSTACLE" http://rghost.ru/45893801 |
Ответ: Russian Sound System
Для тех кому лень качать запилил видос.
|
Ответ: Russian Sound System
прикольно, но обстакл имхо очень резкий, чуть высовываешься, и звук резко меняет громкость, плюс кажется будто звук идёт к слушателю по прямой линии, т.е. ты делаешь один рейкаст об обстакл.
|
Часовой пояс GMT +4, время: 03:52. |
vBulletin® Version 3.6.5.
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
Перевод: zCarot