2011-12-05 26 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); 

... 
その結果、2つの音がほとんどの時間に対し、同時にめったに演奏しないと、非常にランダムであるしかし

2つの演劇の一つだけ...

また、私はループモードがあります:

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

私はあなたの問題を知らないが、あなただけ行うことで、あなたのコード内のすべてのこのifのを避けるように私は、chn1 ... chrN値を格納する配列を使用することをお勧めすることができます

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

Iを問題を解決しました。私は1024チャネルの代わりに、7

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

チャンネルは明らかに非常に軽量であるとFMODを初期化し、したがって、彼らは常にPC上で1024を初期化するために彼らのフォーラムにお勧めします使用後に洗浄する必要がない場合は、この設定は実際には正常に動作します。

関連する問題