Browse Source

Pass audio samples untouched for pitch_scale around 1.0f

Bartłomiej T. Listwon 3 years ago
parent
commit
c02e979dbf
1 changed files with 8 additions and 0 deletions
  1. 8 0
      servers/audio/effects/audio_effect_pitch_shift.cpp

+ 8 - 0
servers/audio/effects/audio_effect_pitch_shift.cpp

@@ -288,6 +288,14 @@ void SMBPitchShift::smbFft(float *fftBuffer, long fftFrameSize, long sign)
 void AudioEffectPitchShiftInstance::process(const AudioFrame *p_src_frames, AudioFrame *p_dst_frames, int p_frame_count) {
 	float sample_rate = AudioServer::get_singleton()->get_mix_rate();
 
+	// For pitch_scale 1.0 it's cheaper to just pass samples without processing them.
+	if (Math::is_equal_approx(base->pitch_scale, 1.0f)) {
+		for (int i = 0; i < p_frame_count; i++) {
+			p_dst_frames[i] = p_src_frames[i];
+		}
+		return;
+	}
+
 	float *in_l = (float *)p_src_frames;
 	float *in_r = in_l + 1;