fix(stitcher): prevent repeated audio from padding-induced segment overlap
Track each speaker's previous cut_end. After applying padding, clamp cut_start to never be earlier than the speaker's previous cut_end. This eliminates the 200ms overlap that caused A's tail audio to replay when switching A→B→A.
This commit is contained in:
@@ -425,6 +425,8 @@ class AIIA_Podcast_Stitcher:
|
||||
idx_A = 0
|
||||
idx_B = 0
|
||||
prev_speaker = None
|
||||
# 跟踪每个说话人上一个片段的实际 cut_end,防止 padding 导致重叠
|
||||
prev_cut_end = {"A": 0.0, "B": 0.0}
|
||||
|
||||
for item in map_items:
|
||||
if item.get("type") == "pause":
|
||||
@@ -480,6 +482,11 @@ class AIIA_Podcast_Stitcher:
|
||||
cut_start = max(0, cut_start - padding)
|
||||
cut_end = min(len(wav) / sr, cut_end + padding)
|
||||
|
||||
# 防重叠:确保 cut_start 不早于同一说话人上一个片段的 cut_end
|
||||
if cut_start < prev_cut_end[speaker]:
|
||||
cut_start = prev_cut_end[speaker]
|
||||
prev_cut_end[speaker] = cut_end
|
||||
|
||||
start_sample = int(cut_start * sr)
|
||||
end_sample = int(cut_end * sr)
|
||||
end_sample = min(end_sample, len(wav))
|
||||
|
||||
Reference in New Issue
Block a user