gpt4 book ai didi

c++ - FMOD - 无法同时播放声音

转载 作者:行者123 更新时间:2023-11-28 08:13:32 35 4
gpt4 key购买 nike

我想知道我是否做错了什么。我已经将我的 SoundManager 类设置为有 5 个不同的 channel ,在我的游戏中可能会同时播放一些声音,比如开枪和敌人“受伤”的声音......这就是我设置 FMOD 和我调用的函数以一种总是倒回开头的方式播放声音:

void SoundMgr::init(){

System_Create(&fmodsys);
fmodsys->init(5, FMOD_INIT_NORMAL, 0)
}

void SoundMgr::play(string name, int chan){
if(chan == 1){
fmodsys->playSound(FMOD_CHANNEL_FREE, soundMap.find(name)->second, true, &chn1);
chn1->setMode(FMOD_LOOP_OFF);
chn1->setPosition(0, FMOD_TIMEUNIT_PCM);
chn1->setPaused(false);
} else if(chan == 2){
fmodsys->playSound(FMOD_CHANNEL_FREE, soundMap.find(name)->second, true, &chn2);
chn2->setMode(FMOD_LOOP_OFF);
chn2->setPosition(0, FMOD_TIMEUNIT_PCM);
chn2->setPaused(false);
} else if(chan == 3){
fmodsys->playSound(FMOD_CHANNEL_FREE, soundMap.find(name)->second, true, &chn3);
chn3->setMode(FMOD_LOOP_OFF);
chn3->setPosition(0, FMOD_TIMEUNIT_PCM);
chn3->setPaused(false);
} else if(chan == 4){
fmodsys->playSound(FMOD_CHANNEL_FREE, soundMap.find(name)->second, true, &chn4);
chn4->setMode(FMOD_LOOP_OFF);
chn4->setPosition(0, FMOD_TIMEUNIT_PCM);
chn4->setPaused(false);
} else if(chan == 5){
fmodsys->playSound(FMOD_CHANNEL_FREE, soundMap.find(name)->second, true, &chn5);
chn5->setMode(FMOD_LOOP_OFF);
chn5->setPosition(0, FMOD_TIMEUNIT_PCM);
chn5->setPaused(false);
}

}

在我的游戏中(这只是一个例子,但大多数声音都会发生):

....
sMgr->play("gunshot", 1);
....

sMgr->play("rat_hurt", 3);

...

然而,结果是非常随机的,两种声音很少同时播放,而大多数时候只播放两种声音中的一种...

我还有一个循环模式:

void SoundMgr::playRepeat(string name, int chan){
if(chan == 1){
fmodsys->playSound(FMOD_CHANNEL_FREE, soundMap.find(name)->second, true, &chn1);
chn1->setMode(FMOD_LOOP_NORMAL);
chn1->setPosition(0, FMOD_TIMEUNIT_PCM);
chn1->setPaused(false);
} else if(chan == 2)

....

但是即使在不同的 channel 播放,它也会被其他非循环声音随机打断吗?

如果您能提供任何帮助,我将不胜感激

提前感谢您可能提供的任何帮助。

最佳答案

我不知道你的问题,但我可以推荐使用数组来存储 chn1..chrN 值,这样你就可以避免所有这些 if 只需执行以下操作即可:

  assert(chan >= 0 && chan < sizeof(channel_array));
channel& the_chn = channel_array[chan];
fmodsys->playSound(FMOD_CHANNEL_FREE, soundMap.find(name)->second, true, &the_chn);
the_chn->setMode(FMOD_LOOP_NORMAL);
the_chn->setPosition(0, FMOD_TIMEUNIT_PCM);
the_chn->setPaused(false);

关于c++ - FMOD - 无法同时播放声音,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8386360/

35 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com