spectrogram / app.py
jhauret's picture
html with matplotlib
954dbdf
raw
history blame
1.18 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
def plot_stft(audio_file):
# Load audio file
y, sr = librosa.load(audio_file)
# Compute the Short-Time Fourier Transform (STFT)
D = librosa.stft(y)
S_db = librosa.amplitude_to_db(np.abs(D), ref=np.max)
# Plot the STFT
plt.figure(figsize=(10, 6))
librosa.display.specshow(S_db, sr=sr, x_axis='time', y_axis='log')
plt.colorbar(format='%+2.0f dB')
plt.title('STFT (Short-Time Fourier Transform)')
# Save the plot to a BytesIO object
buf = BytesIO()
plt.savefig(buf, format='png')
plt.close()
buf.seek(0)
# Encode the image as base64
image_base64 = base64.b64encode(buf.getvalue()).decode('utf-8')
buf.close()
# Create an HTML img tag with the base64 encoded image
html_img = f'<img src="data:image/png;base64,{image_base64}" alt="STFT plot"/>'
return html_img
# Gradio interface
demo = gr.Interface(fn=plot_stft,
inputs=gr.Audio(type="filepath"),
outputs="html")
demo.launch()