2011-12-05 1 views
0

내가 잘못하고 있는지 궁금합니다. 5 개의 다른 채널을 갖기 위해 SoundManager 클래스를 설정했습니다. 게임에서 총을 발사하고 적을 "상처를주는"소리처럼 동시에 재생할 수 있습니다 ... 이것은 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); 

... 

그러나 두 개의 사운드가 동시에 거의 동시에 재생되는 경우 결과는 매우 랜덤합니다. 대부분의 경우 두 개의 재생 중 하나만 재생됩니다.

,210

또한 나는 루프 모드가 있습니다

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 초기화 자신의 포럼에 추천 사용 후 세척 할 필요가없는 경우이 설정은 실제로 잘 작동합니다.