vozeaudio / app.py
cngsm's picture
Update app.py
49f67fd verified
import gradio as gr
from spleeter.separator import Separator
import tempfile
import os
import scipy.io.wavfile
# Inicializa o separador Spleeter (modelo de 2 stems)
# Isso é feito fora da função para não recarregar o modelo a cada chamada
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
# Cria um diretório temporário para lidar com os arquivos
with tempfile.TemporaryDirectory() as tmpdir:
# Salva o áudio de entrada em um arquivo temporário, pois o Spleeter espera um caminho de arquivo
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}")
# Realiza a separação e salva os arquivos no mesmo diretório temporário
separator.separate_to_file(caminho_input_tmp, tmpdir)
# Define os caminhos dos arquivos de saída
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}")
# Retorna os caminhos dos arquivos para os componentes de áudio do Gradio
return caminho_vocais, caminho_acomp
# Define a interface do Gradio
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]
)
# Lança a interface
interface.launch()