File size: 3,721 Bytes
bc62b2b 0b3a9f2 bc62b2b 0bb0ef0 bc62b2b 2dd0adf 0d159b8 f63e27c 2dd0adf bc62b2b fe49032 bc62b2b fe49032 bc62b2b 0b3a9f2 bc62b2b fe49032 bc62b2b 0bb0ef0 0b3a9f2 fe49032 bc62b2b 0b3a9f2 bc62b2b 0d159b8 38efc0b 1e7aa82 38efc0b 0d159b8 bc62b2b 0b3a9f2 0bb0ef0 fe49032 0b3a9f2 0bb0ef0 bc62b2b 0b3a9f2 795cfe8 bc62b2b fe49032 0b3a9f2 0bb0ef0 0b3a9f2 0bb0ef0 fe49032 0bb0ef0 |
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 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 |
from audiocraft.models import MusicGen
import streamlit as st
import os
import torch
import torchaudio
from io import BytesIO
st.set_page_config(
page_icon=":musical_note:",
page_title="Music Gen"
)
with open("style.css") as f:
st.markdown(f"<style>{f.read()}</style>", unsafe_allow_html=True)
@st.cache_resource
def load_model():
model = MusicGen.get_pretrained("facebook/musicgen-small")
return model
def generate_music_tensors(description, duration: int):
print("Description:", description)
print("Duration:", duration)
model = load_model()
model.set_generation_params(
use_sampling=True,
top_k=250,
duration=duration
)
output = model.generate(
descriptions=[description],
progress=True,
return_tokens=True
)
return output[0]
def save_audio_to_bytes(samples: torch.Tensor):
sample_rate = 32000
assert samples.dim() == 2 or samples.dim() == 3
samples = samples.detach().cpu()
if samples.dim() == 2:
samples = samples[None, ...] # Add batch dimension if missing
audio_buffer = BytesIO()
torchaudio.save(audio_buffer, samples[0], sample_rate=sample_rate, format="wav")
audio_buffer.seek(0) # Move to the start of the buffer
return audio_buffer
video_background = """
<style>
.video-container {
position: fixed;
top: 0;
left: 0;
width: 100%;
height: 100%;
overflow: hidden;
z-index: -1;
}
video {
position: absolute;
top: 50%;
left: 50%;
min-width: 100%;
min-height: 100%;
width: auto;
height: auto;
z-index: -1;
transform: translate(-50%, -50%);
background-size: cover;
}
</style>
<div class="video-container">
<video autoplay loop muted>
<source src="https://go.screenpal.com/watch/cZX2oynVXxQ" type="video/mp4">
</video>
</div>
"""
st.markdown(video_background, unsafe_allow_html=True)
def main():
st.title("Your Music")
with st.expander("See Explanation"):
st.write("This app uses Meta's Audiocraft Music Gen model to generate audio based on your description.")
text_area = st.text_area("Enter description")
time_slider = st.slider("Select time duration (seconds)", 2, 20, 5)
if text_area and time_slider:
st.json(
{
"Description": text_area,
"Selected duration": time_slider
}
)
st.write("Generating your music... please wait.")
def main():
st.title("Your Music")
with st.expander("See Explanation"):
st.write("This app uses Meta's Audiocraft Music Gen model to generate audio based on your description.")
text_area = st.text_area("Enter description")
time_slider = st.slider("Select time duration (seconds)", 2, 20, 5)
if text_area and time_slider:
st.json(
{
"Description": text_area,
"Selected duration": time_slider
}
)
st.write("We will be back with your music... please enjoy doing the rest of your tasks while we come back in some time :)")
st.subheader("Generated Music")
music_tensors = generate_music_tensors(text_area, time_slider)
# Convert audio to bytes for playback and download
audio_buffer = save_audio_to_bytes(music_tensors)
# Play audio
st.audio(audio_buffer, format="audio/wav")
# Download button for audio
st.download_button(
label="Download Audio",
data=audio_buffer,
file_name="generated_music.wav",
mime="audio/wav"
)
if __name__ == "__main__":
main()
|