next-playground commited on
Commit
a5d92c5
1 Parent(s): 65c70c9

Update flask_api_full_song.py

Browse files
Files changed (1) hide show
  1. flask_api_full_song.py +19 -6
flask_api_full_song.py CHANGED
@@ -65,27 +65,40 @@ def infer(audio_path, tran, spk, wav_format, task_id):
65
  audio_data, audio_sr = slicer.chunks2audio(audio_path, chunks)
66
 
67
  audio = []
68
- for (slice_tag, data) in audio_data:
69
- print(f'#=====segment start, {round(len(data) / audio_sr, 3)}s======')
70
 
71
- length = int(np.ceil(len(data) / audio_sr * svc_model.target_sample))
 
72
  if slice_tag:
73
  print('jump empty segment')
74
  _audio = np.zeros(length)
75
  else:
76
  # padd
77
  pad_len = int(audio_sr * 0.5)
78
- data = np.concatenate([np.zeros([pad_len]), data, np.zeros([pad_len])])
79
  raw_path = io.BytesIO()
80
- soundfile.write(raw_path, data, audio_sr, format="wav")
81
  raw_path.seek(0)
82
  out_audio, out_audio_shape, out_sr = svc_model.infer(spk, tran, raw_path)
83
  svc_model.clear_empty()
84
  _audio = out_audio.cpu().numpy()
85
  pad_len = int(svc_model.target_sample * 0.5)
86
  _audio = _audio[pad_len:-pad_len]
87
-
88
  audio.extend(list(infer_tool.pad_array(_audio, length)))
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
89
  out_wav_path = "/tmp/" + audio_name
90
  soundfile.write(out_wav_path, audio, svc_model.target_sample, format=wav_format)
91
 
 
65
  audio_data, audio_sr = slicer.chunks2audio(audio_path, chunks)
66
 
67
  audio = []
 
 
68
 
69
+ def process_chunk(chunk_data, audio_sr, slice_tag, svc_model, audio):
70
+ length = int(np.ceil(len(chunk_data) / audio_sr * svc_model.target_sample))
71
  if slice_tag:
72
  print('jump empty segment')
73
  _audio = np.zeros(length)
74
  else:
75
  # padd
76
  pad_len = int(audio_sr * 0.5)
77
+ chunk_data = np.concatenate([np.zeros([pad_len]), chunk_data, np.zeros([pad_len])])
78
  raw_path = io.BytesIO()
79
+ soundfile.write(raw_path, chunk_data, audio_sr, format="wav")
80
  raw_path.seek(0)
81
  out_audio, out_audio_shape, out_sr = svc_model.infer(spk, tran, raw_path)
82
  svc_model.clear_empty()
83
  _audio = out_audio.cpu().numpy()
84
  pad_len = int(svc_model.target_sample * 0.5)
85
  _audio = _audio[pad_len:-pad_len]
 
86
  audio.extend(list(infer_tool.pad_array(_audio, length)))
87
+
88
+ for (slice_tag, data) in audio_data:
89
+ print(f'#=====segment start, {round(len(data) / audio_sr, 3)}s======')
90
+
91
+ # Check if the segment is longer than 30 seconds
92
+ segment_length = len(data) / audio_sr
93
+ if segment_length > 30:
94
+ # Split the segment into chunks of 30 seconds or less
95
+ num_chunks = int(np.ceil(segment_length / 30))
96
+ chunk_length = int(len(data) / num_chunks)
97
+ for i in range(num_chunks):
98
+ chunk_data = data[i * chunk_length:(i + 1) * chunk_length]
99
+ process_chunk(chunk_data, audio_sr, slice_tag, svc_model, audio)
100
+ else:
101
+ process_chunk(data, audio_sr, slice_tag, svc_model, audio)
102
  out_wav_path = "/tmp/" + audio_name
103
  soundfile.write(out_wav_path, audio, svc_model.target_sample, format=wav_format)
104