Модуль 3D - звука OGRE C#

Гость18 лет в сервисе
Данные заказчика будут вам доступны после подачи заявки
19.03.2009

Требуется написать модуль для реализации 3D звука в нашем движке, который базируется на MOGRE(Managed версия OGRE).

Существует масса отдельных реализаций 3D звука(например http://www.ambiera.com/irrklang/), возможно некоторые из них даже имеют OGRE интерфейс(например openAL http://www.ogre3d.org/wiki/index.php/OpenAL) или реализованы прямо в OGRE (http://www.ogre3d.org/forums/viewtopic.php?t=22679)

Конечно предпочтение отдается свободнораспространяемым движкам с открытым кодом.

Можно поискать на sourceforge.net, наверняка найдется подходящий движок, который нужно будет немного доработать.

Большинство из них организовано через т.н. эмитеры, т.е. излучатели звука, которым задается 3д-положение, далее движок вычисляет звуковой СТЕРЕО поток в простейшем случае в зависимости от относительного положения камеры (т.е. пользователя) и излучателя. В большинстве используется ко всему прочему характеристика помещения (поглощающая/ отражающая способность стен) и эффект доплера (если эмитер движется относительно слушателя, частота звука меняется).

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

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

Должны поддерживаться следующие типы звуковых данных:

Эмитер должен вопроизводить звуковую дорожку одного из каналов многоканального звука или видео (например у нас есть стерео mp3 файл, мы загружаем его в память, расщепляем на левую и правую дорожки, создаем два эмитера, один воспроизводит левую дорожку, другой правую, назначаем эмитеры двум различным 3-д объектам (например они могут выглядеть как колонки) и вместе они играют стереозвук).

В качестве источника дорожек могут служить:

1)локальный звуковой файл любого формата, для которого в системе есть кодек

2)локальный видео файл любого формата, для которого в системе есть кодек

3)потоковое аудио (например интернет-радио)

4)потоковое видео (например с smotri.ru либо видео он-лайн трансляции ТВ канала)

Должны быть следующие возможности:

1)объединять несколько дорожек в одну и вопроизводить все на одном эмитере

2)поддерживать буферизацию для больших файлов либо файлов неизвестного размера (например поток)

3)поддерживать кэширование - хранение буферов в памяти для ускорения доступа к ним.

Пока интересует реализация на Windows платформе с .NET 2.0, в дальнейшем будет порт под Mono.