Издательский дом ООО "Гейм Лэнд"СПЕЦВЫПУСК ЖУРНАЛА ХАКЕР #64, МАРТ 2006 г.

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

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

Спецвыпуск: Хакер, номер #064, стр. 064-030-2


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() для обновления состояния библиотеки.

Назад на стр. 064-030-1  Содержание  Вперед на стр. 064-030-3