Spaces:
Sleeping
Sleeping
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="Загрузите песню для модификации")
|