Author Topic: Интеграция c OpenAL  (Read 1266 times)

0 Members and 1 Guest are viewing this topic.

Offline Vuvk

  • Friends
  • Baron (-ess)
  • *
  • Posts: 345
  • Reputation 34
  • Lokemundux Desco Domus Shaantitus
Интеграция c OpenAL
« on: September 25, 2015, 09:16:51 AM »
OpenAL - кроссплатформенный интерфейс программирования приложений (API) для работы с аудиоданными. Ключевой особенностью является работа со звуком в 3D пространстве и использование эффектов EAX. Поддерживается компанией Creative. (Википедия)

Библиотека распространяется по лицензии LGPL. А потому её можно свободно использовать в своих некоммерческих/коммерческих целях. В данном примере рассматривается использование этой библиотеки для воспроизведения WAV-файлов с эффектом 3D:
Смотреть видеo
Используются заголовки alc.bi, al.bi и правленный alut.bi из пакета FreeBASIC. Возможно подключить заголовки оттуда же ogg.bi и vorbisfile.bi для включения поддержки файлов ogg (так же стоит задуматься о потоковом воспроизведении, а то памяти на всё не хватит  ;) ). Я этого делать не стал, потому как для 2д-звука в своём проекте буду использовать FBSound. Библиотеки между собой не конфликтуют и работают на ура, как на Windows, так и на Linux (на x86 точно компилится, с запуском готовых бинарников на системе любой разрядности не должно возникнуть проблем).
Старался всё комментировать прям до мелочей.
Скачать исходники бесплатно без регистрации и СМС

ЗЫ:Что-то у вас с форумом. Текст сообщения пропадает. С двадцатой попытки удалось запостить
« Last Edit: September 26, 2015, 07:40:39 PM by Vuvk »
Crudux Cruo!

Offline Alec - WS3D Developer

  • Producer
  • Administrator
  • Marquess
  • *
  • Posts: 911
  • Reputation 36
  • Game making is my hobby for life!
Re: Интеграция c OpenAL
« Reply #1 on: September 25, 2015, 05:03:21 PM »
Спасибо за исходники и описание, Vuvk!
Видео всё очень наглядно показывает.

Quote
Что-то у вас с форумом. Текст сообщения пропадает. С двадцатой попытки удалось запостить
Изредка бывает. У меня несколько раз было за 2 года. Не знаю в чём проблема, на досуге поищу в чём дело.
WorldSim3D = 3D + FreeBasic. Программируй в удовольствие, а не "в тягость"! Make your project with pleasure, not with strain!

Offline Nikolas - WS3D Developer

  • Programmer
  • Global Moderator
  • Marquess
  • *
  • Posts: 889
  • Reputation 63
Re: Интеграция c OpenAL
« Reply #2 on: September 25, 2015, 05:39:57 PM »
Quote
Старался всё комментировать прям до мелочей.
Получилось. Очень внятно и просто. Хотя на самом деле в OpenAL не все понятно и не все просто. С документацией тоже скудно.
Даже для начинающих  материал пойдет.
Если еще добавить поддержку ogg- цены не будет материалу.
Под лежачий камень мы всегда успеем...

Offline Vuvk

  • Friends
  • Baron (-ess)
  • *
  • Posts: 345
  • Reputation 34
  • Lokemundux Desco Domus Shaantitus
Re: Интеграция c OpenAL
« Reply #3 on: September 25, 2015, 08:52:49 PM »
Quote
Если еще добавить поддержку ogg- цены не будет материалу
Сначала так и собирался сделать, а потом смекнул - ну сделаю поддержку ogg для музыки, в папочку опять кинь либу vorbis. А зачем велосипед изобретать, если можно взять либу FBSound, в которой это есть. И в том, и в другом случае на одну библиотеку в папке больше...
Вообще делал по статье с gamedev.ru, видоизменяя по пути. Вторая часть статьи для ogg, если есть желание  ;)
Сам не вижу практической ценности. Может внедрю на выходных  ::)
Crudux Cruo!

Offline Nikolas - WS3D Developer

  • Programmer
  • Global Moderator
  • Marquess
  • *
  • Posts: 889
  • Reputation 63
Re: Интеграция c OpenAL
« Reply #4 on: December 06, 2015, 08:38:34 PM »
Quote
...в папочку опять кинь либу vorbis.
Возможно, еще и vorbisfile.dll и ogg.dll
Можно попробовать слинковать статически.

Взялся довести до ума начинания товарища Vuvka.
Что сделано:
1) В класс звука добавлено много функций (пауза, громкость, перемотка, изменение частоты, затухание и прочее)
2) Добавлена функция SetType(). С помощью нее, устанавливая ряд параметров, можно получить не только 3D-звук, но и обычный 2D,
что делает неактуальной в будущем использование FBSound.


Что планируется:
1)Поддержка формата ogg (если получится, то wav-формат можно будет убрать вместе с либой alut.dll)
2)Поддержка потокового вещания (стриминга).
3) Оптимизация кода обслуживания буфферов звука. Дело в том, что в данной реализации буферы звука не входят в класс звука, а располагаются отдельно.
Идея ясна: для того, чтобы несколько источников звука могли иметь общие буфферы звука, тем самым экономя память ПК. Но тогда не очень удобно контролировать содержимое буферов на предмет повторов и вообще. К тому же, пока не совсем ясно, как организовать стриминг: для этого на каждый источник звука должно быть два буффера (из одного происходит считывание, друго- заполняется и наоборот)
« Last Edit: December 07, 2015, 08:37:23 AM by nikolas »
Под лежачий камень мы всегда успеем...

Offline Alec - WS3D Developer

  • Producer
  • Administrator
  • Marquess
  • *
  • Posts: 911
  • Reputation 36
  • Game making is my hobby for life!
Re: Интеграция c OpenAL
« Reply #5 on: December 13, 2015, 02:41:43 PM »
Есть новости по поводу интеграции данной библиотеки в WS3D. Nikolas разъяснит подробнее.
WorldSim3D = 3D + FreeBasic. Программируй в удовольствие, а не "в тягость"! Make your project with pleasure, not with strain!

Offline Nikolas - WS3D Developer

  • Programmer
  • Global Moderator
  • Marquess
  • *
  • Posts: 889
  • Reputation 63
Re: Интеграция c OpenAL
« Reply #6 on: December 13, 2015, 02:52:49 PM »
Привет всем. Что имеем на данный момент:
1)Подключение OpenAL на уровне фрибейсика. Впрочем, это на новость. Об этом есть в стандартных примерах со звуком во фрибейсике. Кроме того, это сделано в примере, предложенном товарищем Vuvk-ом.
2)Задействованы библиотеки ogg И vorbis, т.е. поддержан формат звука ogg. Думается, довольно перспективный формат. Не хуже mp3. От формата wav принто решение отказаться. Но в примере, описанном выше в первом посте, это есть. Так что это- не проблема.
3)Реализовано потоковое воспроизведение звука. Это позволит экономить память ПК при проигрывании больших аудиофайлов. Например, фоновой музыки в игре.
4)3D-звук. OpenAL позволяет его использовать по полной программе. Думаю, те, кто пользовался данной библиотекой, в курсе, что для 3D-звука необходим файл с МОНО-дорожкой.
5) Планируется введение различных эффектов (частично реализовано): эффект Доплера, реверб, смена скорости звучания. Громкость- само собой присутсвует.

Чуть позже выложу демку для тестирования.
Под лежачий камень мы всегда успеем...

Offline Nikolas - WS3D Developer

  • Programmer
  • Global Moderator
  • Marquess
  • *
  • Posts: 889
  • Reputation 63
Re: Интеграция c OpenAL
« Reply #7 on: December 13, 2015, 06:08:15 PM »
Да. Забыл добавить. Еще один источник информации по OpenAL. Очень хороший. Если его полностью реализовать, то получится своя звуковая либа с поддержкой ogg, wav, mp3 и всеми эффектами и звуковыми фильтрами. Может, кто займется на досуге.....
Клац
« Last Edit: December 13, 2015, 06:09:53 PM by nikolas »
Под лежачий камень мы всегда успеем...

Offline Nikolas - WS3D Developer

  • Programmer
  • Global Moderator
  • Marquess
  • *
  • Posts: 889
  • Reputation 63
Re: Интеграция c OpenAL
« Reply #8 on: February 15, 2016, 01:16:52 PM »
Решил обновить тему.
Данная разработка уже не актуальна, так как с версии ориентировочно 0.9.8 в движке появится звук OpenAL "из коробки".
Подключено на С++ на уровне "обертки" функций ядра Irrlicht.
Все, что заявлено, будет, кроме пока эффектов EAX/EFX и фильтров.
2D и 3D-звук, громкость, позиционирование, ориентация, смена скорости, стоп, пауза, перемотка, смена коэффициента "затухания" звука с расстоянием и прочее. Поддержка wav/ogg, для ogg будет возможность загружать стерео как моно-дорожку. Да, забыл самое интересное: обычное / потоковое воспроизведение.
Под лежачий камень мы всегда успеем...