spectrogram / app.py
jhauret's picture
test plotly & html
cd352f8
raw
history blame
2.47 kB
import gradio as gr
import numpy as np
import matplotlib.pyplot as plt
import librosa
import librosa.display
import base64
from io import BytesIO
import soundfile as sf
import numpy as np
import IPython.display as ipd
import plotly.graph_objects as go
import plotly
from scipy.signal import csd
from scipy.ndimage import interpolation
from plotly import tools
import scipy.signal as ssig
import matplotlib.pyplot as plt
import librosa
import librosa.display
def plot_stft(audio_file):
# Load audio file
audio, sampling_rate = librosa.load(audio_file)
# Compute stft
freq, frames, stft = ssig.stft(audio,
sampling_rate,
window='hann',
nperseg=512,
noverlap=412,
nfft=1024,
return_onesided=True,
boundary='zeros',
padded=True,
axis=- 1)
spectrogram = go.Heatmap(z=librosa.amplitude_to_db(np.abs(stft), ref=np.max),
x=frames,
y=freq,
colorscale='Viridis')
fig = go.Figure(spectrogram)
fig.update_layout(
#width=300,
#height=500,
font=dict(family='Latin Modern Roman', size=18),
xaxis=dict(
title='Time (seconds)',
titlefont=dict(family='Latin Modern Roman',
size=18)),
yaxis=dict(
title='Frequency (Hz)',
titlefont=dict(family='Latin Modern Roman',
size=18)),
margin=dict(l=0, r=0, t=0, b=0),
paper_bgcolor='rgba(0,0,0,0)',
plot_bgcolor='rgba(0,0,0,0)')
fig.update_traces(colorbar_thickness=8, selector=dict(type='heatmap'))
fig.update_traces(showscale=True, showlegend=False, visible = True)
fig.update_xaxes(visible=True, showgrid=False)
fig.update_yaxes(visible=True, showgrid=False)
plotly.offline.plot(fig, filename='stft.html', config={'displaylogo': False, 'modeBarButtonsToRemove': ['toImage','zoomIn', 'zoomOut','resetScale']})
return 'stft.html'
# Gradio interface
demo = gr.Interface(fn=plot_stft,
inputs=gr.Audio(type="filepath"),
outputs="html")
demo.launch()