summaryrefslogtreecommitdiff
path: root/servers/audio/effects/audio_effect_distortion.h
blob: 1d2433faeb21766f2ef6f36cb1ec65b99f43b263 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
#ifndef AUDIOEFFECTDISTORTION_H
#define AUDIOEFFECTDISTORTION_H

#include "servers/audio/audio_effect.h"

class AudioEffectDistortion;

class AudioEffectDistortionInstance : public AudioEffectInstance {
	GDCLASS(AudioEffectDistortionInstance,AudioEffectInstance)
friend class AudioEffectDistortion;
	Ref<AudioEffectDistortion> base;
	float h[2];
public:

	virtual void process(const AudioFrame *p_src_frames,AudioFrame *p_dst_frames,int p_frame_count);

};


class AudioEffectDistortion : public AudioEffect {
	GDCLASS(AudioEffectDistortion,AudioEffect)
public:
	enum Mode {
		MODE_CLIP,
		MODE_ATAN,
		MODE_LOFI,
		MODE_OVERDRIVE,
		MODE_WAVESHAPE,
	};

friend class AudioEffectDistortionInstance;
	Mode mode;
	float pre_gain;
	float post_gain;
	float keep_hf_hz;
	float drive;

protected:

	static void _bind_methods();
public:


	Ref<AudioEffectInstance> instance();


	void set_mode(Mode p_mode);
	Mode get_mode() const;

	void set_pre_gain(float pre_gain);
	float get_pre_gain() const;

	void set_keep_hf_hz(float keep_hf_hz);
	float get_keep_hf_hz() const;

	void set_drive(float drive);
	float get_drive() const;

	void set_post_gain(float post_gain);
	float get_post_gain() const;



	AudioEffectDistortion();
};

VARIANT_ENUM_CAST( AudioEffectDistortion::Mode )

#endif // AUDIOEFFECTDISTORTION_H