Мне нужно было играть несколько звуков одновременно, поэтому я попытался инициализировать FMOD::System
со многими каналами, но после воспроизведения некоторых файлов ничего не происходит. Когда я сплю 1 секунду, звук останавливается с count
около 35, со сном 0,1 секунды последний count
около 100
int count = 1;
FMOD::System *system = NULL;
FMOD::System_Create(&system);
system->init(100, FMOD_INIT_NORMAL, 0);
while(true)
{
FMOD::Sound *sound = NULL;
system->createSound("test.wav", FMOD_DEFAULT, FMOD_DEFAULT ,&sound);
FMOD::Channel *channel = NULL;
FMOD_RESULT result = system->playSound(FMOD_CHANNEL_FREE, sound, false, &channel);
cout << "count: " << count << ", " << result;
count++;
struct timespec ts;
ts.tv_sec = 1;
nanosleep(&ts, NULL);
}
Когда я также записываю эту часть в цикл while, я также узнаю, что указатель на FMOD::System
изменяется в самом начале и остается неизменным через несколько секунд.
FMOD::System *system = NULL;
FMOD::System_Create(&system);
system->init(100, FMOD_INIT_NORMAL, 0);
Что я сделал не так? Он даже не использует 100 каналов!
Что я могу сделать, чтобы воспроизвести много звуков одновременно?
Проблема была в том, что я забыл system->update()
,
Код должен выглядеть следующим образом:
int count = 1;
FMOD::System *system = NULL;
FMOD::System_Create(&system);
system->init(100, FMOD_INIT_NORMAL, 0);
while(true)
{
FMOD::Sound *sound = NULL;
system->createSound("test.wav", FMOD_DEFAULT, FMOD_DEFAULT ,&sound);
FMOD::Channel *channel = NULL;
FMOD_RESULT result = system->playSound(FMOD_CHANNEL_FREE, sound, false, &channel);
system->update(); // very important!!!
cout << "count: " << count << ", " << result;
count++;
struct timespec ts;
ts.tv_sec = 1;
nanosleep(&ts, NULL);
}
Других решений пока нет …