Caution

You're reading an old version of this documentation. If you want up-to-date information, please have a look at 0.9.1.

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
Snp.ndarray [shape=(d, n)]

input time frequency magnitude representation (e.g. STFT or CQT magnitudes). Must be real-valued and non-negative.

freqsnp.ndarray, shape=(S.shape[axis])

The frequency values corresponding to S’s elements along the chosen axis.

h_rangelist-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.

weightslist-like

The weight to apply to each harmonic in the summation. (default: uniform weights). Must be the same length as harmonics.

aggregatefunction

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_peaksbool

If true, returns harmonic summation only on frequencies of peak magnitude. Otherwise returns harmonic summation over the full spectrum. Defaults to True.

fill_valuefloat

The value to fill non-peaks in the output representation. (default: np.nan) Only used if filter_peaks == True.

kindstr

Interpolation type for harmonic estimation. See scipy.interpolate.interp1d.

axisint

The axis along which to compute harmonics

Returns
S_salnp.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

interp_harmonics

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()
>>> plt.show()
../_images/librosa-core-salience-1.png