| import gradio as gr | |
| import torch | |
| import soundfile as sf | |
| import io | |
| from model import load_model, invert_audio | |
| # Load the model and processor | |
| preloaded = {} | |
| preloaded["model"], preloaded["processor"] = load_model() | |
| model = preloaded["model"] | |
| processor = preloaded["processor"] | |
| def gr_invert_audio(input_audio): | |
| # Extract the file content and sampling rate | |
| audio, sr = sf.read(input_audio) | |
| # Convert audio to tensor | |
| audio_tensor = torch.tensor(audio).float() | |
| # Invert the audio | |
| inverted_audio_tensor = invert_audio(model, processor, audio_tensor, sr) | |
| inverted_audio_np = inverted_audio_tensor.numpy() | |
| # Save the inverted audio to a temporary file and return it | |
| with io.BytesIO() as out_io: | |
| sf.write(out_io, inverted_audio_np, sr, format="wav") | |
| out_io.seek(0) | |
| return out_io.read() | |
| # Gradio interface | |
| iface = gr.Interface( | |
| fn=gr_invert_audio, | |
| inputs=gr.inputs.Audio(type="file", label="Upload an Audio File"), | |
| outputs=gr.outputs.Audio(label="Inverted Audio"), | |
| live=True | |
| ) | |
| iface.launch() | |
| # import streamlit as st | |
| # import torch | |
| # import julius | |
| # import soundfile as sf | |
| # import io | |
| # from model import load_model, invert_audio | |
| # # Load the model and processor | |
| # preloaded = {} | |
| # preloaded["model"], preloaded["processor"] = load_model() | |
| # model = preloaded["model"] | |
| # processor = preloaded["processor"] | |
| # st.title("Audio Inversion with HuggingFace & Streamlit") | |
| # # If this is the first run, create a new session state attribute for uploaded file | |
| # if 'uploaded_file' not in st.session_state: | |
| # st.session_state.uploaded_file = None | |
| # # Get the uploaded file | |
| # uploaded_file = st.file_uploader("Upload an audio file", type=["wav", "flac"]) | |
| # # Update the session state only if a new file is uploaded | |
| # if uploaded_file is not None: | |
| # st.session_state.uploaded_file = uploaded_file.getvalue() # store content, not the file object | |
| # if st.session_state.uploaded_file: | |
| # # Play the uploaded audio | |
| # audio_byte_content = st.session_state.uploaded_file | |
| # st.audio(audio_byte_content, format="audio/wav") | |
| # # Read the audio file | |
| # audio, sr = sf.read(io.BytesIO(audio_byte_content)) | |
| # # Convert audio to tensor | |
| # audio_tensor = torch.tensor(audio).float() | |
| # @st.cache(allow_output_mutation=True, suppress_st_warning=True) | |
| # def cache_inverted_audio(audio_tensor): | |
| # return invert_audio(model, processor, audio_tensor, sr) | |
| # # Use cached result | |
| # inverted_audio_tensor = cache_inverted_audio(audio_tensor) | |
| # inverted_audio_np = inverted_audio_tensor.numpy() | |
| # # Play inverted audio | |
| # with io.BytesIO() as out_io: | |
| # sf.write(out_io, inverted_audio_np, sr, format="wav") | |
| # st.audio(out_io.getvalue(), format="audio/wav") | |
| # # Offer a download button for the inverted audio | |
| # if st.button("Download Inverted Audio"): | |
| # with io.BytesIO() as out_io: | |
| # sf.write(out_io, inverted_audio_np, sr, format="wav") | |
| # st.download_button("Download Inverted Audio", data=out_io.getvalue(), file_name="inverted_output.wav", mime="audio/wav") | |