music_splits / app.py
Jaman's picture
Create app.py
86a6f34 verified
import streamlit as st
from spleeter.separator import Separator
import os
# Function to perform audio separation
def separate_audio(input_path, output_path, task):
separator = Separator(task)
os.makedirs(output_path, exist_ok=True)
separator.separate_to_file(input_path, output_path)
# Main function to create the Streamlit app
def main():
st.title("Audio Separation App")
# File uploader
uploaded_file = st.file_uploader("Upload an audio file", type=["mp3", "wav"])
# Task selection
task_to_do = st.selectbox("Choose your task", ["vocal_remove", "basic", "advance"])
if task_to_do == 'vocal_remove':
task = 'spleeter:2stems'
elif task_to_do == 'basic':
task = 'spleeter:4stems'
elif task_to_do == 'advance':
task = 'spleeter:5stems'
else:
st.error("Invalid task")
return
# Button to perform separation
if st.button("Split"):
if uploaded_file is not None:
# Save the uploaded file temporarily
input_path = os.path.join("temp", uploaded_file.name)
with open(input_path, "wb") as f:
f.write(uploaded_file.getbuffer())
# Create output directory path using the base name of the input file
base_name = os.path.splitext(os.path.basename(input_path))[0]
output_path = os.path.join("temp", base_name)
# Perform the separation
separate_audio(input_path, output_path, task)
# Display the results
st.success("Separation completed")
if task_to_do == 'vocal_remove':
st.audio(os.path.join(output_path, 'vocals.wav'), format='audio/wav', start_time=0)
st.audio(os.path.join(output_path, 'accompaniment.wav'), format='audio/wav', start_time=0)
elif task_to_do == 'basic':
st.audio(os.path.join(output_path, 'vocals.wav'), format='audio/wav', start_time=0)
st.audio(os.path.join(output_path, 'drums.wav'), format='audio/wav', start_time=0)
st.audio(os.path.join(output_path, 'bass.wav'), format='audio/wav', start_time=0)
st.audio(os.path.join(output_path, 'other.wav'), format='audio/wav', start_time=0)
elif task_to_do == 'advance':
st.audio(os.path.join(output_path, 'vocals.wav'), format='audio/wav', start_time=0)
st.audio(os.path.join(output_path, 'piano.wav'), format='audio/wav', start_time=0)
st.audio(os.path.join(output_path, 'drums.wav'), format='audio/wav', start_time=0)
st.audio(os.path.join(output_path, 'bass.wav'), format='audio/wav', start_time=0)
st.audio(os.path.join(output_path, 'other.wav'), format='audio/wav', start_time=0)
else:
st.error("Please upload an audio file")
if __name__ == "__main__":
main()