librosa.core.estimate_tuning

librosa.core.estimate_tuning(y=None, sr=22050, S=None, n_fft=2048, resolution=0.01, bins_per_octave=12, **kwargs)[source]

Estimate the tuning of an audio time series or spectrogram input.

Parameters:
y: np.ndarray [shape=(n,)] or None

audio signal

sr : number > 0 [scalar]

audio sampling rate of y

S: np.ndarray [shape=(d, t)] or None

magnitude or power spectrogram

n_fft : int > 0 [scalar] or None

number of FFT bins to use, if y is provided.

resolution : float in (0, 1)

Resolution of the tuning as a fraction of a bin. 0.01 corresponds to measurements in cents.

bins_per_octave : int > 0 [scalar]

How many frequency bins per octave

kwargs : additional keyword arguments

Additional arguments passed to piptrack

Returns:
tuning: float in `[-0.5, 0.5)`

estimated tuning deviation (fractions of a bin)

See also

piptrack
Pitch tracking by parabolic interpolation

Examples

>>> # With time-series input
>>> y, sr = librosa.load(librosa.util.example_audio_file())
>>> librosa.estimate_tuning(y=y, sr=sr)
0.089999999999999969
>>> # In tenths of a cent
>>> y, sr = librosa.load(librosa.util.example_audio_file())
>>> librosa.estimate_tuning(y=y, sr=sr, resolution=1e-3)
0.093999999999999972
>>> # Using spectrogram input
>>> y, sr = librosa.load(librosa.util.example_audio_file())
>>> S = np.abs(librosa.stft(y))
>>> librosa.estimate_tuning(S=S, sr=sr)
0.089999999999999969
>>> # Using pass-through arguments to `librosa.piptrack`
>>> y, sr = librosa.load(librosa.util.example_audio_file())
>>> librosa.estimate_tuning(y=y, sr=sr, n_fft=8192,
...                         fmax=librosa.note_to_hz('G#9'))
0.070000000000000062