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