107 lines
3.1 KiB
C#
107 lines
3.1 KiB
C#
// 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.
|
|
|
|
using System;
|
|
using IrrKlang;
|
|
|
|
namespace CSharp._05._Effects
|
|
{
|
|
class Class1
|
|
{
|
|
[STAThread]
|
|
static void Main(string[] args)
|
|
{
|
|
// start the sound engine with default parameters
|
|
ISoundEngine engine = new ISoundEngine();
|
|
|
|
// 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.
|
|
|
|
ISound music = engine.Play2D("../../media/MF-W-90.XM", false,
|
|
false, StreamMode.AutoDetect, true);
|
|
|
|
// Print some help text and start the display loop
|
|
|
|
Console.Out.Write("\nSound effects example. Keys:\n");
|
|
Console.Out.Write("\nESCAPE: quit\n");
|
|
Console.Out.Write("w: enable/disable waves reverb\n");
|
|
Console.Out.Write("d: enable/disable distortion\n");
|
|
Console.Out.Write("e: enable/disable echo\n");
|
|
Console.Out.Write("a: disable all effects\n");
|
|
|
|
while(true) // endless loop until user exits
|
|
{
|
|
int key = _getch();
|
|
|
|
// Handle user input: Every time the user presses a key in the console,
|
|
// play a random sound or exit the application if he pressed ESCAPE.
|
|
|
|
if (key == 27)
|
|
break; // user pressed ESCAPE key
|
|
else
|
|
{
|
|
ISoundEffectControl fx = null;
|
|
if (music != null)
|
|
fx = music.SoundEffectControl;
|
|
|
|
if (fx == null)
|
|
{
|
|
// some sound devices do not support sound effects.
|
|
Console.Out.Write("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;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
// simple functions for reading keys from the console
|
|
[System.Runtime.InteropServices.DllImport("msvcrt")]
|
|
static extern int _kbhit();
|
|
[System.Runtime.InteropServices.DllImport("msvcrt")]
|
|
static extern int _getch();
|
|
}
|
|
}
|