| import gradio as gr |
| from spleeter.separator import Separator |
| import tempfile |
| import os |
| import scipy.io.wavfile |
|
|
| |
| |
| print("Carregando modelo Spleeter...") |
| separator = Separator('spleeter:2stems') |
| print("Modelo carregado.") |
|
|
| def separar_audio(audio_input): |
| """ |
| Função que recebe o áudio do Gradio, separa em vocais e acompanhamento, |
| e retorna os caminhos dos arquivos de áudio resultantes. |
| """ |
| if audio_input is None: |
| return None, None |
|
|
| taxa_amostragem, dados_audio = audio_input |
| |
| |
| with tempfile.TemporaryDirectory() as tmpdir: |
| |
| caminho_input_tmp = os.path.join(tmpdir, 'input.wav') |
| scipy.io.wavfile.write(caminho_input_tmp, taxa_amostragem, dados_audio) |
|
|
| print(f"Processando arquivo: {caminho_input_tmp}") |
| |
| |
| separator.separate_to_file(caminho_input_tmp, tmpdir) |
| |
| |
| caminho_vocais = os.path.join(tmpdir, 'input', 'vocals.wav') |
| caminho_acomp = os.path.join(tmpdir, 'input', 'accompaniment.wav') |
| |
| print(f"Arquivos de saída: {caminho_vocais}, {caminho_acomp}") |
|
|
| |
| return caminho_vocais, caminho_acomp |
|
|
| |
| with gr.Blocks(theme=gr.themes.Soft()) as interface: |
| gr.Markdown( |
| """ |
| # 🎧 GEM – Separador de Áudio Inteligente |
| Faça o upload de uma música para separar os vocais da parte instrumental. |
| """ |
| ) |
| with gr.Row(): |
| audio_input = gr.Audio(type="numpy", label="Upload de Áudio") |
| |
| btn_separar = gr.Button("Separar Áudio", variant="primary") |
| |
| with gr.Row(): |
| audio_vocais = gr.Audio(label="🎤 Vocais (Acapella)") |
| audio_instrumental = gr.Audio(label="🎸 Instrumental") |
| |
| btn_separar.click( |
| fn=separar_audio, |
| inputs=audio_input, |
| outputs=[audio_vocais, audio_instrumental] |
| ) |
|
|
| |
| interface.launch() |