|
import gradio as gr |
|
from audiocraft.models import MusicGen, AudioGen |
|
from audiocraft.data.audio import audio_write |
|
import os |
|
import torch |
|
|
|
|
|
device = "cuda" if torch.cuda.is_available() else "cpu" |
|
print(f"Usando dispositivo: {device}") |
|
|
|
|
|
try: |
|
|
|
musicgen = MusicGen.get_pretrained('facebook/musicgen-small') |
|
audiogen = AudioGen.get_pretrained('facebook/audiogen-medium') |
|
|
|
|
|
musicgen.set_generation_params(duration=5) |
|
audiogen.set_generation_params(duration=5) |
|
|
|
except Exception as e: |
|
print(f"Erro ao carregar modelos: {e}") |
|
raise |
|
|
|
def generate_audio(prompt, model, model_type): |
|
try: |
|
|
|
|
|
if isinstance(prompt, list): |
|
prompt = prompt[0] |
|
|
|
print(f"Gerando {model_type} para:", prompt) |
|
wav = model.generate([prompt])[0] |
|
|
|
|
|
temp_dir = "generated_audio" |
|
os.makedirs(temp_dir, exist_ok=True) |
|
|
|
|
|
output_path = os.path.join(temp_dir, f"{model_type}_{hash(prompt)}.wav") |
|
|
|
|
|
audio_write( |
|
output_path[:-4], |
|
wav.cpu(), |
|
model.sample_rate, |
|
strategy="loudness", |
|
loudness_compressor=True |
|
) |
|
|
|
print(f"Áudio gerado com sucesso em: {output_path}") |
|
return output_path |
|
|
|
except Exception as e: |
|
print(f"Erro ao gerar áudio: {e}") |
|
raise gr.Error(f"Falha na geração: {str(e)}") |
|
|
|
def generate_music(prompt): |
|
return generate_audio(prompt, musicgen, "música") |
|
|
|
def generate_sound_effect(prompt): |
|
return generate_audio(prompt, audiogen, "efeito sonoro") |
|
|
|
|
|
with gr.Blocks() as demo: |
|
gr.Markdown("# 🎵 Gerador de Áudio com MusicGen e AudioGen") |
|
with gr.Tabs(): |
|
with gr.TabItem("MusicGen 🎵"): |
|
gr.Markdown("## Gerar Música") |
|
with gr.Row(): |
|
music_input = gr.Text(label="Descreva a música que deseja") |
|
music_output = gr.Audio(label="Música Gerada", type="filepath") |
|
music_button = gr.Button("Gerar Música") |
|
music_button.click(fn=generate_music, inputs=music_input, outputs=music_output) |
|
|
|
with gr.TabItem("AudioGen 🔊"): |
|
gr.Markdown("## Gerar Efeitos Sonoros") |
|
with gr.Row(): |
|
sound_input = gr.Text(label="Descreva o efeito sonoro que deseja") |
|
sound_output = gr.Audio(label="Som Gerado", type="filepath") |
|
sound_button = gr.Button("Gerar Som") |
|
sound_button.click(fn=generate_sound_effect, inputs=sound_input, outputs=sound_output) |
|
|
|
if __name__ == "__main__": |
|
demo.launch() |