Spaces:
Sleeping
Sleeping
| 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() | |