FMOD同时播放多个声音

时间:2013-12-13 21:01:33

标签: c++ fmod

我需要同时播放多个声音,因此我尝试使用多个频道初始化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个频道! 我能做些什么来同步播放很多声音?

1 个答案:

答案 0 :(得分:0)

问题是,我忘了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);
}