Я использую FMOD в Ubuntu для воспроизведения звука в своей игре.
У меня есть следующий
#include "SoundEngine.h"
bool SoundEngine::initSystem()
{
System_Create(&system);// create an instance of the game engine
system->init(32, FMOD_INIT_NORMAL, 0);// initialise the game engine with 32 channels
//load sounds
system->createSound("Media/NoMoreMagic.ogg", FMOD_HARDWARE, 0, &sound1);
sound1->setMode(FMOD_LOOP_OFF); /* drumloop.wav has embedded loop points which automatically makes looping turn on, */
/* so turn it off here. We could have also just put FMOD_LOOP_OFF in the above CreateSound call. */
system->playSound(FMOD_CHANNEL_FREE, sound1, false, 0);
return true;
}
И SoundEngine.h:
#ifndef SOUNDENGINE_H_
#define SOUNDENGINE_H_
#include "FMOD/inc/fmod.hpp" //fmod c++ header
#pragma comment( lib, "fmodex_vc.lib" ) // fmod library
using namespace FMOD;
class SoundEngine{
public:
bool initSystem(void);
private:
//FMod Stuff
System *system; //handle to FMOD engine
Sound *sound1, *sound2; //sound that will be loaded and played
};
#endif /* SOUNDENGINE_H_ */
Проблема в том, что FMOD_HARDWARE или FMOD_CHANNEL_FREE не найден.
Кто-нибудь знает, где они?
EDIT: Другое дело, что в комментарии прагмы выдается предупреждение, в котором игнорируется прагма. Может быть, проблема связана с прагмой? Как я могу исправить прагму?
Я считаю, что FMOD_HARDWARE - это более старый FMOD Ex API. Вы используете FMOD 5? В моих вызовах System :: createSound я использую FMOD_DEFAULT или FMOD_CREATESAMPLE (последний загрузит весь звук и распакует его в памяти, чтобы ускорить воспроизведение), который, похоже, хорошо использует оборудование. Для вашего вызова playSound попробуйте
FMOD::Channel *channel;
system->playSound(sound1, NULL, false, &channel);
#pragma comment
для ссылки на библиотеку является расширением Microsoft Visual C ++. Кроме того, вы пытаетесь связать файл.lib
, который обычно является библиотекой Windows. В системах POSIX (таких как Ubuntu) файлы статических библиотек заканчиваются на.a
.