// This example will show how to use sound effects such as echo, reverb and distortion. // irrKlang supports the effects Chorus, Compressor, Distortion, Echo, Flanger // Gargle, 3DL2Reverb, ParamEq and WavesReverb. // Lets start: include the irrKlang headers and other input/output stuff // needed to print and get user input from the console. And as exlained // in the first tutorial, we use the namespace irr and audio and // link to the irrKlang.dll file. #if defined(WIN32) #include #else #include "../common/conio.h" #endif #include #include #include using namespace irrklang; #pragma comment(lib, "irrKlang.lib") // link with irrKlang.dll // Now let's start with the irrKlang 3D sound engine example 05, // demonstrating sound effects. Simply startup the engine using // using createIrrKlangDevice() with default options/parameters. int main(int argc, const char** argv) { // start the sound engine with default parameters ISoundEngine* engine = createIrrKlangDevice(); if (!engine) return 0; // error starting up the engine // we play a .xm file as music here. Note that the last parameter // named 'enableSoundEffects' has been set to 'true' here. If this // is not done, sound effects cannot be used with this sound. // After this, we print some help text and start a loop which reads // user keyboard input. const char* filename = "../../media/MF-W-90.XM"; #ifdef __BIG_ENDIAN__ filename = "../../media/ophelia.mp3"; // no xm playback on power pcs currently #endif ISound* music = engine->play2D(filename, true, false, true, ESM_AUTO_DETECT, true); // Print some help text and start the display loop printf("\nSound effects example. Keys:\n"); printf("\nESCAPE: quit\n"); printf("w: enable/disable waves reverb\n"); printf("d: enable/disable distortion\n"); printf("e: enable/disable echo\n"); printf("a: disable all effects\n"); while(true) // endless loop until user exits { int key = getch(); if (key == 27) break; // user pressed ESCAPE key else { // user maybe pressed an effects key, // now enable or disable a sound effect. // We get a pointer to the ISoundEffectControl interface, // but this only exists if the sound driver supports sound effects // and if the sound was started setting the 'enableSoundeffects' flag // to 'true' as we did above. This pointer is only valid as long as // we don't call music->drop() and delete the music with this. ISoundEffectControl* fx = 0; if (music) fx = music->getSoundEffectControl(); if (!fx) { // some sound devices do not support sound effects. printf("This device or sound does not support sound effects.\n"); continue; } // here we disable or enable the sound effects of the music depending // on what key the user pressed. Note that every enableXXXSoundEffect() // method also accepts a lot of parameters, so it is easily possible // to influence the details of the effect. If the sound effect is // already active, it is also possible to simply call the // enableXXXSoundEffect() method again to just change the effect parameters, // although we aren't doing this here. if (key < 'a') // make key lower key += 'a' - 'A'; switch(key) { case 'd': if (fx->isDistortionSoundEffectEnabled()) fx->disableDistortionSoundEffect(); else fx->enableDistortionSoundEffect(); break; case 'e': if (fx->isEchoSoundEffectEnabled()) fx->disableEchoSoundEffect(); else fx->enableEchoSoundEffect(); break; case 'w': if (fx->isWavesReverbSoundEffectEnabled()) fx->disableWavesReverbSoundEffect(); else fx->enableWavesReverbSoundEffect(); break; case 'a': fx->disableAllEffects(); break; } } } // don't forget to release the resources if (music) music->drop(); // release music stream. engine->drop(); // delete Engine return 0; }