瀏覽代碼

Merge pull request #96768 from DeeJayLSP/wav-end

WAV: Fix one frame overflow at the end
Rémi Verschelde 11 月之前
父節點
當前提交
b998cb1335
共有 2 個文件被更改,包括 3 次插入3 次删除
  1. 2 2
      editor/import/resource_importer_wav.cpp
  2. 1 1
      scene/resources/audio_stream_wav.cpp

+ 2 - 2
editor/import/resource_importer_wav.cpp

@@ -429,10 +429,10 @@ Error ResourceImporterWAV::import(const String &p_source_file, const String &p_s
 		loop_end = p_options["edit/loop_end"];
 		// Wrap around to max frames, so `-1` can be used to select the end, etc.
 		if (loop_begin < 0) {
-			loop_begin = CLAMP(loop_begin + frames + 1, 0, frames);
+			loop_begin = CLAMP(loop_begin + frames, 0, frames - 1);
 		}
 		if (loop_end < 0) {
-			loop_end = CLAMP(loop_end + frames + 1, 0, frames);
+			loop_end = CLAMP(loop_end + frames, 0, frames - 1);
 		}
 	}
 

+ 1 - 1
scene/resources/audio_stream_wav.cpp

@@ -297,7 +297,7 @@ int AudioStreamPlaybackWAV::mix(AudioFrame *p_buffer, float p_rate_scale, int p_
 	int64_t loop_end_fp = ((int64_t)base->loop_end << MIX_FRAC_BITS);
 	int64_t length_fp = ((int64_t)len << MIX_FRAC_BITS);
 	int64_t begin_limit = (base->loop_mode != AudioStreamWAV::LOOP_DISABLED) ? loop_begin_fp : 0;
-	int64_t end_limit = (base->loop_mode != AudioStreamWAV::LOOP_DISABLED) ? loop_end_fp : length_fp;
+	int64_t end_limit = (base->loop_mode != AudioStreamWAV::LOOP_DISABLED) ? loop_end_fp : length_fp - MIX_FRAC_LEN;
 	bool is_stereo = base->stereo;
 
 	int32_t todo = p_frames;