Pablo276 commited on
Commit
ba8d59d
·
1 Parent(s): 0378a22
Files changed (1) hide show
  1. app.py +78 -0
app.py ADDED
@@ -0,0 +1,78 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ import pesq
2
+ import numpy as np
3
+ import soundfile as sf
4
+ import gradio as gr
5
+
6
+ def calculate_pesq(audio_ref, audio_deg):
7
+ # Carica i file audio di riferimento e degradato
8
+ ref_signal, ref_sample_rate = sf.read(audio_ref)
9
+ deg_signal, deg_sample_rate = sf.read(audio_deg)
10
+
11
+ # Assicurati che i file audio abbiano la stessa frequenza di campionamento
12
+ if ref_sample_rate != deg_sample_rate:
13
+ print("I due file audio hanno frequenze di campionamento diverse. Eseguo il resampling.")
14
+ from scipy.signal import resample
15
+ min_length = min(len(ref_signal), len(deg_signal))
16
+ ref_signal = resample(ref_signal[:min_length], len(ref_signal))
17
+ deg_signal = resample(deg_signal[:min_length], len(deg_signal))
18
+
19
+ # Calcola il punteggio PESQ tra i due file audio
20
+ pesq_score = pesq.pesq(ref_signal, deg_signal, ref_sample_rate)
21
+
22
+ return pesq_score
23
+
24
+ def calculate_snr(audio_ref, audio_deg):
25
+ # Carica i file audio di riferimento e degradato
26
+ ref_signal, _ = sf.read(audio_ref)
27
+ deg_signal, _ = sf.read(audio_deg)
28
+
29
+ # Calcola l'SNR tra i due file audio
30
+ noise = ref_signal - deg_signal
31
+ snr = 10 * np.log10(np.sum(ref_signal**2) / np.sum(noise**2))
32
+
33
+ return snr
34
+
35
+ def calculate_audio_difference(audio_ref, audio_deg):
36
+ # Carica i file audio di riferimento e degradato
37
+ ref_signal, ref_sample_rate = sf.read(audio_ref)
38
+ deg_signal, deg_sample_rate = sf.read(audio_deg)
39
+
40
+ # Verifica e correggi le differenze nella frequenza di campionamento
41
+ if ref_sample_rate != deg_sample_rate:
42
+ print("I due file audio hanno frequenze di campionamento diverse. Eseguo il resampling.")
43
+ from scipy.signal import resample
44
+ min_length = min(len(ref_signal), len(deg_signal))
45
+ ref_signal = resample(ref_signal[:min_length], len(ref_signal))
46
+ deg_signal = resample(deg_signal[:min_length], len(deg_signal))
47
+
48
+ # Verifica e correggi le differenze nella lunghezza
49
+ if len(ref_signal) != len(deg_signal):
50
+ print("I due file audio hanno lunghezze diverse. Eseguo il padding.")
51
+ max_length = max(len(ref_signal), len(deg_signal))
52
+ ref_signal = np.pad(ref_signal, (0, max_length - len(ref_signal)))
53
+ deg_signal = np.pad(deg_signal, (0, max_length - len(deg_signal)))
54
+
55
+ # Calcola la differenza tra i segnali audio campione per campione
56
+ diff_count = np.count_nonzero(ref_signal != deg_signal)
57
+
58
+ # Calcola la percentuale di differenza tra i due segnali audio
59
+ total_samples = len(ref_signal)
60
+ difference_percentage = (diff_count / total_samples) * 100
61
+
62
+ return difference_percentage
63
+
64
+ def audio_quality_interface(reference_audio, degraded_audio):
65
+ pesq_score = calculate_pesq(reference_audio.name, degraded_audio.name)
66
+ snr = calculate_snr(reference_audio.name, degraded_audio.name)
67
+ difference_percentage = calculate_audio_difference(reference_audio.name, degraded_audio.name)
68
+
69
+ result = f"Risultati:\n\nPunteggio PESQ: {pesq_score}\nSNR: {snr}\nPercentuale di differenza: {difference_percentage:.2f}%"
70
+ return result
71
+
72
+ iface = gr.Interface(fn=audio_quality_interface,
73
+ inputs=[gr.Audio(label="Audio di riferimento"), gr.Audio(label="Audio degradato")],
74
+ outputs=gr.Textbox(),
75
+ layout="vertical",
76
+ live=True)
77
+
78
+ iface.launch()