int main(int argc, char * argv[]) { FMOD::System *system; FMOD::Sound *sound1, *sound2, *sound3; FMOD::SoundGroup *soundgroup; FMOD::Channel *channel[3]; FMOD_RESULT result; int key=0; int mode=1; unsigned int version; printf("======================================================================\n"); printf("soundgroups Example. Copyright (c) Firelight Technologies 2004-2014.\n"); printf("======================================================================\n"); printf("This example plays 3 sounds in a sound group, demonstrating the effect\n"); printf("of the three different sound group behavior modes\n"); printf("======================================================================\n\n"); /* Create a System object and initialize. */ result = FMOD::System_Create(&system); ERRCHECK(result); result = system->getVersion(&version); ERRCHECK(result); if (version < FMOD_VERSION) { printf("Error! You are using an old version of FMOD %08x. This program requires %08x\n", version, FMOD_VERSION); return 0; } result = system->init(100, FMOD_INIT_NORMAL, 0); ERRCHECK(result); /* Load some sound files from the hard disk. */ result = system->createSound("../media/drumloop.wav", FMOD_HARDWARE | FMOD_LOOP_NORMAL, 0, &sound1); ERRCHECK(result); result = system->createSound("../media/jaguar.wav", FMOD_HARDWARE | FMOD_LOOP_NORMAL, 0, &sound2); ERRCHECK(result); result = system->createSound("../media/swish.wav", FMOD_HARDWARE | FMOD_LOOP_NORMAL, 0, &sound3); ERRCHECK(result); /* Create the sound group with the following attributes: Name = MyGroup MaxAudible = 1 Behavior = Mute */ result = system->createSoundGroup("MyGroup",&soundgroup); ERRCHECK(result); result = soundgroup->setMaxAudible(1); ERRCHECK(result); result = soundgroup->setMaxAudibleBehavior(FMOD_SOUNDGROUP_BEHAVIOR_MUTE); ERRCHECK(result); result = soundgroup->setMuteFadeSpeed(2); ERRCHECK(result); /* Put the sounds in the sound group */ result = sound1->setSoundGroup(soundgroup); ERRCHECK(result); result = sound2->setSoundGroup(soundgroup); ERRCHECK(result); result = sound3->setSoundGroup(soundgroup); ERRCHECK(result); /* Play the sounds (two will be muted because of the behavior mode) */ result = system->playSound(FMOD_CHANNEL_FREE, sound1,false,&channel[0]); ERRCHECK(result); result = system->playSound(FMOD_CHANNEL_FREE, sound2,false,&channel[1]); ERRCHECK(result); result = system->playSound(FMOD_CHANNEL_FREE, sound3,false,&channel[2]); ERRCHECK(result); /* Display help */ printf("=========================================================================\n"); printf("Press 1 BEAVIOR_FAIL \n"); printf(" 2 BEAVIOR_MUTE \n"); printf(" 3 BEAVIOR_STEALLOWEST\n"); printf(" Q Play/stop drumloop sound\n"); printf(" W Play/stop Jaguar sound\n"); printf(" E Play/stop shwish sound\n"); printf(" ESC Quit\n"); printf("=========================================================================\n"); do { float audibility; int index; if( _kbhit()) { key = _getch(); if( key=='1' ) { result = soundgroup->setMaxAudibleBehavior(FMOD_SOUNDGROUP_BEHAVIOR_FAIL); ERRCHECK(result); } if( key=='2' ) { result = soundgroup->setMaxAudibleBehavior(FMOD_SOUNDGROUP_BEHAVIOR_MUTE); ERRCHECK(result); } if( key=='3' ) { result = soundgroup->setMaxAudibleBehavior(FMOD_SOUNDGROUP_BEHAVIOR_STEALLOWEST); ERRCHECK(result); } if( key=='q' ) { channel[0]->getIndex(&index); if (!index) { result = system->playSound(FMOD_CHANNEL_FREE, sound1,false,&channel[0]); if (result!=FMOD_ERR_MAXAUDIBLE) { ERRCHECK(result); } } else { result = channel[0]->stop(); ERRCHECK(result); } } if( key=='w' ) { channel[1]->getIndex(&index); if (!index) { result = system->playSound(FMOD_CHANNEL_FREE, sound2,false,&channel[1]); if (result!=FMOD_ERR_MAXAUDIBLE) { ERRCHECK(result); } } else { result = channel[1]->stop(); ERRCHECK(result); } } if( key=='e' ) { channel[2]->getIndex(&index); if (!index) { result = system->playSound(FMOD_CHANNEL_FREE, sound3,false,&channel[2]); if (result!=FMOD_ERR_MAXAUDIBLE) { ERRCHECK(result); } } else { result = channel[2]->stop(); ERRCHECK(result); } } } // print out a small visual display { char s[80]; char s1[6]; char s2[3][6]; int i; FMOD_SOUNDGROUP_BEHAVIOR behavior; soundgroup->getMaxAudibleBehavior(&behavior); switch (behavior) { case FMOD_SOUNDGROUP_BEHAVIOR_FAIL : { sprintf(s1,"FAIL"); break; } case FMOD_SOUNDGROUP_BEHAVIOR_MUTE : { sprintf(s1,"MUTE"); break; } case FMOD_SOUNDGROUP_BEHAVIOR_STEALLOWEST : { sprintf(s1,"STEAL"); break; } }; for (i=0; i<3; i++) { channel[i]->getAudibility(&audibility); if (!audibility) { channel[i]->getIndex(&index); if (!index) { sprintf(s2[i], "STOP"); } else { sprintf(s2[i], "MUTE"); } } else { sprintf(s2[i], "PLAY"); } } sprintf(s, "MODE:%6s | SOUND1: %s | SOUND2: %s | SOUND3: %s |", s1, s2[0], s2[1], s2[2]); printf("%s\r", s); } result = system->update(); ERRCHECK(result); Sleep(10); }while (key!=27); return 0; }