File size: 3,393 Bytes
80e87e2
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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
import streamlit as st
from musicgen import init_musicgen, generate_music
import numpy as np
from scipy.io.wavfile import write

# Custom CSS to improve the appearance
st.markdown("""

<style>

    .stApp {

        background-image:linear-gradient(to bottom, #000000 ,#000814 ,#10002b, #240046);

    }

    .main-title {

        font-size: 3rem !important;

        color: #f1faee;

        text-align: center;

        padding: 1rem 0;

    }

    .subtitle {

        font-size: 1.2rem;

        color: #f1faee;

        text-align: center;

        margin-bottom: 2rem;

    }

    .stTextInput > div > div > input {

        font-size: 1.2rem;

    }

    .generate-button {

        font-size: 1.2rem;

        border-radius: 10px;

        padding: 0.5rem 1rem;

    }

    .info-section {

        background-color: #ffffff;

        padding: 1rem;

        border-radius: 10px;

        margin-top: 2rem;

    }

</style>

""", unsafe_allow_html=True)

# Initialize the MusicGen model and tokenizer
@st.cache_resource
def load_model():
    return init_musicgen('facebook/musicgen-small')

tokenizer, model = load_model()

# Streamlit interface
st.markdown("<h1 class='main-title'>🎡 AI Music Generator</h1>", unsafe_allow_html=True)
st.markdown("<p class='subtitle'>Describe the type of music you want, and the AI will generate it for you.</p>", unsafe_allow_html=True)

# Main interaction area
text_input = st.text_input("πŸ–ŠοΈ Describe the music you want to create", 
                           placeholder="E.g., A happy pop song with guitar and drums")

if st.button("🎼 Generate Music"):
    if text_input.strip():
        with st.spinner("🎧 Generating your music..."):
            try:
                audio_array = generate_music(text_input, tokenizer, model)
                
                # Convert to int16 and save as WAV file
                audio_int16 = (audio_array * 32767).astype(np.int16)
                write("generated_music.wav", 44100, audio_int16)
                
                st.success("πŸŽ‰ Your music has been generated successfully!")
                
                # Play the generated audio
                st.audio("generated_music.wav")
                
                # Provide download button
                with open("generated_music.wav", "rb") as file:
                    st.download_button(
                        label="πŸ“₯ Download Music",
                        data=file,
                        file_name="ai_generated_music.wav",
                        mime="audio/wav"
                    )
            except Exception as e:
                st.error(f"πŸ˜• Oops! An error occurred: {str(e)}")
    else:
        st.warning("πŸ€” Please enter a description for your music.")

# Information sections
st.markdown("---")

col1, col2 = st.columns(2)

with col1:
    st.markdown("### 🌟 How it works")
    st.markdown("""

    1. πŸ“ Describe the music you want

    2. πŸ–±οΈ Click 'Generate Music'

    3. 🎧 Listen to your AI-created tune

    4. πŸ“₯ Download and share!

    """)

with col2:
    st.markdown("### 🎨 Tips for great results")
    st.markdown("""

    - Be specific about instruments

    - Mention genre or mood

    - Describe tempo or rhythm

    - Reference famous artists or songs

    """)

# Footer
st.markdown("---")