diff options
Diffstat (limited to 'servers/audio/effects/audio_effect_panner.cpp')
| -rw-r--r-- | servers/audio/effects/audio_effect_panner.cpp | 47 |
1 files changed, 47 insertions, 0 deletions
diff --git a/servers/audio/effects/audio_effect_panner.cpp b/servers/audio/effects/audio_effect_panner.cpp new file mode 100644 index 0000000000..e296b0d998 --- /dev/null +++ b/servers/audio/effects/audio_effect_panner.cpp @@ -0,0 +1,47 @@ +#include "audio_effect_panner.h" + + +void AudioEffectPannerInstance::process(const AudioFrame *p_src_frames,AudioFrame *p_dst_frames,int p_frame_count) { + + + float lvol = CLAMP( 1.0 - base->pan, 0, 1); + float rvol = CLAMP( 1.0 + base->pan, 0, 1); + + for(int i=0;i<p_frame_count;i++) { + + p_dst_frames[i].l = p_src_frames[i].l * lvol + p_src_frames[i].r * (1.0 - rvol); + p_dst_frames[i].r = p_src_frames[i].r * rvol + p_src_frames[i].l * (1.0 - lvol); + + } + +} + + +Ref<AudioEffectInstance> AudioEffectPanner::instance() { + Ref<AudioEffectPannerInstance> ins; + ins.instance(); + ins->base=Ref<AudioEffectPanner>(this); + return ins; +} + +void AudioEffectPanner::set_pan(float p_cpanume) { + pan=p_cpanume; +} + +float AudioEffectPanner::get_pan() const { + + return pan; +} + +void AudioEffectPanner::_bind_methods() { + + ClassDB::bind_method(_MD("set_pan","cpanume"),&AudioEffectPanner::set_pan); + ClassDB::bind_method(_MD("get_pan"),&AudioEffectPanner::get_pan); + + ADD_PROPERTY(PropertyInfo(Variant::REAL,"pan",PROPERTY_HINT_RANGE,"-1,1,0.01"),_SCS("set_pan"),_SCS("get_pan")); +} + +AudioEffectPanner::AudioEffectPanner() +{ + pan=0; +} |