File size: 1,475 Bytes
1b95475
609febe
6447be5
136ed2d
ff25f09
6447be5
609febe
1b95475
 
6447be5
1b95475
 
 
 
 
 
 
609febe
6447be5
 
609febe
 
 
6447be5
609febe
 
 
6447be5
609febe
6447be5
 
1b95475
609febe
 
 
 
 
 
1b95475
6447be5
609febe
1b95475
 
 
ff25f09
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
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.")