File size: 1,738 Bytes
c2cbc36
cf85c97
561eda1
 
 
 
c2cbc36
76e60a7
0a88de3
76e60a7
 
 
 
0506203
fa27227
559b897
 
 
53fc41f
f2a983a
 
0a88de3
559b897
f2a983a
fa27227
bc96f38
f2a983a
 
 
 
 
 
 
561eda1
0a88de3
 
cf85c97
 
 
0a88de3
53fc41f
cf85c97
 
 
 
262705a
0a88de3
6904a18
0ead803
eced700
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
import spaces
import os
import torchaudio
from audiocraft.models import AudioGen
from audiocraft.data.audio import audio_write
import gradio as gr

OUTPUT_DIR = "audio_files"
DEFAULT_DURATION = 5  # Default duration for audio generation in seconds
os.makedirs(OUTPUT_DIR, exist_ok=True)

model = None  

@spaces.GPU
def generate_audio(descriptions: str, duration: int = DEFAULT_DURATION):    
    global model
    if model is None:
        model = AudioGen.get_pretrained('facebook/audiogen-medium')

    if not os.path.exists('audio_files'):
        os.makedirs('audio_files')
    model.set_generation_params(duration=duration)
    wav = model.generate([descriptions]) 
    results = []
    print(f"Received call: '{descriptions}' duration={duration}")
    for one_wav in wav:
        filename = f'{descriptions}.wav'
        file_path = os.path.join('audio_files', filename)
        audio_write(file_path, one_wav.cpu(), model.sample_rate, strategy="loudness", loudness_compressor=True, add_suffix=False)
        print(f"Generated audio for '{descriptions}'")
        results.append(file_path)
    
    return results[0]



with gr.Blocks() as demo:
    gr.Markdown("# AudioGen Demo")
    with gr.Row():
        descriptions = gr.Textbox(lines=1, label="Enter a description of the audio")
        duration_slider = gr.Slider(minimum=1, maximum=30, value=DEFAULT_DURATION, step=1, label="Duration (seconds)") 
    with gr.Row():
        generate_button = gr.Button("Generate Audio")
    with gr.Row():
        output = gr.Audio(label="Generated Audio")

    generate_button.click(fn=generate_audio, inputs=[descriptions, duration_slider], outputs=output)

demo = demo.queue(max_size=10, status_update_rate="auto")
demo.launch(share=True)