diff --git a/functions.py b/functions.py index ae8ceb51e73cd8da6f46fdbd5bf8f0db075b2f24..669efca7ac0e64893d6ebc614bd04a0c81c43769 100644 --- a/functions.py +++ b/functions.py @@ -59,7 +59,7 @@ def load_waveform(wavefile_name, sr_resample): return wavefile_dec -def wave_to_spectrogram(waveform, SR, n_fft, w_size, clip, as_pcen=False): +def wave_to_spectrogram(waveform, SR, n_fft, w_size, clip, as_pcen=False, top_db=160): """ A function that transforms any given waveform to a spectrogram. @@ -83,6 +83,9 @@ def wave_to_spectrogram(waveform, SR, n_fft, w_size, clip, as_pcen=False): Whether the returned image should be a PCEN or not. Aka : spectrogram with enhanced contrast. Default is False. + top_db : float, optional. + Thresholds the output at top_db for amplitude_to_db function. + Default is 80. Returns ------- @@ -91,21 +94,21 @@ def wave_to_spectrogram(waveform, SR, n_fft, w_size, clip, as_pcen=False): audio_length : float Duration of the audio in seconds. """ - base = np.abs(stft( + spectrum = np.abs(stft( waveform, n_fft=n_fft, hop_length=w_size)) - - spectro_pcen = pcen(base * (2**31), bias=10) - spectro_og = amplitude_to_db(base) + if as_pcen: + spectro_pcen = pcen(spectrum * (2**31), bias=10) + spectro_og = amplitude_to_db(spectrum, top_db=top_db) spectro_og = spectro_og - (np.max(spectro_og)) - spectro_og[spectro_og < clip] = np.nan if as_pcen: - spectro_pcen[np.isnan(spectro_og)] = np.nan + spectro_pcen[spectro_og < clip] = np.min(spectro_pcen) spectro = spectro_pcen else: + spectro_og[spectro_og < clip] = clip spectro = spectro_og audio_length = len(waveform)/SR diff --git a/interface.py b/interface.py index b5b6e1e09151bc042bdbb06740ed27cfdc3bb242..75e1defbfb783d351dde8f09ee38b64c28a5e8f7 100644 --- a/interface.py +++ b/interface.py @@ -559,6 +559,7 @@ class App(object): self.canvas.get_tk_widget().destroy() # load new data + self.setup() self.load_audio() self.create_canvas() self.NAME0 = 0 @@ -581,8 +582,6 @@ class App(object): def setup(self): """ A function to create variables based on default values - This is a security to avoid mixing default values with new values - during use... But it could be removed. """ self.NFFT = self._default_nfft self.HOP_LENGTH = self._default_hop_length