summaryrefslogtreecommitdiff
path: root/servers/audio/effects/audio_effect_amplify.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'servers/audio/effects/audio_effect_amplify.cpp')
-rw-r--r--servers/audio/effects/audio_effect_amplify.cpp50
1 files changed, 50 insertions, 0 deletions
diff --git a/servers/audio/effects/audio_effect_amplify.cpp b/servers/audio/effects/audio_effect_amplify.cpp
new file mode 100644
index 0000000000..d723f8d2fe
--- /dev/null
+++ b/servers/audio/effects/audio_effect_amplify.cpp
@@ -0,0 +1,50 @@
+#include "audio_effect_amplify.h"
+
+
+void AudioEffectAmplifyInstance::process(const AudioFrame *p_src_frames,AudioFrame *p_dst_frames,int p_frame_count) {
+
+
+ //multiply volume interpolating to avoid clicks if this changes
+ float volume_db = base->volume_db;
+ float vol = Math::db2linear(mix_volume_db);
+ float vol_inc = (Math::db2linear(volume_db) - vol)/float(p_frame_count);
+
+ for(int i=0;i<p_frame_count;i++) {
+ p_dst_frames[i]=p_src_frames[i]*vol;
+ vol+=vol_inc;
+ }
+ //set volume for next mix
+ mix_volume_db = volume_db;
+
+}
+
+
+Ref<AudioEffectInstance> AudioEffectAmplify::instance() {
+ Ref<AudioEffectAmplifyInstance> ins;
+ ins.instance();
+ ins->base=Ref<AudioEffectAmplify>(this);
+ ins->mix_volume_db=volume_db;
+ return ins;
+}
+
+void AudioEffectAmplify::set_volume_db(float p_volume) {
+ volume_db=p_volume;
+}
+
+float AudioEffectAmplify::get_volume_db() const {
+
+ return volume_db;
+}
+
+void AudioEffectAmplify::_bind_methods() {
+
+ ClassDB::bind_method(_MD("set_volume_db","volume"),&AudioEffectAmplify::set_volume_db);
+ ClassDB::bind_method(_MD("get_volume_db"),&AudioEffectAmplify::get_volume_db);
+
+ ADD_PROPERTY(PropertyInfo(Variant::REAL,"volume_db",PROPERTY_HINT_RANGE,"-80,24,0.01"),_SCS("set_volume_db"),_SCS("get_volume_db"));
+}
+
+AudioEffectAmplify::AudioEffectAmplify()
+{
+ volume_db=0;
+}