Slowed-Trackz / app.py
Curlyblaze's picture
Update app.py
1eeda53 verified
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()