Caution

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

# librosa.salienceļ

librosa.salience(S, *, freqs, harmonics, weights=None, aggregate=None, filter_peaks=True, fill_value=nan, kind='linear', axis=-2)[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.

harmonicslist-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

`S_sal` will have the same shape as `S`, and measure the overall harmonic energy at each frequency.

Examples

```>>> y, sr = librosa.load(librosa.ex('trumpet'), duration=3)
>>> S = np.abs(librosa.stft(y))
>>> freqs = librosa.fft_frequencies(sr=sr)
>>> harms = [1, 2, 3, 4]
>>> weights = [1.0, 0.5, 0.33, 0.25]
>>> S_sal = librosa.salience(S, freqs=freqs, harmonics=harms, weights=weights, fill_value=0)
>>> print(S_sal.shape)
(1025, 115)
>>> import matplotlib.pyplot as plt
>>> fig, ax = plt.subplots(nrows=2, sharex=True, sharey=True)
>>> librosa.display.specshow(librosa.amplitude_to_db(S, ref=np.max),
...                          sr=sr, y_axis='log', x_axis='time', ax=ax[0])
>>> ax[0].set(title='Magnitude spectrogram')
>>> ax[0].label_outer()
>>> img = librosa.display.specshow(librosa.amplitude_to_db(S_sal,
...                                                        ref=np.max),
...                                sr=sr, y_axis='log', x_axis='time', ax=ax[1])
>>> ax[1].set(title='Salience spectrogram')
>>> fig.colorbar(img, ax=ax, format="%+2.0f dB")
```