FMOD同时播放多种声音

FMOD play multiple sounds at same time

本文关键字:声音 播放 FMOD      更新时间:2023-10-16

我需要同时播放多个声音,所以我尝试用许多通道初始化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);
}