Add spectrogram, native-rate loading, and always-labelled axis extremes
- SpectrogramMetric: log-frequency STFT power heatmap over time, magma colormap, -80 dB floor. Adaptive hop caps time bins at ~4000 so long tracks stay responsive on redraw; N_FFT=4096 keeps low-freq resolution. - master_core: load audio at native sample rate (librosa.load sr=None) instead of librosa's 22050 Hz default, so the full band up to the file's own nyquist (~22 kHz at 44.1 kHz) is analysed. ~2x heavier on 44.1/48 kHz files, by design. - metrics: shared _show_axis_extents helper forces each axis's exact min/max onto the tick list with compact labels (_fmt_tick), so the true range is always readable -- notably the spectrogram's 22 kHz top, which otherwise sits unlabelled between log-scale decade ticks. Applied to all metric renders. - Docs: README + CLAUDE updated for the new metric, native-rate loading, and axis-readability behaviour. Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
This commit is contained in:
+4
-2
@@ -27,8 +27,10 @@ class AudioFile:
|
||||
else:
|
||||
self.song_name = safe_title(os.path.basename(self.file_path))
|
||||
|
||||
# librosa.load normalises to [-1.0, 1.0]
|
||||
self.y, self.sr = librosa.load(file_path)
|
||||
# librosa.load normalises to [-1.0, 1.0]. sr=None preserves the file's
|
||||
# native sample rate; without it librosa resamples to 22050 Hz, which would
|
||||
# discard everything above ~11 kHz (the entire top octave) before analysis.
|
||||
self.y, self.sr = librosa.load(file_path, sr=None)
|
||||
self.y_mono = librosa.to_mono(self.y)
|
||||
self.max_amplitude = np.max(np.abs(self.y_mono))
|
||||
self.avg_amplitude = np.mean(np.abs(self.y_mono))
|
||||
|
||||
Reference in New Issue
Block a user