librosa.core.salience¶
-
librosa.core.
salience
(S, freqs, h_range, weights=None, aggregate=None, filter_peaks=True, fill_value=nan, kind=’linear’, axis=0)[source]¶ Harmonic salience function.
Parameters: - S : np.ndarray [shape=(d, n)]
input time frequency magnitude representation (stft, ifgram, etc). Must be real-valued and non-negative.
- freqs : np.ndarray, shape=(S.shape[axis])
The frequency values corresponding to S’s elements along the chosen axis.
- h_range : list-like, non-negative
Harmonics to include in salience computation. The first harmonic (1) corresponds to S itself. Values less than one (e.g., 1/2) correspond to sub-harmonics.
- weights : list-like
The weight to apply to each harmonic in the summation. (default: uniform weights). Must be the same length as harmonics.
- aggregate : function
aggregation function (default: np.average) If aggregate=np.average, then a weighted average is computed per-harmonic according to the specified weights. For all other aggregation functions, all harmonics are treated equally.
- filter_peaks : bool
If true, returns harmonic summation only on frequencies of peak magnitude. Otherwise returns harmonic summation over the full spectrum. Defaults to True.
- fill_value : float
The value to fill non-peaks in the output representation. (default: np.nan) Only used if filter_peaks == True.
- kind : str
Interpolation type for harmonic estimation. See
scipy.interpolate.interp1d
.- axis : int
The axis along which to compute harmonics
Returns: - S_sal : np.ndarray, shape=(len(h_range), [x.shape])
S_sal will have the same shape as S, and measure the overal harmonic energy at each frequency.
See also
Examples
>>> y, sr = librosa.load(librosa.util.example_audio_file(), ... duration=15, offset=30) >>> S = np.abs(librosa.stft(y)) >>> freqs = librosa.core.fft_frequencies(sr) >>> harms = [1, 2, 3, 4] >>> weights = [1.0, 0.5, 0.33, 0.25] >>> S_sal = librosa.salience(S, freqs, harms, weights, fill_value=0) >>> print(S_sal.shape) (1025, 646) >>> import matplotlib.pyplot as plt >>> plt.figure() >>> librosa.display.specshow(librosa.amplitude_to_db(S_sal, ... ref=np.max), ... sr=sr, y_axis='log', x_axis='time') >>> plt.colorbar() >>> plt.title('Salience spectrogram') >>> plt.tight_layout()