Reaper200 commited on
Commit
1e17d2c
·
verified ·
1 Parent(s): 19ffa2a

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +50 -0
app.py CHANGED
@@ -0,0 +1,50 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ import streamlit as st
2
+ import torchaudio
3
+ import tempfile
4
+ import os
5
+ from pydub import AudioSegment
6
+ from bark import generate_audio, SAMPLE_RATE as BARK_RATE
7
+ from audiocraft.models import MusicGen
8
+
9
+ # Load MusicGen model
10
+ musicgen = MusicGen.get_pretrained('facebook/musicgen-small')
11
+
12
+ st.set_page_config(page_title="Suno Clone", layout="centered")
13
+ st.title("Suno-like Music Generator")
14
+ st.markdown("Combining **Bark TTS**, **RVC Voice Cloning**, and **MusicLM** for full track creation.")
15
+
16
+ lyrics = st.text_area("Enter your lyrics:", height=150)
17
+ genre_prompt = st.text_input("Enter Music Style (e.g., 'trap beat with piano')", value="trap beat with piano")
18
+ uploaded_voice = st.file_uploader("Upload your voice sample (for cloning - WAV only)", type=["wav"])
19
+
20
+ if st.button("Generate Song"):
21
+ with st.spinner("Generating vocals with Bark..."):
22
+ vocals_tensor = generate_audio(lyrics, history_prompt="v2/en_speaker_6")
23
+ vocals_path = tempfile.mktemp(suffix=".wav")
24
+ torchaudio.save(vocals_path, vocals_tensor.squeeze(0).cpu(), BARK_RATE)
25
+
26
+ if uploaded_voice:
27
+ with st.spinner("Cloning voice with RVC..."):
28
+ uploaded_voice_path = tempfile.mktemp(suffix=".wav")
29
+ with open(uploaded_voice_path, "wb") as f:
30
+ f.write(uploaded_voice.read())
31
+
32
+ cloned_path = tempfile.mktemp(suffix=".wav")
33
+ os.system(f"python infer_rvc.py --input \"{vocals_path}\" --voice \"{uploaded_voice_path}\" --output \"{cloned_path}\"")
34
+ vocals_path = cloned_path
35
+
36
+ with st.spinner("Generating instrumental with MusicLM..."):
37
+ musicgen.set_generation_params(duration=15)
38
+ music = musicgen.generate([genre_prompt])
39
+ instrumental_path = tempfile.mktemp(suffix=".wav")
40
+ torchaudio.save(instrumental_path, music[0].cpu(), 32000)
41
+
42
+ with st.spinner("Mixing vocals and instrumental..."):
43
+ vocals_seg = AudioSegment.from_wav(vocals_path)
44
+ instrumental_seg = AudioSegment.from_wav(instrumental_path)
45
+ mixed = instrumental_seg.overlay(vocals_seg.set_frame_rate(32000).set_channels(1))
46
+ final_output_path = tempfile.mktemp(suffix=".wav")
47
+ mixed.export(final_output_path, format="wav")
48
+
49
+ st.audio(final_output_path)
50
+ st.success("Your song is ready!")