244 lines
		
	
	
		
			14 KiB
		
	
	
	
		
			C++
		
	
	
	
	
	
			
		
		
	
	
			244 lines
		
	
	
		
			14 KiB
		
	
	
	
		
			C++
		
	
	
	
	
	
| // Copyright (C) 2002-2018 Nikolaus Gebhardt
 | |
| // This file is part of the "irrKlang" library.
 | |
| // For conditions of distribution and use, see copyright notice in irrKlang.h
 | |
| 
 | |
| #ifndef __I_IRRKLANG_SOUND_EFFECT_CONTROL_H_INCLUDED__
 | |
| #define __I_IRRKLANG_SOUND_EFFECT_CONTROL_H_INCLUDED__
 | |
| 
 | |
| #include "ik_IVirtualRefCounted.h"
 | |
| #include "ik_vec3d.h"
 | |
| 
 | |
| 
 | |
| namespace irrklang
 | |
| {
 | |
| 	//! Interface to control the active sound effects (echo, reverb,...) of an ISound object, a playing sound.
 | |
| 	/** Sound effects such as chorus, distorsions, echo, reverb and similar can
 | |
| 	be controlled using this. An instance of this interface can be obtained via
 | |
| 	ISound::getSoundEffectControl(). The sound containing this interface has to be started via 
 | |
| 	ISoundEngine::play2D() or ISoundEngine::play3D() with the flag enableSoundEffects=true, 
 | |
| 	otherwise no acccess to this interface will be available.
 | |
| 	For the DirectSound driver, these are effects available since DirectSound8. For most 
 | |
| 	effects, sounds should have a sample rate of 44 khz and should be at least
 | |
| 	150 milli seconds long for optimal quality when using the DirectSound driver.
 | |
| 	Note that the interface pointer is only valid as long as
 | |
| 	the ISound pointer is valid. If the ISound pointer gets dropped (IVirtualRefCounted::drop()),
 | |
| 	the ISoundEffects may not be used any more. */
 | |
| 	class ISoundEffectControl
 | |
| 	{
 | |
| 	public:
 | |
| 
 | |
| 		//! Disables all active sound effects
 | |
| 		virtual void disableAllEffects() = 0;
 | |
| 
 | |
| 		//! Enables the chorus sound effect or adjusts its values.
 | |
| 		/** Chorus is a voice-doubling effect created by echoing the
 | |
| 		original sound with a slight delay and slightly modulating the delay of the echo. 
 | |
| 		If this sound effect is already enabled, calling this only modifies the parameters of the active effect.
 | |
| 		\param fWetDryMix Ratio of wet (processed) signal to dry (unprocessed) signal. Minimal Value:0, Maximal Value:100.0f;
 | |
| 		\param fDepth Percentage by which the delay time is modulated by the low-frequency oscillator, in hundredths of a percentage point. Minimal Value:0, Maximal Value:100.0f;
 | |
| 		\param fFeedback Percentage of output signal to feed back into the effect's input. Minimal Value:-99, Maximal Value:99.0f;
 | |
| 		\param fFrequency Frequency of the LFO. Minimal Value:0, Maximal Value:10.0f;
 | |
| 		\param sinusWaveForm True for sinus wave form, false for triangle.
 | |
| 		\param fDelay Number of milliseconds the input is delayed before it is played back. Minimal Value:0, Maximal Value:20.0f;
 | |
| 		\param lPhase Phase differential between left and right LFOs. Possible values:
 | |
| 			-180, -90, 0, 90, 180
 | |
| 		\return Returns true if successful. */
 | |
| 		virtual bool enableChorusSoundEffect(ik_f32 fWetDryMix = 50,
 | |
| 											ik_f32 fDepth = 10,
 | |
| 											ik_f32 fFeedback = 25,
 | |
| 											ik_f32 fFrequency = 1.1,
 | |
| 											bool sinusWaveForm = true,
 | |
| 											ik_f32 fDelay = 16,
 | |
| 											ik_s32 lPhase = 90) = 0;
 | |
| 
 | |
| 		//! removes the sound effect from the sound
 | |
| 		virtual void disableChorusSoundEffect() = 0;
 | |
| 
 | |
| 		//! returns if the sound effect is active on the sound
 | |
| 		virtual bool isChorusSoundEffectEnabled() = 0;
 | |
| 
 | |
| 		//! Enables the Compressor sound effect or adjusts its values.
 | |
| 		/** Compressor is a reduction in the fluctuation of a signal above a certain amplitude. 
 | |
| 		If this sound effect is already enabled, calling this only modifies the parameters of the active effect.
 | |
| 		\param fGain Output gain of signal after Compressor. Minimal Value:-60, Maximal Value:60.0f;
 | |
| 		\param fAttack Time before Compressor reaches its full value. Minimal Value:0.01, Maximal Value:500.0f;
 | |
| 		\param fRelease Speed at which Compressor is stopped after input drops below fThreshold. Minimal Value:50, Maximal Value:3000.0f;
 | |
| 		\param fThreshold Point at which Compressor begins, in decibels. Minimal Value:-60, Maximal Value:0.0f;
 | |
| 		\param fRatio Compressor ratio. Minimal Value:1, Maximal Value:100.0f;
 | |
| 		\param fPredelay Time after lThreshold is reached before attack phase is started, in milliseconds. Minimal Value:0, Maximal Value:4.0f;
 | |
| 		\return Returns true if successful. */
 | |
| 		virtual bool enableCompressorSoundEffect( ik_f32 fGain = 0,
 | |
| 												ik_f32 fAttack = 10,
 | |
| 												ik_f32 fRelease = 200,
 | |
| 												ik_f32 fThreshold = -20,
 | |
| 												ik_f32 fRatio = 3,
 | |
| 												ik_f32 fPredelay = 4) = 0;
 | |
| 
 | |
| 		//! removes the sound effect from the sound
 | |
| 		virtual void disableCompressorSoundEffect() = 0;
 | |
| 
 | |
| 		//! returns if the sound effect is active on the sound
 | |
| 		virtual bool isCompressorSoundEffectEnabled() = 0;
 | |
| 
 | |
| 		//! Enables the Distortion sound effect or adjusts its values.
 | |
| 		/** Distortion is achieved by adding harmonics to the signal in such a way that,
 | |
| 		If this sound effect is already enabled, calling this only modifies the parameters of the active effect.
 | |
| 		as the level increases, the top of the waveform becomes squared off or clipped.
 | |
| 		\param fGain Amount of signal change after distortion. Minimal Value:-60, Maximal Value:0;
 | |
| 		\param fEdge Percentage of distortion intensity. Minimal Value:0, Maximal Value:100;
 | |
| 		\param fPostEQCenterFrequency Center frequency of harmonic content addition. Minimal Value:100, Maximal Value:8000;
 | |
| 		\param fPostEQBandwidth Width of frequency band that determines range of harmonic content addition. Minimal Value:100, Maximal Value:8000;
 | |
| 		\param fPreLowpassCutoff Filter cutoff for high-frequency harmonics attenuation. Minimal Value:100, Maximal Value:8000;
 | |
| 		\return Returns true if successful. */
 | |
| 		virtual bool enableDistortionSoundEffect(ik_f32 fGain = -18,
 | |
| 												ik_f32 fEdge = 15,
 | |
| 												ik_f32 fPostEQCenterFrequency = 2400,
 | |
| 												ik_f32 fPostEQBandwidth = 2400,
 | |
| 												ik_f32 fPreLowpassCutoff = 8000) = 0;
 | |
| 
 | |
| 		//! removes the sound effect from the sound
 | |
| 		virtual void disableDistortionSoundEffect() = 0;
 | |
| 
 | |
| 		//! returns if the sound effect is active on the sound
 | |
| 		virtual bool isDistortionSoundEffectEnabled() = 0;
 | |
| 
 | |
| 		//! Enables the Echo sound effect or adjusts its values.
 | |
| 		/** An echo effect causes an entire sound to be repeated after a fixed delay.
 | |
| 		If this sound effect is already enabled, calling this only modifies the parameters of the active effect.
 | |
| 		\param fWetDryMix Ratio of wet (processed) signal to dry (unprocessed) signal. Minimal Value:0, Maximal Value:100.0f;
 | |
| 		\param fFeedback Percentage of output fed back into input. Minimal Value:0, Maximal Value:100.0f;
 | |
| 		\param fLeftDelay Delay for left channel, in milliseconds. Minimal Value:1, Maximal Value:2000.0f;
 | |
| 		\param fRightDelay Delay for right channel, in milliseconds. Minimal Value:1, Maximal Value:2000.0f;
 | |
| 		\param lPanDelay Value that specifies whether to swap left and right delays with each successive echo. Minimal Value:0, Maximal Value:1;
 | |
| 		\return Returns true if successful. */
 | |
| 		virtual bool enableEchoSoundEffect(ik_f32 fWetDryMix = 50,
 | |
| 											ik_f32 fFeedback = 50,
 | |
| 											ik_f32 fLeftDelay = 500,
 | |
| 											ik_f32 fRightDelay = 500,
 | |
| 											ik_s32 lPanDelay = 0) = 0;
 | |
| 
 | |
| 		//! removes the sound effect from the sound
 | |
| 		virtual void disableEchoSoundEffect() = 0;
 | |
| 
 | |
| 		//! returns if the sound effect is active on the sound
 | |
| 		virtual bool isEchoSoundEffectEnabled() = 0;
 | |
| 
 | |
| 		//! Enables the Flanger sound effect or adjusts its values.
 | |
| 		/** Flange is an echo effect in which the delay between the original 
 | |
| 		signal and its echo is very short and varies over time. The result is 
 | |
| 		sometimes referred to as a sweeping sound. The term flange originated
 | |
| 		with the practice of grabbing the flanges of a tape reel to change the speed. 
 | |
| 		If this sound effect is already enabled, calling this only modifies the parameters of the active effect.
 | |
| 		\param fWetDryMix Ratio of wet (processed) signal to dry (unprocessed) signal. Minimal Value:0, Maximal Value:100.0f;
 | |
| 		\param fDepth Percentage by which the delay time is modulated by the low-frequency oscillator, in hundredths of a percentage point. Minimal Value:0, Maximal Value:100.0f;
 | |
| 		\param fFeedback Percentage of output signal to feed back into the effect's input. Minimal Value:-99, Maximal Value:99.0f;
 | |
| 		\param fFrequency Frequency of the LFO. Minimal Value:0, Maximal Value:10.0f;
 | |
| 		\param triangleWaveForm True for triangle wave form, false for square.
 | |
| 		\param fDelay Number of milliseconds the input is delayed before it is played back. Minimal Value:0, Maximal Value:20.0f;
 | |
| 		\param lPhase Phase differential between left and right LFOs. Possible values:
 | |
| 			-180, -90, 0, 90, 180
 | |
| 		\return Returns true if successful. */
 | |
| 		virtual bool enableFlangerSoundEffect(ik_f32 fWetDryMix = 50,
 | |
| 											ik_f32 fDepth = 100,
 | |
| 											ik_f32 fFeedback = -50,
 | |
| 											ik_f32 fFrequency = 0.25f,
 | |
| 											bool triangleWaveForm = true,
 | |
| 											ik_f32 fDelay = 2,
 | |
| 											ik_s32 lPhase = 0) = 0;
 | |
| 
 | |
| 		//! removes the sound effect from the sound
 | |
| 		virtual void disableFlangerSoundEffect() = 0;
 | |
| 
 | |
| 		//! returns if the sound effect is active on the sound
 | |
| 		virtual bool isFlangerSoundEffectEnabled() = 0;
 | |
| 
 | |
| 		//! Enables the Gargle sound effect or adjusts its values.
 | |
| 		/** The gargle effect modulates the amplitude of the signal. 
 | |
| 		If this sound effect is already enabled, calling this only modifies the parameters of the active effect.
 | |
| 		\param rateHz Rate of modulation, in Hertz. Minimal Value:1, Maximal Value:1000
 | |
| 		\param sinusWaveForm True for sinus wave form, false for triangle.
 | |
| 		\return Returns true if successful. */
 | |
| 		virtual bool enableGargleSoundEffect(ik_s32 rateHz = 20, bool sinusWaveForm = true) = 0;
 | |
| 
 | |
| 		//! removes the sound effect from the sound
 | |
| 		virtual void disableGargleSoundEffect() = 0;
 | |
| 
 | |
| 		//! returns if the sound effect is active on the sound
 | |
| 		virtual bool isGargleSoundEffectEnabled() = 0;
 | |
| 
 | |
| 		//! Enables the Interactive 3D Level 2 reverb sound effect or adjusts its values.
 | |
| 		/** An implementation of the listener properties in the I3DL2 specification. Source properties are not supported.
 | |
| 		If this sound effect is already enabled, calling this only modifies the parameters of the active effect.
 | |
| 		\param lRoom Attenuation of the room effect, in millibels (mB). Interval: [-10000, 0] Default: -1000 mB
 | |
| 		\param lRoomHF Attenuation of the room high-frequency effect. Interval: [-10000, 0]      default: 0 mB
 | |
| 		\param flRoomRolloffFactor Rolloff factor for the reflected signals. Interval: [0.0, 10.0]      default: 0.0
 | |
| 		\param flDecayTime Decay time, in seconds. Interval: [0.1, 20.0]      default: 1.49s
 | |
| 		\param flDecayHFRatio Ratio of the decay time at high frequencies to the decay time at low frequencies. Interval: [0.1, 2.0]       default: 0.83
 | |
| 		\param lReflections Attenuation of early reflections relative to lRoom. Interval: [-10000, 1000]   default: -2602 mB
 | |
| 		\param flReflectionsDelay Delay time of the first reflection relative to the direct path in seconds. Interval: [0.0, 0.3]       default: 0.007 s
 | |
| 		\param lReverb Attenuation of late reverberation relative to lRoom, in mB. Interval: [-10000, 2000]   default: 200 mB
 | |
| 		\param flReverbDelay Time limit between the early reflections and the late reverberation relative to the time of the first reflection. Interval: [0.0, 0.1]       default: 0.011 s
 | |
| 		\param flDiffusion Echo density in the late reverberation decay in percent. Interval: [0.0, 100.0]     default: 100.0 %
 | |
| 		\param flDensity Modal density in the late reverberation decay, in percent. Interval: [0.0, 100.0]     default: 100.0 %
 | |
| 		\param flHFReference Reference high frequency, in hertz. Interval: [20.0, 20000.0]  default: 5000.0 Hz 
 | |
| 		\return Returns true if successful. */
 | |
| 		virtual bool enableI3DL2ReverbSoundEffect(ik_s32 lRoom = -1000,
 | |
| 												ik_s32 lRoomHF = -100,
 | |
| 												ik_f32 flRoomRolloffFactor = 0,
 | |
| 												ik_f32 flDecayTime = 1.49f,
 | |
| 												ik_f32 flDecayHFRatio = 0.83f,
 | |
| 												ik_s32 lReflections = -2602,
 | |
| 												ik_f32 flReflectionsDelay = 0.007f,
 | |
| 												ik_s32 lReverb = 200,
 | |
| 												ik_f32 flReverbDelay = 0.011f,
 | |
| 												ik_f32 flDiffusion = 100.0f,
 | |
| 												ik_f32 flDensity = 100.0f,
 | |
| 												ik_f32 flHFReference = 5000.0f ) = 0;
 | |
| 
 | |
| 		//! removes the sound effect from the sound
 | |
| 		virtual void disableI3DL2ReverbSoundEffect() = 0;
 | |
| 
 | |
| 		//! returns if the sound effect is active on the sound
 | |
| 		virtual bool isI3DL2ReverbSoundEffectEnabled() = 0;
 | |
| 
 | |
| 		//! Enables the ParamEq sound effect or adjusts its values.
 | |
| 		/** Parametric equalizer amplifies or attenuates signals of a given frequency. 
 | |
| 		If this sound effect is already enabled, calling this only modifies the parameters of the active effect.
 | |
| 		\param fCenter Center frequency, in hertz, The default value is 8000. Minimal Value:80, Maximal Value:16000.0f
 | |
| 		\param fBandwidth Bandwidth, in semitones, The default value is 12. Minimal Value:1.0f, Maximal Value:36.0f
 | |
| 		\param fGain Gain, default value is 0. Minimal Value:-15.0f, Maximal Value:15.0f
 | |
| 		\return Returns true if successful. */
 | |
| 		virtual bool enableParamEqSoundEffect(ik_f32 fCenter = 8000,
 | |
| 											ik_f32 fBandwidth = 12,
 | |
| 											ik_f32 fGain = 0) = 0;
 | |
| 
 | |
| 		//! removes the sound effect from the sound
 | |
| 		virtual void disableParamEqSoundEffect() = 0;
 | |
| 
 | |
| 		//! returns if the sound effect is active on the sound
 | |
| 		virtual bool isParamEqSoundEffectEnabled() = 0;
 | |
| 
 | |
| 		//! Enables the Waves Reverb sound effect or adjusts its values.
 | |
| 		/** \param fInGain Input gain of signal, in decibels (dB). Min/Max: [-96.0,0.0] Default: 0.0 dB.
 | |
| 		If this sound effect is already enabled, calling this only modifies the parameters of the active effect.
 | |
| 		\param fReverbMix Reverb mix, in dB. Min/Max: [-96.0,0.0] Default: 0.0 dB
 | |
| 		\param fReverbTime Reverb time, in milliseconds. Min/Max: [0.001,3000.0] Default: 1000.0 ms
 | |
| 		\param fHighFreqRTRatio High-frequency reverb time ratio. Min/Max: [0.001,0.999] Default: 0.001 
 | |
| 		\return Returns true if successful. */
 | |
| 		virtual bool enableWavesReverbSoundEffect(ik_f32 fInGain = 0,
 | |
| 											ik_f32 fReverbMix = 0,
 | |
| 											ik_f32 fReverbTime = 1000,
 | |
| 											ik_f32 fHighFreqRTRatio = 0.001f) = 0;
 | |
| 
 | |
| 		//! removes the sound effect from the sound
 | |
| 		virtual void disableWavesReverbSoundEffect() = 0;
 | |
| 
 | |
| 		//! returns if the sound effect is active on the sound
 | |
| 		virtual bool isWavesReverbSoundEffectEnabled() = 0;
 | |
| 	};
 | |
| 
 | |
| } // end namespace irrklang
 | |
| 
 | |
| 
 | |
| #endif
 |