Mohssinibra's picture
Update app.py
ace35b6 verified
import gradio as gr
import librosa
import librosa.display
import numpy as np
import matplotlib.pyplot as plt
def visualize_audio(file):
# Charger l'audio
y, sr = librosa.load(file, sr=None)
# Détecter les segments actifs (éviter les silences)
intervals = librosa.effects.split(y, top_db=20) # Seuil de silence (en dB)
if len(intervals) == 0: # Si pas de segment actif, on garde tout
y_active = y
else:
start, end = intervals[0][0], intervals[-1][1] # Début et fin du segment actif
y_active = y[start:end]
# Transformer le signal en spectre de fréquences
D = librosa.stft(y_active) # Transformée de Fourier
magnitude, phase = np.abs(D), np.angle(D)
# Créer les figures pour affichage
fig, ax = plt.subplots(3, 1, figsize=(10, 12))
# 1. Affichage de la forme d'onde
ax[0].plot(y_active, color="blue")
ax[0].set_title("Forme d'onde (intervalle actif)")
ax[0].set_xlabel("Temps (échantillons)")
ax[0].set_ylabel("Amplitude")
# 2. Affichage du spectrogramme
librosa.display.specshow(librosa.amplitude_to_db(magnitude, ref=np.max), sr=sr, y_axis='log', x_axis='time', ax=ax[1])
ax[1].set_title("Spectrogramme (log-magnitude)")
ax[1].set_xlabel("Temps (s)")
ax[1].set_ylabel("Fréquence (Hz)")
# 3. Affichage de la phase
librosa.display.specshow(phase, sr=sr, y_axis='log', x_axis='time', ax=ax[2], cmap='twilight')
ax[2].set_title("Phase (FFT)")
ax[2].set_xlabel("Temps (s)")
ax[2].set_ylabel("Fréquence (Hz)")
# Sauvegarde de l'image
plt.tight_layout()
image_path = "audio_visualization.png"
plt.savefig(image_path)
plt.close()
return image_path
# Interface Gradio pour tester
iface = gr.Interface(
fn=visualize_audio,
inputs=gr.Audio(type="filepath"),
outputs="image",
title="Visualisation Audio (Waveform, Spectrogramme, Phase)"
)
iface.launch()