Open source

индекс
187,29

Синтез 3D звука :: Clunk

Работая над проектом уютненькой аркады, я с сожалением обнаружил что OpenAL отбирает слишком много моего времени. Мало того, что для него пришлось написать менеджер звуков о полутора тысячах строк кода, так ещё и приходилось бороться с разного рода чёрной магией. (Например реализация от nvidia намертво вешала венду) Поэтому, я внезапно решил что потратил на него достаточно времени и написал свой собственный велосипед, который и был успешно обкатан в поле, и выпущен с открытыми исходниками на sourceforge.

Вообще, наше ухо не такое уж и хитрое устройство. Позицию источника ухо определяет двумя способами. В горизонтальной плоскости звук приходит в одно ухо чуть раньше чем в другое. Простая тригонометрия умноженная на диаметр головы и дело в шляпе! :)
Второй способ уже куда сложнее — голова имеет разную плотность и разные технологические отверстия, следовательно, спектр звука искажается по разному в зависимости от направления вхождения сигнала. Было много попыток сделать эталонную голову(ничего постыдного, даже Стив Джобс делал это), заполнить её желеобразным заменителем мозга и померить искажения эталонного звука, например проект KEMAR из MIT.

Мой проект называется Clunk, и умеет практически всё, что необходимо уметь звуковой библиотеке:
  • Бесконечное количество всего: музыкальных потоков (SDL_Mix умеет только один, например), объектов и именованных источников звука прикреплённых к объектам или слушателю.
  • Простое апи на c++. (В OpenAL вы вынуждены сами перестраивать сцену, для того чтобы перекинуть 16 источников поближе к слушателю, рестартуя источники (sic), ещё рекомендую посмотреть примерчик «как сделать фоновую музыку на OpenAL», ~полтыщи строк кода =-O ) )
  • HRTF, HDT описанные выше(собственно 3d звук)
  • Поддержка всех distance models (падение громкости в зависимости от расстояния) из OpenAL
  • Опциональная оптимизация под процессоры с технологией SSE
  • Эффект допплера
  • Должно работать под всеми платформами где есть SDL, не содержит платформно-зависимого кода.
  • Лицензия LGPL 2.1 — можно использовать в коммерческих продуктах.


Адрес проекта на sf.net: https://sourceforge.net/projects/clunk
Если вам интересно, можно смело писать мне в icq, я готов ответить на любые вопросы.
+94
6 декабря 2008, 22:30
29

комментарии (43)

+1
assiduus #
Дас ис Бинуральная запись?
Вот здесь найдете единомышленников
0
whoozle #
Да, это бинуральный рендеринг в реальном времени.
0
whoozle #
обновил тэги.
+1
dab512 #
а как на счет отражений от окружающей геометрии ?)
0
whoozle #
Их пока нет. Если хватит мозгов и времени — будут :)
0
kashey #
Кто-то все еще использует OpenAL?
Я думал нормальные люди на DSound или Miles сидят…
Я на AL забил лет 5 назад — он уже был не конкурентоспособным

Кстати под виндами OpenAL работает через DSound
+4
whoozle #
Miles платный. DSound только под виндой.
0
naryl #
ЕМНИП OpenAL позиционируется как низкоуровневывйы API. Вы же не собираетесь клепать 3d игрушки на голом OpenGL.
+1
kashey #
На OpenGL можно. Если хочется в тишине без звука посидеть :)
Вообще звук надо делить на две категории — так себе звук для аркадок — тут OpenAL сойдет.
И звук для серьезного приложения — так чтобы от саунд карты дымок поднимался…
–1
andreyu #
А Кармак то и не знает, что OpenAL так плох. Бедняга.
+1
efoxxi #
«заполнить её желеобразным заменителем мозга»
^^^- вот это убило наповал
+3
whoozle #
Так Джобс делал эталонную голову потребителя своей продукции. Это не шутка.
0
naryl #
> Простое апи на c++

Есть ли шанс получить api на C? Очень хочется посмотреть, но я C++ уже 6 лет не трогал. Если Вы предоставите C-враппер без текстовых макросов, можно будет легко писать привязки к другим языкам.
+1
whoozle #
Пишите в тракер на странице проекта! Шанс есть
0
naryl #
Извините, со scons не знаком. При запуске выдаёт ошибку:

scons: *** No SConstruct file found.

Такого файла действительно нигде в проекте нет.

Ещё хотелось бы снапшот в каком-либо виде. Файл в downloads или svn ветка в tags.
0
naryl #
Извините, со scons не знаком. При запуске выдаёт ошибку:

scons: *** No SConstruct file found.

Такого файла действительно нигде в проекте нет.
0
whoozle #
Это огрызок Sconscript'а для подключения clunk в scons-проекты. :)
SConstruct должен быть ваш.

Используйте любую любимую билд систему.
Для компиляции нужны все файлы, и флаги SDL.

Библиотеку нужно собирать с макросами _REENTRANT, CLUNKAPI=DLLEXPORT и USE_SIMD=1 если хотите SSE. Я не люблю automake, но видимо придётся сделать :) Напишите в тракер.
0
makaron #
Ещё есть интересный fmod API, многофункциональный и простой
0
whoozle #
Платный, закрытый, чудовищно глючит на linux :)
+1
beeruser #
он везде чудовищно глючит =)
–1
egorinsk #
Аппаратное ускорение поддерживается? Да и зачем нужна свободная звуковая библиотека, я думаю производители игр вряд ли разорятся от покупки коммерческой)) А свободным играм надо наверно в первую очередь работать над графикой, а не звуком.
0
whoozle #
У OpenAL тоже нет аппаратного ускорения на не-Creative карточках и под linux :)
+2
beeruser #
Времена аппаратного ускорения звука прошли толком не наступив.

>> зачем нужна свободная звуковая библиотека
Странные у вас претензии
+1
Jofr #
К сожалению, не все производители игр ворочают миллионами. Стоимость того же fmod может составить достаточно внушительную часть от бюджета всего проекта, и разработчики (к коим я принадлежу) сотню раз подумают, прежде чем выкладывать деньги за сомнительные преимущества закрытых библиотек. Я не ругаю ни fmod, ни кого другого, но для нас покупка звукового движка — достаточно большая трата. При том, что требования к воспроизведению звука у нас высокие (премия КРИ-2008 за лучший звук обязывает).

Поэтому появление свободных библиотек такого рода — большое счастье =) Спасибо автору топика — обязательно изучим либу подробно и, если будет на то необходимость, применим в следующих проектах.

0
whoozle #
Портировал на cmake, добавил больше всякого разного, в том числе по многочисленным просьбам — int в качестве id источника.
НЛО прилетело и опубликовало эту надпись здесь
0
naryl #
Предлагаю сделку. От Вас — makefile и снапшот, от меня — ebuild. :D В тракер написал.
0
whoozle #
Я портировал на cmake, добавил всякого разного. Можно делать ebuild! :)
+1
naryl #
Быстро вы. :) Сейчас вышлю.
+1
naryl #
Какие .h являются интерфейсными?
+1
naryl #
ompldr.org/vNXBjZw/clunk-1.1.122.ebuild

Делает .so, устанавливает в /usr/lib/ и копирует все .h в /usr/include/

Хотелось бы кое-что уточнить. Ему точно нужен только сам libsdl, а не одно из расширений вроде sdl_mixer или sdl_audio?
+1
whoozle #
Нет, никаких дополнительных либ не надо, только SDL.
Хедеры не надо копировать все, нужны:
buffer.h
clunk.h
clunk_assert.h
context.h
distance_model.h
export_clunk.h
fft_context.h
locker.h
logger.h
mdct_context.h
object.h
sample.h
source.h
sse_fft_context.h
stream.h
v3.h
В svn trunk'e есть install таргет у cmake'a.
А вы можете запостить в bug tracker gentoo? Потом я ebuild btanks попробую портануть на внешний clunk. :)
+1
naryl #
Боюсь, что clunk-9999 не примут. Может вы сделаете релиз специально ради install? :)
0
whoozle #
emerge умеет инстал таргет вытаскивать из cmake?? Если надо, то сделаю.
+1
naryl #
ompldr.org/vNXBrbg/clunk-1.1.122.ebuild

Пишите btanks с зависимостью от этого clunk'а. Если всё заработает, то отправим в bug tracker оба.
0
whoozle #
инсталлировать хедеры надо в /usr/include/clunk.
0
naryl #
Добавьте /clunk в строку insinto.

> emerge умеет инстал таргет вытаскивать из cmake?? Если надо, то сделаю.
С eclass'ом cmake-utils это и происходит по-умолчанию… вроде бы.
0
xintrea #
А почему скачать можно только пакет для виндовса? Вроде заявлено что либа мультиплатформенная.
0
whoozle #
берите из SVN, так удобнее.
0
Nashev #
Вот бы кто демку на этом движке записал, по типу той, c парикмахером, что по ссылке с websound.ru находится — вот это была б движуха!
0
whoozle #
уберу DFT, вставлю MDCT, тогда будут демки :-D
0
DjOnline #
Если бы вы на основе этого сделали dshow filter на основе этого, который 5.1 или 7.1 переделывает в binaural для наушников — было бы замечательно.

Только зарегистрированные пользователи могут оставлять комментарии. Войдите, пожалуйста.