From 33ad03f085e54e61d3dc8a1e038a60f164ad890a Mon Sep 17 00:00:00 2001 From: jlqian98 Date: Thu, 19 Mar 2026 13:51:38 +0800 Subject: [PATCH] fix: resolve "negative dimensions are not allowed" on windows --- preprocess/tools/vocal_detection.py | 3 +++ preprocess/utils.py | 18 +++++++++--------- 2 files changed, 12 insertions(+), 9 deletions(-) diff --git a/preprocess/tools/vocal_detection.py b/preprocess/tools/vocal_detection.py index 87bf499..05eac06 100644 --- a/preprocess/tools/vocal_detection.py +++ b/preprocess/tools/vocal_detection.py @@ -289,6 +289,9 @@ class VocalDetector: key = f"{base_name_no_ext}_{idx}" start_sample = librosa.time_to_samples(start_ms / 1000, sr=sr) end_sample = librosa.time_to_samples(end_ms / 1000, sr=sr) + # Use Python int to avoid 32-bit overflow on Windows + start_sample = int(start_sample) + end_sample = int(end_sample) segment = y[start_sample:end_sample] write(f"{self.cut_wavs_output_dir}/{key}.wav", segment, sr) diff --git a/preprocess/utils.py b/preprocess/utils.py index 745ace9..7ad2703 100644 --- a/preprocess/utils.py +++ b/preprocess/utils.py @@ -109,10 +109,11 @@ def _merge_group( ) # ---------- time & audio ---------- - start_ms = get_attr(segments[0], "start_time_ms", 0) - end_ms = get_attr(segments[-1], "end_time_ms", 0) + end_extension_ms - start_sample = start_ms * sample_rate // 1000 - end_sample = end_ms * sample_rate // 1000 + # Use Python int to avoid 32-bit overflow on Windows + start_ms = int(get_attr(segments[0], "start_time_ms", 0)) + end_ms = int(get_attr(segments[-1], "end_time_ms", 0)) + end_extension_ms + start_sample = int(start_ms * sample_rate // 1000) + end_sample = int(end_ms * sample_rate // 1000) # ---------- naming ---------- first_item_name = get_attr(segments[0], "item_name", "segment") @@ -195,12 +196,11 @@ def merge_short_segments( for seg in segments: if isinstance(seg, dict): - start_time = seg.get("start_time_ms", 0) - end_time = seg.get("end_time_ms", 0) + start_time = int(seg.get("start_time_ms", 0)) + end_time = int(seg.get("end_time_ms", 0)) else: - start_time = seg.start_time_ms - end_time = seg.end_time_ms - + start_time = int(seg.start_time_ms) + end_time = int(seg.end_time_ms) if ( current_group and (start_time - prev_end > max_gap_ms