звуковое насилие ПАЛАГИН АНТОН 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() для обновления состояния библиотеки. |