Spaces:
Sleeping
Sleeping
| import numpy as np | |
| import librosa | |
| def compute_time_domain_stats(y): | |
| """Calculate time-domain statistics exactly as in original analyzer.""" | |
| # Peak amplitude | |
| peak = float(np.max(np.abs(y))) | |
| # RMS amplitude | |
| rms = float(np.sqrt(np.mean(y ** 2))) | |
| # dB conversions (protecting against log(0)) | |
| peak_db = 20 * np.log10(max(peak, 1e-12)) | |
| rms_db = 20 * np.log10(max(rms, 1e-12)) | |
| # Crest factor (indicator of compression) | |
| crest_factor = peak_db - rms_db | |
| # Noise floor estimate (10th percentile absolute amplitude) | |
| abs_y = np.abs(y) | |
| noise_floor = float(np.percentile(abs_y, 10)) | |
| # Estimated SNR | |
| snr_est = 20 * np.log10(max(rms, 1e-12) / max(noise_floor, 1e-12)) | |
| # Zero-crossing rate (speech/noise indicator) | |
| zcr = float(np.mean(librosa.feature.zero_crossing_rate(y))) | |
| return { | |
| "peak": peak, | |
| "rms": rms, | |
| "peak_db": peak_db, | |
| "rms_db": rms_db, | |
| "crest_factor_db": crest_factor, | |
| "noise_floor": noise_floor, | |
| "snr_db": snr_est, | |
| "zero_crossing_rate": zcr | |
| } | |