Spaces:
Sleeping
Sleeping
File size: 1,939 Bytes
e235376 ace35b6 e235376 ace35b6 e235376 ace35b6 e235376 |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 |
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()
|