Trim / app.py
Rhueue's picture
Update app.py
609febe
raw
history blame
1.48 kB
import streamlit as st
import noisereduce as nr
import soundfile as sf
import io
import numpy as np
from pydub import AudioSegment
from pydub.silence import split_on_silence, detect_silence
# Define a Streamlit app
st.title("Audio Processing App")
# Upload the input audio file
uploaded_audio = st.file_uploader("Upload an audio file", type=["mp3", "wav", "ogg", "flac", "wma", "m4a"])
if uploaded_audio is not None:
audio_bytes = uploaded_audio.read()
# Convert audio file to numpy array
audio, sample_rate = sf.read(io.BytesIO(audio_bytes))
# Apply noise reduction
st.write("Applying noise reduction...")
reduced_audio_data = nr.reduce_noise(y=audio, sr=sample_rate)
# Create an AudioSegment from the reduced audio data
reduced_audio = AudioSegment(
reduced_audio_data.tobytes(),
frame_rate=sample_rate,
sample_width=reduced_audio_data.dtype.itemsize,
channels=1
)
# Split audio on silences
st.write("Inserting small silences...")
silence_segments = detect_silence(reduced_audio, min_silence_len=100, silence_thresh=-36)
silenced_audio = AudioSegment.empty()
for start, end in silence_segments:
silenced_audio += reduced_audio[start:end]
# Provide a link to download the processed audio
st.audio(silenced_audio.export(format="wav").read(), format="audio/wav")
# Run the Streamlit app
if __name__ == "__main__":
st.write("Upload an audio file to process.")