thecollabagepatch commited on
Commit
f8a1b4d
Β·
1 Parent(s): 0e896d0

loudness issues

Browse files
Files changed (1) hide show
  1. app.py +16 -13
app.py CHANGED
@@ -197,33 +197,36 @@ def continue_music(input_audio_path, prompt_duration, musicgen_model, output_dur
197
  generated_audio_segment = AudioSegment.from_wav(filename_with_extension)
198
  file_paths_for_cleanup.append(filename_with_extension)
199
 
200
- # VOLUME MATCHING: Use RMS instead of peak normalization
201
 
202
  # 1. Remove prompt duration from original (no overlap)
203
  prompt_duration_ms = int(prompt_duration * 1000)
204
  original_minus_prompt = original_audio[:-prompt_duration_ms]
205
 
206
- # 2. Calculate RMS levels for perceived loudness
 
 
 
207
  original_rms = original_minus_prompt.rms
208
- generated_rms = generated_audio_segment.rms
209
 
210
- print(f"πŸ”Š Volume analysis:")
211
- print(f" Original RMS: {original_rms}")
212
- print(f" Generated RMS: {generated_rms}")
 
213
 
214
- # 3. Match generated segment to original's RMS level
215
- if generated_rms > 0: # Avoid division by zero
216
- # Calculate dB adjustment needed
217
  from pydub.utils import ratio_to_db
218
- volume_adjustment = ratio_to_db(original_rms / generated_rms)
219
- print(f" Applying {volume_adjustment:.1f}dB to generated audio")
220
 
221
- # Apply volume adjustment
222
  generated_matched = generated_audio_segment + volume_adjustment
223
  else:
224
  generated_matched = generated_audio_segment
225
 
226
- # 4. Combine seamlessly
227
  combined_audio = original_minus_prompt + generated_matched
228
 
229
  # Save final result
 
197
  generated_audio_segment = AudioSegment.from_wav(filename_with_extension)
198
  file_paths_for_cleanup.append(filename_with_extension)
199
 
200
+ # SMART VOLUME MATCHING: Only match the prompt portion
201
 
202
  # 1. Remove prompt duration from original (no overlap)
203
  prompt_duration_ms = int(prompt_duration * 1000)
204
  original_minus_prompt = original_audio[:-prompt_duration_ms]
205
 
206
+ # 2. Extract JUST the prompt portion from generated audio for RMS analysis
207
+ generated_prompt_portion = generated_audio_segment[:prompt_duration_ms]
208
+
209
+ # 3. Calculate RMS of the transition points
210
  original_rms = original_minus_prompt.rms
211
+ prompt_portion_rms = generated_prompt_portion.rms
212
 
213
+ print(f"πŸ”Š Smart volume analysis:")
214
+ print(f" Original ending RMS: {original_rms}")
215
+ print(f" Generated prompt RMS: {prompt_portion_rms}")
216
+ print(f" Generated full RMS: {generated_audio_segment.rms}")
217
 
218
+ # 4. Match the prompt portion to original level
219
+ if prompt_portion_rms > 0:
 
220
  from pydub.utils import ratio_to_db
221
+ volume_adjustment = ratio_to_db(original_rms / prompt_portion_rms)
222
+ print(f" Applying {volume_adjustment:.1f}dB to entire generated segment")
223
 
224
+ # Apply to entire segment (preserves the buildup)
225
  generated_matched = generated_audio_segment + volume_adjustment
226
  else:
227
  generated_matched = generated_audio_segment
228
 
229
+ # 5. Combine seamlessly
230
  combined_audio = original_minus_prompt + generated_matched
231
 
232
  # Save final result