Spaces:
Running
Running
Update app.py
Browse files
app.py
CHANGED
@@ -1,6 +1,7 @@
|
|
1 |
import gradio as gr
|
2 |
import torchaudio
|
3 |
import soundfile as sf
|
|
|
4 |
from demucs.apply import apply_model
|
5 |
import numpy as np
|
6 |
import subprocess
|
@@ -14,17 +15,20 @@ def process(voice_file_path, song_file_path):
|
|
14 |
if sr != 44100:
|
15 |
raise ValueError("Частота дискретизации должна быть 44100 Гц")
|
16 |
|
|
|
|
|
|
|
17 |
# Применение модели для разделения
|
18 |
-
tracks = apply_model(
|
19 |
|
20 |
# Извлечение вокала и музыкального трека
|
21 |
-
vocal_track = tracks[
|
22 |
-
music_track = (tracks[
|
23 |
|
24 |
# Сохранение музыкального трека
|
25 |
if num_channels == 1:
|
26 |
music_track = music_track[0] # Преобразование в моно
|
27 |
-
sf.write('music_track.wav', music_track, sr)
|
28 |
|
29 |
# Подготовка вокала для SEED-VC: преобразование в моно, если стерео
|
30 |
if vocal_track.shape[0] == 2:
|
@@ -37,7 +41,13 @@ def process(voice_file_path, song_file_path):
|
|
37 |
source_path = 'vocal_track_mono.wav'
|
38 |
|
39 |
# Запуск SEED-VC для конверсии голоса
|
40 |
-
subprocess.run([
|
|
|
|
|
|
|
|
|
|
|
|
|
41 |
|
42 |
# Загрузка преобразованного вокала (моно)
|
43 |
converted_vocal, sr_vocal = sf.read('converted_vocal/output.wav')
|
@@ -56,13 +66,14 @@ def process(voice_file_path, song_file_path):
|
|
56 |
music_track_loaded, _ = sf.read('music_track.wav')
|
57 |
|
58 |
# Объединение вокала и музыки
|
59 |
-
final_song = converted_vocal_stereo + music_track_loaded
|
60 |
|
61 |
# Сохранение финальной песни
|
62 |
sf.write('final_song.wav', final_song, sr)
|
63 |
|
64 |
return 'final_song.wav'
|
65 |
|
|
|
66 |
with gr.Blocks() as demo:
|
67 |
voice_input = gr.File(label="Загрузите запись вашего голоса")
|
68 |
song_input = gr.File(label="Загрузите песню для модификации")
|
|
|
1 |
import gradio as gr
|
2 |
import torchaudio
|
3 |
import soundfile as sf
|
4 |
+
from demucs.pretrained import get_model
|
5 |
from demucs.apply import apply_model
|
6 |
import numpy as np
|
7 |
import subprocess
|
|
|
15 |
if sr != 44100:
|
16 |
raise ValueError("Частота дискретизации должна быть 44100 Гц")
|
17 |
|
18 |
+
# Загрузка модели Demucs
|
19 |
+
model = get_model('htdemucs')
|
20 |
+
|
21 |
# Применение модели для разделения
|
22 |
+
tracks = apply_model(model, mixture, device='cpu')
|
23 |
|
24 |
# Извлечение вокала и музыкального трека
|
25 |
+
vocal_track = tracks[2].numpy() # вокал обычно третий по порядку в htdemucs
|
26 |
+
music_track = (tracks[0] + tracks[1] + tracks[3]).numpy() # drums + bass + other
|
27 |
|
28 |
# Сохранение музыкального трека
|
29 |
if num_channels == 1:
|
30 |
music_track = music_track[0] # Преобразование в моно
|
31 |
+
sf.write('music_track.wav', music_track.T, sr)
|
32 |
|
33 |
# Подготовка вокала для SEED-VC: преобразование в моно, если стерео
|
34 |
if vocal_track.shape[0] == 2:
|
|
|
41 |
source_path = 'vocal_track_mono.wav'
|
42 |
|
43 |
# Запуск SEED-VC для конверсии голоса
|
44 |
+
subprocess.run([
|
45 |
+
'python', 'seed-vc/inference.py',
|
46 |
+
'--source', source_path,
|
47 |
+
'--target', voice_file_path,
|
48 |
+
'--output', 'converted_vocal',
|
49 |
+
'--checkpoint', 'seed-uvit-whisper-base'
|
50 |
+
])
|
51 |
|
52 |
# Загрузка преобразованного вокала (моно)
|
53 |
converted_vocal, sr_vocal = sf.read('converted_vocal/output.wav')
|
|
|
66 |
music_track_loaded, _ = sf.read('music_track.wav')
|
67 |
|
68 |
# Объединение вокала и музыки
|
69 |
+
final_song = converted_vocal_stereo.T + music_track_loaded
|
70 |
|
71 |
# Сохранение финальной песни
|
72 |
sf.write('final_song.wav', final_song, sr)
|
73 |
|
74 |
return 'final_song.wav'
|
75 |
|
76 |
+
# Создание интерфейса Gradio
|
77 |
with gr.Blocks() as demo:
|
78 |
voice_input = gr.File(label="Загрузите запись вашего голоса")
|
79 |
song_input = gr.File(label="Загрузите песню для модификации")
|