Звуковое насилие

(Играем и обсуждаем игры)

Модератор: Buxyr

Аватара пользователя
Buxyr

Коммандо Активист Друг форума Кот Леопольд
Рейнджер
Сообщения: 330
Рег. Вс май 02, 2010 10:07 am
Награды: 4
Репутация: 95
Вклад в проект: 27
Откуда: Владимир
Поблагодарили: 3 раза

Звуковое насилие

Сообщение Buxyr » Пт июн 18, 2010 12:48 pm

УЧИМСЯ ПРАВИЛЬНО БУДИТЬ СОСЕДЕЙ ПО НОЧАМ
ЗВУКОВОЕ СОПРОВОЖДЕНИЕ ПОКА ИГРАЕТ В КОМПЬЮТЕРНЫХ ИГРАХ ТОЛЬКО ВТОРОСТЕПЕННЫЕ РОЛИ. СИЛЬНЫЙ РАЗБРОС ПО КАЧЕСТВУ АУДИОАППАРАТУРЫ, КОТОРОЙ ПОЛЬЗУЮТСЯ ИГРОКИ, ПОКА НЕ ПОЗВОЛЯЕТ ЗВУКУ ВСТАТЬ НА ОДНУ СТУПЕНЬКУ С ГРАФИКОЙ ТАК, КАК ЭТО ПРОИЗОШЛО В КИНОИНДУСТРИИ

Synopsis
Владельцев интегрированных домашних комплексов развлечений можно пересчитать по пальцам, а обладателей качественной аппаратуры — не сыскать и днем с огнем. Вот почему не во всех играх можно встретить качественный звук, который гармонично дополняет игровой процесс. Обычно хороший звук присутствует в симуляторах техники и экшенах, то есть в играх, где есть честное трехмерное пространство, по которому игрок свободно перемещается. В подобных играх применяется трехмерное позиционирование звука и его обработка EAX-подобными эффектами, которые подчеркивают звуковые свойства помещения, в котором находится игрок. Чтобы ты воспринимал сцены поглубже и поэмоциональнее, талантливые дизайнеры игр динамически оперируют музыкальным сопровождением и звуковыми эффектами: ломание дверей, взрывы, злобные крики и рыки и т.д. Помню, как после недели игры в System Shock 2 я некоторое время пугался, если слышал какие-нибудь визжащие звуки — настолько хорошо мой мозг запомнил ситуации, в которые попадал герой игры после того, как раздавались вскрики-визги.

Для качественного воспроизведения звуков обычно не хватает возможностей API операционной системы, и разработчики используют специализированные звуковые библиотеки. В этой статье я расскажу о том, как работать с кросс-платформенной библиотекой FMOD. Принципы работы с прочими библиотеками похожи на описанные как две капли воды. Этот инструмент довольно часто используется в играх, поддерживает и PC, и Mac, и все современные игровые консоли, в том числе консоли следующего поколения PlayStation 3 и Xbox 360. FMOD доступен для скачивания и бесплатен для некоммерческого использования. Не стоит забывать, что некоторые звуковые форматы, такие как MP3, также требуют лицензионных отчислений, поэтому в коммерческих продуктах стоит задуматься о бесплатных альтернативах, например OGG.

Инициализация
Методы библиотеки возвращают результат своего выполнения FMOD_RESULT. Если это значение не равно FMOD_OK, то произошла ошибка. Диагностическое сообщение об ошибке можно получить с помощью функции FMOD_ErrorString(). FMOD поддерживает два интерфейса С и С++, названия функций и методов классов, а также их сигнатуры в этих интерфейсах идентичны. Функциональность FMOD расширяется с помощью плагинов, из них поддерживаются следующие: DSP (digital signal processing), форматы данных, вывод звука.

//Создаем системный объект
result = FMOD::System_Create(&system);

//Проверяем версию библиотеки
result = system->getVersion(&version);
if (version < FMOD_VERSION)
{
printf("Error! You are using an old version of FMOD %08x. This program requires %08x\n", version, FMOD_VERSION);
exit(-1);
}

//Получаем параметры конфигурации акустики пользователя, установленных в панели управления.
result = system->getDriverCaps(0, 0, 0, 0, &speakermode);

//Устанавливаем для программного микшера FMOD параметры акустики
result = system->setSpeakerMode(speakermode);

//Инициализируем FMOD
result = system->init(32, FMOD_INIT_NORMAL, 0);

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

//Освобождаем ресурсы звуков
result = sound1->release();
result = sound2->release();

//Завершаем работу системного объекта
result = system->close();

//Освобождаем системные ресурсы
result = system->release();

При завершении работы библиотеки для каждого созданного объекта библиотеки вызываем метод release(). Перед высвобождением системных ресурсов вызываем метод close().

//Загружаем стереозвук, звук будет обрабатываться программно
result = system->createSound("../media/drumloop.wav", FMOD_SOFTWARE | FMOD_2D, 0, &sound1);

//Отключаем циклическое воспроизведение звука
result = sound1->setMode(FMOD_LOOP_OFF);

//Загружаем стереозвук, обрабатываться он будет аппаратно, и, кроме того, будем его позиционировать в 3D-пространстве
result = system->createSound("../media/stereo.ogg", FMOD_HARDWARE | FMOD_3D, 0, &sound2);

Загрузка звуков осуществляется с помощью метода System::createSound(), который загружает и распаковывает звук в память и подходит только для оперативных коротких звуков (выстрелы, шаги и т.д.). Музыку лучше загружать в режиме потока с помощью функции System::createStream(), в этом случае можно указать размеры буфера для обработки этого звукового потока, что делается с помощью метода System::setStreamBufferSize(). Размер памяти, занятой FMOD и его ресурсами, можно выяснить с помощью метода FMOD::Memory_GetStats(). Добавить собственный механизм менеджмента памяти — FMOD::Memory_Initialize(). Кроме имени файла со звуком, эти функции принимают также флаги создания. Например, в листинге загруженный звук обрабатывается без использования аппаратного ускорения и только в двумерном режиме. Для позиционирования звука в трехмерном пространстве необходимо указывать флаги семейства FMOD_3D. Если режим использования звука необходимо динамически изменить, то после загрузки можно установить нужный режим использования с помощью метода Sound::setMode().

Работа со звуком
После инициализации FMOD и загрузки звуков в память уже можно прослушать их. Методы, проигрывающие звуки, работают в асинхронном режиме, то есть управление возвращается вызвавшей программе сразу после окончания подготовки звука к проигрыванию. Работу по выводу звука на звуковую карту и микширование FMOD выполняет в фоновых потоках. Периодически (раз в кадр) необходимо вызывать метод системного объекта update() для обновления состояния библиотеки.

//Проигрываем звук на свободном канале, номер канала — возвращаемый параметр
result = system->playSound(system, FMOD_CHANNEL_FREE, sound1, TRUE, &channel);

//Эта конфигурация микшера проиграет звук на всех семи колонках акустической системы 7.1
result = channel->setSpeakerMix(channel, 1.0f, 1.0f, 1.0f, 1.0f, 1.0f, 1.0f, 1.0f, 1.0f);

//Снимаем звук с паузы
result = channel->setPaused(channel, FALSE);

//Обновляем состояние FMOD
system->update();

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

//Устанавливаем параметры среды распространения звука
result = system->set3DSettings( 0.9, 0.9, 1.0 );

//Устанавливаем позицию и скорость источника звука
FMOD_VECTOR vel, pos;

result = channel->set3DAttributes(&pos, &vel);

//Устанавливаем позицию и скорость слушателя звука
FMOD_VECTOR vel, pos, forward, up;

result = channel->set3DListenerAttributes( 0, &pos, &vel, &forward, &up);

Как видишь, ничего сложного нет. Главное — помни о соседях, о магической цифре 22.00 и о том, что судебные приставы могут пожаловать к тебе для конфискации дорогостоящей акустики

ЗВУКОВОЕ СОПРОВОЖДЕНИЕ ПОКА ИГРАЕТ В КОМПЬЮТЕРНЫХ ИГРАХ ТОЛЬКО ВТОРОСТЕПЕННЫЕ РОЛИ

НЕ ВО ВСЕХ ИГРАХ МОЖНО ВСТРЕТИТЬ КАЧЕСТВЕННЫЙ ЗВУК, КОТОРЫЙ ГАРМОНИЧНО ДОПОЛНЯЕТ ИГРОВОЙ ПРОЦЕСС

ЧТОБЫ ТЫ ВОСПРИНИМАЛ СЦЕНЫ ПОГЛУБЖЕ И ПОЭМОЦИОНАЛЬНЕЙ, ТАЛАНТЛИВЫЕ ДИЗАЙНЕРЫ ИГР ДИНАМИЧЕСКИ ОПЕРИРУЮТ МУЗЫКАЛЬНЫМ СОПРОВОЖДЕНИЕМ И ЗВУКОВЫМИ ЭФФЕКТАМИ

FMOD ДОСТУПЕН ДЛЯ СКАЧИВАНИЯ И БЕСПЛАТЕН ДЛЯ НЕКОММЕРЧЕСКОГО ИСПОЛЬЗОВАНИЯ

ЧТОБЫ НАЧАТЬ РАБОТУ С FMOD, НЕОБХОДИМО СОЗДАТЬ СИСТЕМНЫЙ ОБЪЕКТ


ПАЛАГИН АНТОН AKA TONY


Искусство это жизнь

Вернуться в «Игромир»

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и 0 гостей