Hezu06 commited on
Commit
323311f
·
1 Parent(s): ee3a40b

enhance generate_ai_midi to increase loop length, improve deep copy handling, and refine audio filtering parameters

Browse files
Files changed (1) hide show
  1. main.py +28 -7
main.py CHANGED
@@ -4,6 +4,7 @@ from fastapi.responses import FileResponse
4
  from numpy.ma import copy
5
  from pydantic import BaseModel
6
  from pydub import AudioSegment
 
7
  import torch
8
  import torch.nn as nn
9
  import pickle
@@ -223,14 +224,25 @@ def generate_ai_midi(bpm: int, output_file: str, num_notes: int = 200):
223
  inst.midiChannel = 0
224
  final_stream.insert(0, inst)
225
 
 
 
 
 
 
 
 
 
226
  LOOP = 4 # 🔥 tăng độ dài nhạc
 
 
227
  for i in range(LOOP):
228
  for el in output_stream:
229
  try:
230
- new_el = copy.deepcopy(el) # FIX
231
- new_el.offset = el.offset + i * offset
232
  final_stream.append(new_el)
233
- except:
 
234
  continue
235
 
236
  final_stream.write('midi', fp=output_file)
@@ -242,12 +254,21 @@ def generate_ai_midi(bpm: int, output_file: str, num_notes: int = 200):
242
  def apply_audio_filters(wav_path):
243
  sound = AudioSegment.from_wav(wav_path)
244
 
245
- # Cắt toàn bộ tần số trên 600Hz (Đây mức "Dark/Warm" - cực kỳ ấm áp)
246
- # 600Hz sẽ loại bỏ hoàn toàn tiếng chói, chỉ để lại tiếng piano mờ ảo.
247
  sound = sound.low_pass_filter(1500)
248
 
249
- # Làm mượt đầu cuối
250
- sound = sound.fade_in(2000).fade_out(3000)
 
 
 
 
 
 
 
 
 
 
251
 
252
  sound.export(wav_path, format="wav")
253
  @app.post("/generate-vibe")
 
4
  from numpy.ma import copy
5
  from pydantic import BaseModel
6
  from pydub import AudioSegment
7
+ import copy
8
  import torch
9
  import torch.nn as nn
10
  import pickle
 
224
  inst.midiChannel = 0
225
  final_stream.insert(0, inst)
226
 
227
+ # ===== LOOP để dài hơn =====
228
+ final_stream = stream.Stream()
229
+
230
+ inst = instrument.Piano()
231
+ inst.midiProgram = 0
232
+ inst.midiChannel = 0
233
+ final_stream.insert(0, inst)
234
+
235
  LOOP = 4 # 🔥 tăng độ dài nhạc
236
+ total_length = offset # Lưu lại tổng chiều dài của 1 loop
237
+
238
  for i in range(LOOP):
239
  for el in output_stream:
240
  try:
241
+ new_el = copy.deepcopy(el) # Bây giờ hàm này đã hoạt động
242
+ new_el.offset = el.offset + (i * total_length) # Dùng total_length để an toàn
243
  final_stream.append(new_el)
244
+ except Exception as e:
245
+ print(f"Lỗi khi copy phần tử: {e}")
246
  continue
247
 
248
  final_stream.write('midi', fp=output_file)
 
254
  def apply_audio_filters(wav_path):
255
  sound = AudioSegment.from_wav(wav_path)
256
 
257
+ # Cắt toàn bộ tần số trên 1500Hz để lấy độ mờ ảo
 
258
  sound = sound.low_pass_filter(1500)
259
 
260
+ # Tính toán thời gian fade linh hoạt (Max là 2000ms in / 3000ms out)
261
+ # Nếu file nhạc ngắn hơn 5 giây, chỉ fade 10% thời lượng bài nhạc
262
+ audio_duration = len(sound)
263
+ fade_in_time = min(2000, int(audio_duration * 0.1))
264
+ fade_out_time = min(3000, int(audio_duration * 0.1))
265
+
266
+ sound = sound.fade_in(fade_in_time).fade_out(fade_out_time)
267
+
268
+ # Kéo volume lên một chút (tăng 3dB) để đảm bảo nghe rõ hơn sau khi lọc
269
+ sound = sound + 3
270
+
271
+ sound.export(wav_path, format="wav")
272
 
273
  sound.export(wav_path, format="wav")
274
  @app.post("/generate-vibe")