Pablo276's picture
Update app.py
97c41eb
import pesq
import numpy as np
import soundfile as sf
import gradio as gr
def calculate_pesq(reference_audio, degraded_audio):
# Extract audio data and sample rates from Gradio's Audio widget output
ref_signal, ref_sample_rate = reference_audio[0], reference_audio[1]
deg_signal, deg_sample_rate = degraded_audio[0], degraded_audio[1]
# Convert audio data to the same sample rate if needed
if ref_sample_rate != deg_sample_rate:
from scipy.signal import resample
min_length = min(len(ref_signal), len(deg_signal))
ref_signal = resample(ref_signal[:min_length], len(ref_signal))
deg_signal = resample(deg_signal[:min_length], len(deg_signal))
pesq_score = pesq.pesq(ref_signal, deg_signal, ref_sample_rate)
return pesq_score
def calculate_snr(reference_audio, degraded_audio):
ref_signal, _ = reference_audio
deg_signal, _ = degraded_audio
noise = ref_signal - deg_signal
snr = 10 * np.log10(np.sum(ref_signal**2) / np.sum(noise**2))
return snr
def calculate_audio_difference(reference_audio, degraded_audio):
ref_signal, ref_sample_rate = reference_audio[0], reference_audio[1]
deg_signal, deg_sample_rate = degraded_audio[0], degraded_audio[1]
if ref_sample_rate != deg_sample_rate:
from scipy.signal import resample
min_length = min(len(ref_signal), len(deg_signal))
ref_signal = resample(ref_signal[:min_length], len(ref_signal))
deg_signal = resample(deg_signal[:min_length], len(deg_signal))
diff_count = np.count_nonzero(ref_signal != deg_signal)
total_samples = len(ref_signal)
difference_percentage = (diff_count / total_samples) * 100
return difference_percentage
def audio_quality_interface(reference_audio, degraded_audio):
pesq_score = calculate_pesq(reference_audio, degraded_audio)
snr = calculate_snr(reference_audio, degraded_audio)
difference_percentage = calculate_audio_difference(reference_audio, degraded_audio)
result = f"Risultati:\n\nPunteggio PESQ: {pesq_score:.2f}\nSNR: {snr:.2f}\nPercentuale di differenza: {difference_percentage:.2f}%"
return result
iface = gr.Interface(fn=audio_quality_interface,
inputs=[gr.Audio(label="Audio di riferimento"), gr.Audio(label="Audio degradato")],
outputs=gr.Textbox(),
layout="vertical",
live=True)
iface.launch()