Spaces:
Sleeping
Sleeping
| 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() | |