Merge pull request #96768 from DeeJayLSP/wav-end

WAV: Fix one frame overflow at the end
This commit is contained in:
Rémi Verschelde 2024-09-12 09:25:31 +02:00
commit b998cb1335
No known key found for this signature in database
GPG key ID: C3336907360768E1
2 changed files with 3 additions and 3 deletions

View file

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

View file

@ -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 loop_end_fp = ((int64_t)base->loop_end << MIX_FRAC_BITS);
int64_t length_fp = ((int64_t)len << 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 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; bool is_stereo = base->stereo;
int32_t todo = p_frames; int32_t todo = p_frames;