karesaeedff commited on
Commit
71f519c
·
verified ·
1 Parent(s): 621b172

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +19 -9
app.py CHANGED
@@ -55,28 +55,38 @@ def predict_voice_score(wav):
55
 
56
 
57
  def detect_singing(audio_path):
58
- """检测唱歌片段"""
59
  wav, _ = librosa.load(audio_path, sr=SAMPLE_RATE)
60
- duration = len(wav) / SAMPLE_RATE
61
- raw_segments = []
 
 
62
 
63
- for start in np.arange(0, max(0, duration - CHUNK_SIZE), STEP):
64
- end = start + CHUNK_SIZE
65
- snippet = wav[int(start * SAMPLE_RATE):int(end * SAMPLE_RATE)]
66
 
 
 
 
 
 
67
  music_score = predict_music_score(snippet)
68
  voice_score = predict_voice_score(snippet)
69
 
 
 
 
70
  if music_score > MUSIC_THRESHOLD and voice_score > VOICE_THRESHOLD:
71
- raw_segments.append((float(start), float(end)))
72
 
73
- # === 合并连续窗口 ===
74
  merged = []
75
- for seg in raw_segments:
76
  if not merged or seg[0] > merged[-1][1]:
77
  merged.append(list(seg))
78
  else:
79
  merged[-1][1] = seg[1]
 
80
  merged = [(s, e) for s, e in merged if e - s >= MIN_SEG_DURATION]
81
  return merged
82
 
 
55
 
56
 
57
  def detect_singing(audio_path):
 
58
  wav, _ = librosa.load(audio_path, sr=SAMPLE_RATE)
59
+ total_len = len(wav)
60
+ chunk_len = SAMPLE_RATE * CHUNK_SIZE
61
+ step_len = SAMPLE_RATE * STEP
62
+ results = []
63
 
64
+ for start_idx in range(0, max(1, total_len - chunk_len), step_len):
65
+ end_idx = start_idx + chunk_len
66
+ snippet = wav[start_idx:end_idx]
67
 
68
+ # --- 修正:强制长度一致 ---
69
+ if len(snippet) < chunk_len:
70
+ snippet = np.pad(snippet, (0, chunk_len - len(snippet)))
71
+
72
+ # --- 模型推理 ---
73
  music_score = predict_music_score(snippet)
74
  voice_score = predict_voice_score(snippet)
75
 
76
+ start_t = start_idx / SAMPLE_RATE
77
+ end_t = start_t + CHUNK_SIZE
78
+
79
  if music_score > MUSIC_THRESHOLD and voice_score > VOICE_THRESHOLD:
80
+ results.append((float(start_t), float(end_t)))
81
 
82
+ # 合并相邻片段
83
  merged = []
84
+ for seg in results:
85
  if not merged or seg[0] > merged[-1][1]:
86
  merged.append(list(seg))
87
  else:
88
  merged[-1][1] = seg[1]
89
+
90
  merged = [(s, e) for s, e in merged if e - s >= MIN_SEG_DURATION]
91
  return merged
92