openal что это такое

Что это за программа OpenAL?

openal что это такое. Смотреть фото openal что это такое. Смотреть картинку openal что это такое. Картинка про openal что это такое. Фото openal что это такоеВсем привет openal что это такое. Смотреть фото openal что это такое. Смотреть картинку openal что это такое. Картинка про openal что это такое. Фото openal что это такоеБудем разбираться с такой штукой как OpenAL, для чего она нужна и можно ли ее удалить.

ОпенАл относится к программированию, это такой компонент, который отвечает за звук в 3Д-программах, в том числе и играх, чтобы звук в них был реально крутой. В задачу данного компонента входит обеспечивание обьемного 3Д-звука с эффектом присутствия, ну чтобы вы слышали так, будто вы находитесь прямо в игре. При этом звучание тех или иных предметов будет относительно расстояния между ними или между вами и обьектом. В общем думаю примерно понимаете о чем я openal что это такое. Смотреть фото openal что это такое. Смотреть картинку openal что это такое. Картинка про openal что это такое. Фото openal что это такое

Что за файл openal32.dll? Это библиотека OpenAL, удалять ни в коем случае нельзя, а то будут в итоге глюки!

openal что это такое. Смотреть фото openal что это такое. Смотреть картинку openal что это такое. Картинка про openal что это такое. Фото openal что это такое

Главная задача OpenAL — сделать максимально звуки естественными, чтобы было интересно играть или пользоваться какой-то необычной программой. Просто мне не приходит на ум что это может быть за программа, ну может быть какое-то моделирование openal что это такое. Смотреть фото openal что это такое. Смотреть картинку openal что это такое. Картинка про openal что это такое. Фото openal что это такое

OpenAL по сей день развивается, но уже просто так, нет руководителя, все как было раньше, этого уже нет. Но тем не менее, проект не загнулся уважаемые, в него была добавлена поддержка видеокарт nForce от NVIDIA и со временем он стал стабильно развиваться. Конечно никакого беспредела нет — все изменения специально тестируются, потом отправляются в некую компанию под именем Creative Technology, а те смотрят и если все нормалек, то включают эти изменения в новую версию ПО OpenAL.

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

OpenAL был задействован даже в старом Квейке 3:

openal что это такое. Смотреть фото openal что это такое. Смотреть картинку openal что это такое. Картинка про openal что это такое. Фото openal что это такое

Ну вот например OpenAL используется в играх на движке Unity — наверно вы не знаете что это такое, ну знать то и не нужно, про движок мало интересного. Но вот интересно то, что он дает играм. А знаете что? Короче движок Unity игры делает суперскими просто в плане графики, а вся фишка в том, что эти игры браузерные. То есть ничего не нужно устанавливать, реально интересные игры у вас могут быть в браузере. Это не флеш-технология, не путайте. И OpenAL тесно интегрирована в Unity, это позволяет получить звуковой эффект присутствия в игре.

OpenAL также принимает участие в построении звуковых эффектах и в серьезных играх, типа Дирт, Бателфилд, Хитман, серия гонок НФС и другие openal что это такое. Смотреть фото openal что это такое. Смотреть картинку openal что это такое. Картинка про openal что это такое. Фото openal что это такое

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

Все, со всем разобрались, что это за файл openal32.dll вы знаете как и что такое OpenAL, желаю вам удачи вам openal что это такое. Смотреть фото openal что это такое. Смотреть картинку openal что это такое. Картинка про openal что это такое. Фото openal что это такое

Источник

OpenAL что это за программа

В данной статье мы расскажем о программе OpenAL авторов Loki Software. Прочитав её, вы узнаете, что это за программа и для чего она нужна.

openal что это такое. Смотреть фото openal что это такое. Смотреть картинку openal что это такое. Картинка про openal что это такое. Фото openal что это такое

Библиотека OpenAL используется для создания трехмерного звучания в играх, приложениях и программах. Позволяет добиться реалистичного звука и поддерживается многими программными продуктами. С помощью оцифрованного хранения аудио данных в формате Waveform Audio File Format (WAVE, WAV). Без библиотеки OpenAL воспроизведение озвучивания во многих современных разработках невозможно.

Особенности и принцип работы OpenAL

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

openal что это такое. Смотреть фото openal что это такое. Смотреть картинку openal что это такое. Картинка про openal что это такое. Фото openal что это такое

Известно, что это программа OpenAL позволяет каждому программному продукту, переносящему пользователя в трехмерное пространство плоскости координат X.Y.Z, передавать естественное звучание. Наличие препятствий, других объектов (от которых звуковые волны должны отбиваться) учитывается программой, позволяя воспроизводить и доносить голоса других игроков или игровых персонажей правильно. Окружение будет меняться в зависимости от положения субъекта, его перехода между локациями. При необходимости к обычному звуку добавляются посторонние (при смене окружения), возникает эхо или же некоторые помехи.

Дополнительно OpenAL (или Open Audio Library) производится обработку звука. Например, при перемещении через водяной поток, через прохождение сквозь узкий коридор. Все это отражается на качестве звука, его тональности. Используются звуковые библиотеки во многих современных продуктах. Они позволяют перенести пользователя на выбранную территорию или в строение. При удалении библиотек воспроизведение будет некорректным или вовсе исчезнет (будет появляться ошибка). В отдельных случаях библиотеки вшиваются в игру, что не дает возможности провести удаление. Отлично, что открытый код программы OpenAL позволяет профессиональным программистам вносить личные корректировки и дополнять новыми инструментами, параметрами или менять свойства определенных библиотек.

Возьмем, например среду разработки игр на Андроид – Unity. Она довольно плотно использует в создании 3D-игр библиотеку OpenAL с форматами WAV, OGG. Умелая реализация программы OpenAL в Unity позволяет максимально улучшить звук в игре.

Как пользоваться OpenAL

openal что это такое. Смотреть фото openal что это такое. Смотреть картинку openal что это такое. Картинка про openal что это такое. Фото openal что это такое

Применять для разработки продуктов библиотеку можно после установки программы OpenAL SDK. В интерфейсе производится выбор слушателя, его позиция и могут указываться пути перемещения. С помощью отметок положения источника и особенностей звукового контекста (смена параметров звучания) производится воздействие на слушателя. Дополнительно указывается аудиоустройство, громкость звука и дополнительные параметры (постоянный звук, прерывистый).

Надеюсь, вам стало ясно, что это такое OpanAL и как её используют.

После перемещения слушателя будут видны изменения и самого воздействия. Аудио контекстов может быть несколько, переключение между ними выполняется в заданном порядке. Звуковое окружение сменяется для каждого нового положения слушателя. Буфер в OpenAL используется для корректной смены динамических данных и установки новых показателей как для объекта, производящее звук, так и для слушающего субъекта. Все данные отражаются на рабочем поле программы в центре. Данные, которые изменяет пользователь, выведены на боковой панели. При работе с другими языками программирования все данные вводятся и сохраняются в виде кода.

Источник

Ответы на любые вопросы

В арсенале каждого пользователя есть с десяток программ, жизнь без которых была бы гораздо сложнее. Какие-то предназначены для прослушивания музыки и просмотра фильмов, при помощи других можно запустить любимые игры, а часть программ пригодится в работе любому специалисту. Но существуют и более редкие разработки, с которыми рядовой пользователь за всю жизнь может ни разу не столкнуться. К примеру, OpenAL, что это за программа знает лишь небольшой круг «посвященных».

openal что это такое. Смотреть фото openal что это такое. Смотреть картинку openal что это такое. Картинка про openal что это такое. Фото openal что это такое

Игровая индустрия прошлого века

Когда-то для создания действительно хорошей или даже культовой игры необходимо было не так уж много:

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

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

openal что это такое. Смотреть фото openal что это такое. Смотреть картинку openal что это такое. Картинка про openal что это такое. Фото openal что это такое

Особенности двухмерных игр

Когда-то разработчикам компьютерных игр было доступно лишь два измерения, вот и выходили все новинки в 2D формате. В связи с этим было несколько интересных особенностей:

openal что это такое. Смотреть фото openal что это такое. Смотреть картинку openal что это такое. Картинка про openal что это такое. Фото openal что это такое

Для чего нужна OpenAL?

В двумерном пространстве:

Для слабеньких машин это вполне приемлемый «ляп», его всегда можно списать на низкую производительность оборудования. А вот в третьем тысячелетии такая отговорка уже не сработает. Тогда была создана программа OpenAL:

Если посудить здраво – это ведь такая мелочь, будет удаляться или приближаться звук по мере перемещения игрока по карте. Ослабнет ли звук шин отстающей машины, станет ли громче звук капающей воды во время продвижения по пещере. Все это никак не влияет на сам игровой процесс, чисто косметическое дополнение.

Но именно такие «чисто косметические дополнения» помогают лучше погрузиться в игровой процесс и действительно реально прочувствовать атмосферу созданного кем-то мира.

openal что это такое. Смотреть фото openal что это такое. Смотреть картинку openal что это такое. Картинка про openal что это такое. Фото openal что это такое

Где используется OpenAL?

Компания, которая некогда разработала и воплотила в реальность технологию «OpenAL», уже давно прекратила свое существование. А вот тысячи строк программного кода продолжают жить и даже используются при создании новых игр, таких как:

А все дело в том, что изначально программа выпускалась с открытым кодом. Любой желающий мог вносить свои правки, разрабатывать дополнения и создавать обновления на базе изначального программного обеспечения. До сегодняшнего дня «дожили» три ответвления некогда созданного инструмента «OpenAL»:

openal что это такое. Смотреть фото openal что это такое. Смотреть картинку openal что это такое. Картинка про openal что это такое. Фото openal что это такое

OpenAL: для чего эта программа?

Чаще всего это программа используется при создании гонок, хоть звук и не самый важный компонент такого рода игр. В последнее время это программное обеспечение используют и при разработке игр на Android и iOS, завоевывая рынок мобильных устройств. Так что в ближайшем будущем мы еще много раз услышим об этом удобном инструменте.

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

openal что это такое. Смотреть фото openal что это такое. Смотреть картинку openal что это такое. Картинка про openal что это такое. Фото openal что это такое

Видео о технологии OpenAL

В этом видео Леонид Потапов расскажет о софте, необходимом для любой компьютерной игры, среди которого находится и «OpenAL»:

Источник

OpenAL для Windows 10 x32/64 bit

Большинство пользователей-ценителей хороших компьютерных игр хоть раз в жизни сталкивались с ошибкой, вызванной отсутствием в системе файла «openal32.dll». Однако мало кто пытался разобраться, что же это за компонент и как вернуть его в коневой каталог. Ответ на этот вопрос не так сложен, как может показаться на первый взгляд. Openal32.dll –файл библиотеки аудиофайлов OpenAL.

openal что это такое. Смотреть фото openal что это такое. Смотреть картинку openal что это такое. Картинка про openal что это такое. Фото openal что это такое

openal что это такое. Смотреть фото openal что это такое. Смотреть картинку openal что это такое. Картинка про openal что это такое. Фото openal что это такое

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

openal что это такое. Смотреть фото openal что это такое. Смотреть картинку openal что это такое. Картинка про openal что это такое. Фото openal что это такое

Возможности

Изначально программа предназначалась для системной адаптации приложений с Windows на Linux. Однако после смены компании-владельца лицензии в исходный код была добавлена поддержка программного обеспечения NVIDIA, что изменило специализацию утилиты. Теперь основной задачей, которую должна решать программа, является перекодировка и наложение масок и эффектов на звуковые дорожки.

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

Плюсы и минусы

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

Но есть и существенный минус, усложняющий работу с OpenAL:

Выводы

OpenAL –многофункциональная, кроссплатформенная утилита, позволяющая создавать реалистичное аудио сопровождение на всех современных играх. Она универсальна и довольно компактна, работает непосредственно с корневой системой и поэтому не занимает много места на жестком диске. Даже при сбое ее всегда можно переустановить и продолжать наслаждаться игровым процессом. Разработчик продумал все мелочи, поэтому сейчас эта программа значительно превосходит конкурентов по качеству обработки информации и файлов.

Скачать утилиту можно на нашем сайте – там всегда есть последняя версия. Не стоит искать файл на сторонних сайтах. При попытке скачивания из непроверенного источника можно наткнуться на вирусный компонент.

Аналоги

Утилита используется повсеместно, большинство видеоигр использует именно библиотеки OpenAL для работы со звуком, поэтому данное программное обеспечение практически не имеет аналогов. Обычно, если ОпенАЛ не устраивает по каким-то причинам разработчиков, то они самостоятельно разрабатывают и внедряют в свои продукты алгоритмы обработки звука. Хоть некоторые разработчики и пытаются конкурировать с OpenAL, практически никто не может обойти ее, ведь она, довольно простая в использовании, при этом обладает огромным количеством различных эффектов и возможностей для работы с аудиорядом.

Источник

Руководство по работе с OpenAL на C++. Часть 1: воспроизводим звук

Вашей игре нужен звук! Наверно, вы уже использовали OpenGL для рисования на экране. Вы разобрались с его API, и поэтому обратились к OpenAL, потому что название кажется знакомым.

Что же, хорошие новости — OpenAL тоже имеет очень знакомый API. Он изначально задумывался для имитации API спецификации OpenGL. Именно поэтому я выбрал его среди множества звуковых систем для игр; к тому же он кроссплатформенный.

В этой статье я подробно расскажу о том, какой код нужен для использования OpenAL в игре, написанной на C++. Мы обсудим звуки, музыку и позиционирование звука в 3D-пространстве с примерами кода.

История OpenAL

Постараюсь быть кратким. Как говорилось выше, он намеренно разрабатывался как имитация OpenGL API, и на то есть причина. Это удобный API, который многим известен, и если графика — одна сторона игрового движка, то звук должен быть другой. Изначально OpenAL должен был стать open-source, но потом кое-что произошло…

Людей не так сильно интересует звук, как графика, поэтому в конечном итоге Creative сделала OpenAL своей собственностью, а эталонная реализация теперь проприетарна и небесплатна. Но! Спецификация OpenAL по-прежнему является «открытым» стандартом, то есть она публикуется.

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

Открытая спецификация позволила другим людям создать open-source-реализацию спецификации. Одной из таких реализаций является OpenAL Soft, и, честно говоря, нет никакого смысла искать любые другие. Это та реализация, которую буду использовать я, и рекомендую вам использовать её же.

Она кроссплатформенная. Реализована она достаточно любопытно — по сути, внутри библиотека использует другие звуковые API, присутствующие в вашей системе. В Windows она использует DirectSound, в Unix — OSS. Благодаря этому она и смогла стать кроссплатформенной; в сущности, это громкое название для обёртки API.

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

Но хватит истории, давайте перейдём к технологиям.

Что нужно, чтобы писать код на OpenAL?

Нужно собрать OpenAL Soft в выбранном вами тулчейне. Это очень простой процесс, который можно выполнить в соответствии с инструкциями в разделе Source Install. У меня никогда не возникало с этим проблем, но если появятся затруднения, то напишите комментарий под оригиналом статьи или напишите в список рассылки OpenAL Soft.

Далее вам понадобится несколько звуковых файлов и способ их загрузки. Загрузка аудиоданных в буферы и тонкие подробности различных аудиоформатов находятся за пределами тематики этой статьи, но вы можете почитать о загрузке и потоковом воспроизведении файлов Ogg/Vorbis. Загрузка файлов WAV очень проста, об этом уже есть сотни статей в Интернете.

Задачу поиска аудиофайлов вам придётся решать самим. В Интернете есть множество шумов и взрывов, которые можно скачать. Если у вас есть слух, то можете попробовать написать собственную чиптюн-музыку [перевод на Хабре].

Кроме того, держите под рукой Programmers Guide from OpenALSoft. Эта документация гораздо лучше pdf с «официальной» специализацией.

Вот, собственно, и всё. Будем считать, что вы уже знаете, как писать код, использовать IDE и тулчейн.

Обзор OpenAL API

Как я уже несколько раз говорил, он похож на OpenGL API. Схожесть заключается в том, что он основан на состояниях и вы взаимодействуете с дескрипторами/идентификаторами, а не с самими объектами напрямую.

Существуют расхождения между условными обозначениями API в OpenGL и OpenAL, но они незначительны. В OpenGL для генерации контекста рендеринга нужно выполнять специальные вызовы ОС. Эти вызовы для разных ОС различны и на самом деле не являются частью спецификации OpenGL. В OpenAL всё иначе — функции создания контекста являются частью спецификации и одинаковы вне зависимости от операционной системы.

При взаимодействии с API существуют три основных типа объектов, с которыми вы взаимодействуете. Listeners («слушатели») — это местонахождение «ушей», расположенных в 3D-пространстве (всегда существует только один listener). Sources («источники») — это «динамики», издающие звук, опять-таки в 3D-пространстве. Listener и sources можно перемещать в пространстве и в зависимости от этого изменяется то, что вы слышите через динамики в игре.

Последние объекты — это buffers («буферы»). В них хранятся сэмплы звуков, которые sources будут воспроизводить для listeners.

Существуют также modes («режимы»), которые игра использует для изменения способа обработки звука через OpenAL.

Sources

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

Listener

Единственный комплект «ушей» в игре. То, что слышит listener, воспроизводится через динамики компьютера. Он тоже имеет положение.

Buffers

В OpenGL их аналогом является Texture2D. По сути, это аудиоданные, которые воспроизводит source.

Типы данных

Чтобы иметь возможность поддержки кроссплатформенного кода, OpenAL выполняет определённую последовательность действий и задаёт некоторые типы данных. На самом деле, он так точно следует OpenGL, что мы даже можем напрямую преобразовывать типы OpenAL в типы OpenGL. В таблице ниже перечислены они и их эквиваленты.

Тип OpenALТип OpenALCТип OpenGLC++ TypedefОписание
ALbooleanALCbooleanGLbooleanstd::int8_t8-битное булево значение
ALbyteALCbyteGLbytestd::int8_t8-битное целочисленное значение дополнительного кода со знаком
ALubyteALCubyteGLubytestd::uint8_t8-битное целочисленное значение без знака
ALcharALCcharGLcharcharсимвол
ALshortALCshortGLshortstd::int16_t16-битное целочисленное значение дополнительного кода со знаком
ALushortALCushortGLushortstd::uint16_t16-битное целочисленное значение без знака
ALintALCintGLintstd::int32_t32-битное целочисленное значение дополнительного кода со знаком
ALuintALCuintGLuintstd::uint32_t32-битное целочисленное значение без знака
ALsizeiALCsizeiGLsizeistd::int32_tнеотрицательное 32-битное двоичное целочисленное значение
ALenumALCenumGLenumstd::uint32_tперечислимое 32-битное значение
ALfloatALCfloatGLfloatfloat32-битное значение с плавающей запятой IEEE 754
ALdoubleALCdoubleGLdoubledouble64-битное значение с плавающей запятой IEEE 754
ALvoidALCvoidGLvoidvoidпустое значение

Распознавание ошибок OpenAL

Есть статья о том, как упростить распознавание ошибок OpenAL, но ради полноты руководства я повторю её здесь. Существует два типа вызовов OpenAL API: обычные и контекстные.

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

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

Затем мы реализуем две разные шаблонные функции, которые будут «оборачивать» все наши вызовы OpenGL.

А теперь то же самое для вызовов alc :

Вот и всё. Обычно вызов OpenAL на C++ выглядит как один из следующих вариантов:

Но теперь мы можем делать это вот так:

Возможно, это выглядит для вас странно, но мне так удобнее. Разумеется, вы можете выбрать другую структуру.

Я не буду объяснять код, потому что это не совсем в тематике нашей статьи; но он очень очевиден, если читать его параллельно со спецификацией файла WAV.

Инициализация и уничтожение

ALCdevice аналогично выбору графической карты. на которой ваша OpenGL-игра будет выполнять рендеринг. ALCcontext аналогичен контексту рендеринга, который нужно создать (уникальным для операционной системы образом) для OpenGL.

ALCdevice

OpenAL Device — это то, через что выполняется вывод звука, будь то звуковая карта или чип, но теоретически это может быть и множеством различных вещей. Аналогично тому, как стандартный вывод iostream может быть вместо экрана принтером, устройство может быть файлом или даже потоком данных.

Тем не менее, для программирования игр это будет звуковое устройство, и обычно мы хотим, чтобы это было стандартное устройство вывода звука в системе.

Для получения списка доступных в системе устройств можно запросить их такой функцией:

В зависимости от того, выполнили ли вы перечисление или нет, ошибка может остановить выполнение программы на дорожках. Нет устройства = нет OpenAL; нет OpenAL = нет звука; нет звука = нет игры.

Последнее, что мы делаем при закрытии программы — правильно её завершаем.

Возможно, вы заметили, что вызовы с alcCall отправляют две копии устройства. Так получилось из-за того, как работает шаблонная функция — одна ей нужна для проверки ошибок, а вторая используется как параметр функции.

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

Наш ALCcontext

Вторая часть инициализации — это контекст. Как и ранее, он аналогичен контексту рендеринга из OpenGL. В одной программе может быть несколько контекстов и мы можем переключаться между ними, но нам это не понадобится. Каждый контекст имеет собственные listener и sources, и их нельзя передавать между контекстами.

Возможно, это полезно в ПО обработки звука. Однако для игр в 99.9% случаев достаточно только одного контекста.

Создать новый контекст очень просто:

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

Название атрибутаОписание
ALC_FREQUENCYЧастота микширования в буфер вывода, измеряемая в Гц
ALC_REFRESHИнтервалы обновления, измеряемые в Гц
ALC_SYNC0 или 1 обозначают, должен ли это быть синхронный или асинхронный контекст
ALC_MONO_SOURCESЗначение, помогающее сообщить, сколько источников вы будете использовать, которым потребуется возможность обработки монофонических звуковых данных. Оно не ограничивает максимально допустимое количество, просто позволяет быть более эффективным, когда знаешь это заранее.
ALC_STEREO_SOURCESТо же самое, но для стереоданных.

Создания контекста недостаточно. Нам ещё нужно сделать его текущим — выглядит похоже на Windows OpenGL Rendering Context, правда? Это то же самое.

Завершив с контекстом, т.е. при выходе из программы, нужно, чтобы контекст больше не был текущим, а затем уничтожить его.

Единственная возможная ошибка от alcDestroyContext такая же, как и у alcMakeContextCurrent — ALC_INVALID_CONTEXT ; если вы всё делаете правильно, то не получите её, а если получаете, то с этим ничего нельзя поделать.

Зачем проверять наличие ошибок, с которыми ничего нельзя сделать?

Воспроизводим наш первый звук

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

I am the protector of this system!

Итак, откроем IDE и используем следующий код. Не забудьте подключить OpenAL Soft и добавить показанный выше код загрузки файла и код проверки ошибок.

Компилируем! Компонуем! Запускаем! I am the prrrootector of this system. Если вы не слышите звука, то снова всё проверьте. Если в окне консоли что-то написано, то это должен быть стандартный вывод потока ошибок, и он важен. Наши функции сообщений об ошибках должны подсказать нам строку исходного кода, сгенерировавшую ошибку.

Найдя ошибку, изучите Programmers Guide и в спецификацию, чтобы понять, при каких условиях эта ошибка может быть сгенерирована функцией. Это поможет вам разобраться. Если не удастся, то оставьте комментарий под оригиналом статьи, и я попробую помочь.

Загрузка данных RIFF WAVE

Это относится к коду загрузки wave. Важно то, что мы получаем данные, или как указатель, или собранные в вектор: количество каналов, частота дискретизации и количество битов на сэмпл.

Генерация буфера

Вероятно, это выглядит для вас знакомым, если вы когда-нибудь генерировали буферы текстурных данных в OpenGL. По сути, мы генерируем буфер и притворяемся, что он будет существовать только в звуковой карте. На самом же деле он скорее всего будет храниться в обычной ОЗУ, но спецификация OpenAL абстрагирует все эти операции.

Итак, значение ALuint является дескриптором нашего буфера. Помните, что buffer в сущности является звуковыми данными в памяти звуковой карты. У нас больше нет прямого доступа к этим данным, поскольку мы забрали их из программы (из обычной ОЗУ) и переместили в звуковую карту/чип и т.п. Аналогичным образом работает OpenGL, перемещая текстурные данные из ОЗУ во VRAM.

Определяем формат звуковых данных

Звуковые данные работают так: существует несколько каналов и есть величина битов на сэмпл. Данные состоят из множества сэмплов.

Для определения количества сэмплов в аудиоданных мы делаем следующее:

Что удобным образом можно преобразовать в вычисление длительности звуковых данных:

Вернёмся к format — нам нужно сообщить OpenAL формат звуковых данных. Это кажется очевидным, правда? Аналогично тому, как мы заполняет буфер текстур OpenGL, сообщая, что данные находятся в последовательности BGRA и составлены из 8-битных значений, нам нужно сделать подобное и в OpenAL.

Чтобы сообщить OpenAL о том, как интерпретировать данные, на которые указывает тот указатель, который мы передадим позже, нам нужно определить формат данных. Под форматом подразумевается то, как его понимает OpenAL. Существует всего четыре возможных значения. Есть два возможных значения для количества каналов: один для моно, два для стерео.

Заполнение буфера

В конце мы просто удаляем данные, которые получил загрузчик wave. Зачем же? Потому что мы уже скопировали их в звуковую карту. Нам нет необходимости хранить их в двух местах и расходовать драгоценные ресурсы. Если звуковая карта потеряет данные, то мы просто снова загрузим их с диска и нам не нужно будет копировать их для ЦП или ещё кого-то.

Настройка Source

Вспомним, что OpenAL по сути является listener, слушающим звуки, издаваемые одним или несколькими sources. Ну, теперь настало время создать источник звука.

Честно говоря, некоторые из этих параметров задавать необязательно, потому что из значения по умолчанию вполне нам подходят. Но это показывает нам некоторые аспекты, с которыми можно поэкспериментировать и посмотреть, что они делают (можно даже поступить хитро и изменять их со временем).

Сначала мы генерируем source — помните, это снова дескриптор чего-то внутри OpenAL API. Мы задаём pitch (тон) так, чтобы он не изменился, gain (громкость) делаем равным исходному значению звуковых данных, позицию и скорость обнуляем; мы не зацикливаем звук, потому что в противном случае наша программа никогда не завершится, и указываем буфер.

Помните, что разные источники могут использовать один буфер. Например, враги, стреляющие в игрока из разных мест, могут воспроизводить одинаковый звук выстрела, поэтому нам не нужно множество копий звуковых данных, а только несколько мест в 3D-пространстве, из которых издаётся звук.

Воспроизведение звука

Очистка

Так как мы просто воспроизводим звуковые данные один раз и выполняем выход, то удалим ранее созданные source и buffer.

Остальная часть кода понятна без объяснений.

Куда двигаться дальше?

Зная всё описанное в данной статье, уже можно создать небольшую игру! Попробуйте создать Pong или какую-нибудь другую классическую игру, для них большего и не требуется.

Но помните! Эти буферы подходят только для коротких звуков, скорее всего, длительностью несколько секунд. Если вам нужна музыка или озвучка, то потребуется потоковая передача аудиоданных в OpenAL. Об этом мы расскажем в одной из следующих частей серии туториалов.

Источник

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *