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.onset.onset_backtrack¶
- librosa.onset.onset_backtrack(events, energy)[source]¶
Backtrack detected onset events to the nearest preceding local minimum of an energy function.
This function can be used to roll back the timing of detected onsets from a detected peak amplitude to the preceding minimum.
This is most useful when using onsets to determine slice points for segmentation, as described by [1].
- 1
Jehan, Tristan. “Creating music by listening” Doctoral dissertation Massachusetts Institute of Technology, 2005.
- Parameters
- eventsnp.ndarray, dtype=int
List of onset event frame indices, as computed by
onset_detect
- energynp.ndarray, shape=(m,)
An energy function
- Returns
- events_backtrackednp.ndarray, shape=events.shape
The input events matched to nearest preceding minima of energy.
Examples
>>> y, sr = librosa.load(librosa.util.example_audio_file(), ... offset=30, duration=2.0) >>> oenv = librosa.onset.onset_strength(y=y, sr=sr) >>> # Detect events without backtracking >>> onset_raw = librosa.onset.onset_detect(onset_envelope=oenv, ... backtrack=False) >>> # Backtrack the events using the onset envelope >>> onset_bt = librosa.onset.onset_backtrack(onset_raw, oenv) >>> # Backtrack the events using the RMS values >>> rms = librosa.feature.rms(S=np.abs(librosa.stft(y=y))) >>> onset_bt_rms = librosa.onset.onset_backtrack(onset_raw, rms[0])
>>> # Plot the results >>> import matplotlib.pyplot as plt >>> plt.figure() >>> plt.subplot(2,1,1) >>> plt.plot(oenv, label='Onset strength') >>> plt.vlines(onset_raw, 0, oenv.max(), label='Raw onsets') >>> plt.vlines(onset_bt, 0, oenv.max(), label='Backtracked', color='r') >>> plt.legend(frameon=True, framealpha=0.75) >>> plt.subplot(2,1,2) >>> plt.plot(rms[0], label='RMS') >>> plt.vlines(onset_bt_rms, 0, rms.max(), label='Backtracked (RMS)', color='r') >>> plt.legend(frameon=True, framealpha=0.75) >>> plt.show()