import streamlit as st import tempfile import shutil import os import random import string import subprocess # os.system("conda install -c conda-forge ffmpeg libsndfile -y") st.set_page_config(page_title='Music Vocabulary Splitter', layout='wide', initial_sidebar_state='collapsed') st.title('Music Vocabulary Splitter') # Adding space for aesthetics st.markdown('
', unsafe_allow_html=True) st.header('Welcome to the Music Vocabulary Splitter :musical_note:') st.markdown(""" This application is designed to help you **analyze and split the vocabulary** associated with your music files. Whether you're looking to categorize lyrics, analyze word usage, or better understand the thematic elements of your songs, **Music Vocabulary Splitter** is your go-to tool. With Music Vocabulary Splitter, you can: - :musical_note: Split and categorize words from lyrics or song descriptions. - :bar_chart: Generate insights into the frequency and distribution of words. - :mag: Apply these insights to understand themes and patterns across your music collection. :microphone: Upload your music files and let's get started! """, unsafe_allow_html=True) # Adding space for aesthetics st.markdown('
', unsafe_allow_html=True) def run_shell_command(command): process = subprocess.Popen( command, stdout=subprocess.PIPE, stderr=subprocess.PIPE, text=True, shell=True ) while True: output = process.stdout.readline() if output == '' and process.poll() is not None: break if output: st.write(output.strip()) rc = process.poll() return rc def create_download_link(video_file): with open(video_file.name, "rb") as f: file_bytes = f.read() b64 = base64.b64encode(file_bytes).decode() download_link = f'Download video file' st.markdown(download_link, unsafe_allow_html=True) def save_uploaded_file(uploaded_file): save_dir = "/tmp/uploaded_videos" # Change this to the desired folder if not os.path.exists(save_dir): os.makedirs(save_dir) with open(os.path.join(save_dir, uploaded_file.name), "wb") as f: f.write(uploaded_file.getbuffer()) st.success(f"File '{uploaded_file.name}' saved to folder '{save_dir}'") return uploaded_file.name, save_dir video_file = st.file_uploader("Upload a video file", type=['mp4', 'mov', 'avi', 'flv', 'wmv', 'webm','mp3']) if video_file is not None: tfile = tempfile.NamedTemporaryFile(delete=False) tfile.write(video_file.read()) st.video(tfile.name) filename, video_path = save_uploaded_file(video_file) # create_download_link(video_file) save_dir = "/tmp/vocals" ip_dir = video_path + "/" + filename # print(f"spleeter separate -o {save_dir} '{ip_dir}'") # Example command to run command = f"spleeter separate -o {save_dir} '{ip_dir}'" # Run the shell command and display live results return_code = run_shell_command(command) st.write(f"\nCommand finished with return code: {return_code}") op_file_vocals = save_dir + "/" + filename.split(".")[0] + "/vocals.wav" op_file_music = save_dir + "/" + filename.split(".")[0] + "/accompaniment.wav" st.success(f"File '{ip_dir}' processed into vocals {op_file_vocals} and music {op_file_music}") st.audio(op_file_vocals) # create_download_link(op_file_vocals) st.audio(op_file_music) # create_download_link(op_file_music) if st.button("Clear Data"): command = f"rm -R uploaded_videos" run_shell_command(command) command = f"rm -R vocals" run_shell_command(command)