Spaces:
Sleeping
Sleeping
| import gradio as gr | |
| from pydub import AudioSegment | |
| import os | |
| # --- DEBUG: LIST ALL FILES --- | |
| print("\nπ DIAGNOSTIC: Here are the exact file names in your folder:") | |
| files = os.listdir(".") | |
| for f in files: | |
| if f.endswith((".mp3", ".wav")): | |
| print(f" π΅ {f}") | |
| print("------------------------------------------------\n") | |
| # --- 1. SETUP & FILE CHECK --- | |
| print("Attempting to load stems...") | |
| def load_smart_stem(name): | |
| # Check for MP3 | |
| if os.path.exists(f"{name}.mp3"): | |
| print(f"β Found {name}.mp3") | |
| return AudioSegment.from_file(f"{name}.mp3") | |
| # Check for WAV | |
| elif os.path.exists(f"{name}.wav"): | |
| print(f"β Found {name}.wav") | |
| return AudioSegment.from_file(f"{name}.wav") | |
| # If neither exists | |
| else: | |
| print(f"β MISSING: {name}.mp3 OR {name}.wav") | |
| return AudioSegment.silent(duration=1000) | |
| # Load the files | |
| vocals = load_smart_stem("vocals") | |
| drums = load_smart_stem("drums") | |
| bass = load_smart_stem("bass") | |
| other = load_smart_stem("other") | |
| # --- 2. THE MIXING FUNCTION --- | |
| def remix_track(voc_vol, drum_vol, bass_vol, other_vol, speed): | |
| v = vocals + voc_vol | |
| d = drums + drum_vol | |
| b = bass + bass_vol | |
| o = other + other_vol | |
| mix = v.overlay(d).overlay(b).overlay(o) | |
| if speed != 1.0: | |
| new_sample_rate = int(mix.frame_rate * speed) | |
| mix = mix._spawn(mix.raw_data, overrides={'frame_rate': new_sample_rate}) | |
| mix = mix.set_frame_rate(44100) | |
| output_path = "remix.mp3" | |
| mix.export(output_path, format="mp3") | |
| return output_path | |
| # --- 3. THE INTERFACE --- | |
| with gr.Blocks(theme=gr.themes.Soft()) as demo: | |
| gr.Markdown("# πͺ OPEN DOORS | REMIX STATION") | |
| with gr.Row(): | |
| v_slide = gr.Slider(-60, 10, value=0, label="Vocals (dB)") | |
| d_slide = gr.Slider(-60, 10, value=0, label="Drums (dB)") | |
| b_slide = gr.Slider(-60, 10, value=0, label="Bass (dB)") | |
| o_slide = gr.Slider(-60, 10, value=0, label="Melody (dB)") | |
| with gr.Row(): | |
| speed_slide = gr.Slider(0.5, 1.5, value=1.0, label="Speed & Pitch") | |
| btn = gr.Button("Generate Remix", variant="primary") | |
| audio_out = gr.Audio(label="Your Remix") | |
| btn.click(fn=remix_track, | |
| inputs=[v_slide, d_slide, b_slide, o_slide, speed_slide], | |
| outputs=audio_out) | |
| demo.launch() |