Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- // 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 <conio.h>
- #else
- #include "../common/conio.h"
- #endif
- #include <stdio.h>
- #include <stdlib.h>
- #include <irrKlang.h>
- 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)
- {
- ik_f32 a=8, b=-9, c=7;
- // 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("f: enable/disable chorus\n");
- printf("r: enable/disable flanger\n");
- printf("t: enable/disable gargle\n");
- printf("y: enable/disable compressor\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 'f':
- if(fx->isChorusSoundEffectEnabled())
- fx->disableChorusSoundEffect();
- else
- fx->enableChorusSoundEffect();
- break;
- case 'r':
- if(fx->isFlangerSoundEffectEnabled())
- fx->disableFlangerSoundEffect();
- else
- fx->enableFlangerSoundEffect();
- break;
- case 't':
- if(fx->isGargleSoundEffectEnabled())
- fx->disableGargleSoundEffect();
- else
- fx->enableGargleSoundEffect();
- break;
- case 'y':
- if(fx->isCompressorSoundEffectEnabled())
- fx->disableCompressorSoundEffect();
- else
- fx->enableCompressorSoundEffect();
- break;
- case 'o':
- a+=1;
- fx->enableParamEqSoundEffect(300,36,a);
- break;
- case 'l':
- a-=1;
- fx->enableParamEqSoundEffect(300,36,a);
- break;
- case 'i':
- b+=1;
- fx->enableParamEqSoundEffect(1046.5,24,b);
- break;
- case 'k':
- b-=1;
- fx->enableParamEqSoundEffect(1046.5,24,b);
- break;
- case 'u':
- c+=1;
- fx->enableParamEqSoundEffect(8372,36,c);
- break;
- case 'j':
- c-=1;
- fx->enableParamEqSoundEffect(8372,36,c);
- 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;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement