Spaces:
Running
Running
import streamlit as st | |
import os | |
import subprocess | |
# Function to save uploaded file | |
def save_uploaded_file(uploaded_file): | |
try: | |
with open(os.path.join("uploaded_files", uploaded_file.name), "wb") as f: | |
f.write(uploaded_file.getbuffer()) | |
return True | |
except: | |
return False | |
# Function to process audio file with demucs | |
def process_audio_with_demucs(audio_file_path): | |
try: | |
subprocess.run(['demucs',"--mp3", audio_file_path], check=True) | |
return True | |
except subprocess.CalledProcessError as e: | |
st.error(f"Error executing demucs command: {e}") | |
return False | |
# Create a directory to save uploaded files | |
if not os.path.exists('uploaded_files'): | |
os.mkdir('uploaded_files') | |
st.title('SoundForge: Agile CI/CD for Improved Audio Separation') | |
uploaded_file = st.file_uploader("Choose an audio file", type=['mp3', 'wav']) | |
if uploaded_file is not None: | |
# Display the file details | |
file_details = {"FileName": uploaded_file.name, "FileType": uploaded_file.type} | |
if save_uploaded_file(uploaded_file): | |
st.success("File Saved Successfully") | |
# Display audio player for original file | |
audio_file_path = os.path.join("uploaded_files", uploaded_file.name) | |
audio_bytes = open(audio_file_path, "rb").read() | |
# Display side-by-side columns | |
col1, col2 = st.columns(2) | |
with col1: | |
st.markdown("### Original Audio") | |
st.audio(audio_bytes, format='audio/mp3', start_time=0) | |
with col2: | |
st.markdown("### Processed Audio (Demucs)") | |
if st.button("Process Audio with Demucs"): | |
if process_audio_with_demucs(audio_file_path): | |
processed_audio_file_path = os.path.join("separated", "htdemucs", os.path.splitext(uploaded_file.name)[0], "vocals.mp3") | |
if os.path.exists(processed_audio_file_path): | |
processed_audio_bytes = open(processed_audio_file_path, "rb").read() | |
st.audio(processed_audio_bytes, format='audio/mp3', start_time=0) | |
else: | |
st.error("Processed audio file not found.") | |
else: | |
st.error("Error processing audio with Demucs.") | |