2011-12-05 132 views
0

我想知道如果我做錯了什麼。我已經建立了我的SoundManager類,以擁有5個不同的頻道,在我的遊戲中,可能會同時播放一些聲音,例如槍響和敵人「傷害」聲音......這就是我設置FMOD和功能我打電話的方式來播放聲音,他們總是倒回到開始: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) 

.... 

,但同樣是隨機的其他非循環的聲音打斷了,即使打在不同的渠道?

我真的很感激任何幫助,您可以提供

預先感謝您爲您可以提供任何幫助。

回答

1

我不知道你的問題,但我可以推薦使用數組存儲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); 
+0

謝謝,這是一個解決方案,我很樂意考慮一旦我找出爲什麼渠道不能正常工作,雖然.. – Alex

0

我解決了這個問題。當我初始化FMOD與1024個通道,而不是7

fmodsys->init(1024, FMOD_INIT_NORMAL, 0); 

渠道顯然是重量很輕,不需要進行清洗後使用,因此,他們建議對他們的論壇在PC上總是初始化1024這樣的設置實際上是正常工作。