Hearing_Loss/main.py

48 lines
1.3 KiB
Python
Raw Normal View History

2023-12-24 22:52:19 +00:00
import streamlit as st
import numpy as np
import matplotlib.pyplot as plt
import librosa
import soundfile as sf
import wave
st.set_option('deprecation.showPyplotGlobalUse', False)
with st.sidebar :
p=st.slider("Hearing loss percentage",min_value=0,max_value=100,step=1)
p*=0.01
filename = "file.wav"
f=open(filename,'rb')
y,sr = librosa.load(filename)
valider = st.button("Valider")
if valider:
fft_signal = np.fft.fft(y)
amp = np.abs(fft_signal)
frequencies = np.fft.fftfreq(len(y), 1/sr)
a=np.random.choice(len(fft_signal), size=int(len(fft_signal)*p), replace=False)
fft_signal[a]=0
amp2 = np.abs(fft_signal)
y_filtered = np.fft.ifft(fft_signal).real
plt.plot(fft_signal)
plt.show()
y_norm = librosa.util.normalize(y_filtered)
sf.write('output_file.wav',y_norm, sr,'PCM_24')
audio_file = open('output_file.wav','rb')
st.write("Original file")
st.audio(f)
st.write("Transformed file")
st.audio(audio_file)
col1,col2=st.columns(2)
with col1:
st.header('Original audio')
fig, ax = plt.subplots()
ax.plot(frequencies,amp)
st.pyplot(fig)
with col2:
st.header('Transformed audio')
fig2, ax2 = plt.subplots()
ax2.plot(frequencies,amp2)
st.pyplot(fig2)