def onset_detect(y=None, sr=<NUM_LIT>, onset_envelope=None, hop_length=<NUM_LIT>,<EOL>backtrack=False, energy=None,<EOL>units='<STR_LIT>', **kwargs):
<EOL>if onset_envelope is None:<EOL><INDENT>if y is None:<EOL><INDENT>raise ParameterError('<STR_LIT>')<EOL><DEDENT>onset_envelope = onset_strength(y=y, sr=sr, hop_length=hop_length)<EOL><DEDENT>onset_envelope -= onset_envelope.min()<EOL>if not onset_envelope.any():<EOL><INDENT>return np.array([], dtype=np.int)<EOL><DEDENT>onset_envelope /= onset_envelope.max()<EOL>kwargs.setdefault('<STR_LIT>', <NUM_LIT>*sr//hop_length)       <EOL>kwargs.setdefault('<STR_LIT>', <NUM_LIT>*sr//hop_length + <NUM_LIT:1>)  <EOL>kwargs.setdefault('<STR_LIT>', <NUM_LIT>*sr//hop_length)       <EOL>kwargs.setdefault('<STR_LIT>', <NUM_LIT>*sr//hop_length + <NUM_LIT:1>)  <EOL>kwargs.setdefault('<STR_LIT>', <NUM_LIT>*sr//hop_length)          <EOL>kwargs.setdefault('<STR_LIT>', <NUM_LIT>)<EOL>onsets = util.peak_pick(onset_envelope, **kwargs)<EOL>if backtrack:<EOL><INDENT>if energy is None:<EOL><INDENT>energy = onset_envelope<EOL><DEDENT>onsets = onset_backtrack(onsets, energy)<EOL><DEDENT>if units == '<STR_LIT>':<EOL><INDENT>pass<EOL><DEDENT>elif units == '<STR_LIT>':<EOL><INDENT>onsets = core.frames_to_samples(onsets, hop_length=hop_length)<EOL><DEDENT>elif units == '<STR_LIT:time>':<EOL><INDENT>onsets = core.frames_to_time(onsets, hop_length=hop_length, sr=sr)<EOL><DEDENT>else:<EOL><INDENT>raise ParameterError('<STR_LIT>'.format(units))<EOL><DEDENT>return onsets<EOL>
Basic onset detector.  Locate note onset events by picking peaks in an
    onset strength envelope.

    The `peak_pick` parameters were chosen by large-scale hyper-parameter
    optimization over the dataset provided by [1]_.

    .. [1] https://github.com/CPJKU/onset_db


    Parameters
    ----------
    y          : np.ndarray [shape=(n,)]
        audio time series

    sr         : number > 0 [scalar]
        sampling rate of `y`

    onset_envelope     : np.ndarray [shape=(m,)]
        (optional) pre-computed onset strength envelope

    hop_length : int > 0 [scalar]
        hop length (in samples)

    units : {'frames', 'samples', 'time'}
        The units to encode detected onset events in.
        By default, 'frames' are used.

    backtrack : bool
        If `True`, detected onset events are backtracked to the nearest
        preceding minimum of `energy`.

        This is primarily useful when using onsets as slice points for segmentation.

    energy : np.ndarray [shape=(m,)] (optional)
        An energy function to use for backtracking detected onset events.
        If none is provided, then `onset_envelope` is used.

    kwargs : additional keyword arguments
        Additional parameters for peak picking.

        See `librosa.util.peak_pick` for details.


    Returns
    -------

    onsets : np.ndarray [shape=(n_onsets,)]
        estimated positions of detected onsets, in whichever units
        are specified.  By default, frame indices.

        .. note::
            If no onset strength could be detected, onset_detect returns
            an empty list.


    Raises
    ------
    ParameterError
        if neither `y` nor `onsets` are provided

        or if `units` is not one of 'frames', 'samples', or 'time'

    See Also
    --------
    onset_strength : compute onset strength per-frame
    onset_backtrack : backtracking onset events
    librosa.util.peak_pick : pick peaks from a time series


    Examples
    --------
    Get onset times from a signal

    >>> y, sr = librosa.load(librosa.util.example_audio_file(),
    ...                      offset=30, duration=2.0)
    >>> onset_frames = librosa.onset.onset_detect(y=y, sr=sr)
    >>> librosa.frames_to_time(onset_frames, sr=sr)
    array([ 0.07 ,  0.395,  0.511,  0.627,  0.766,  0.975,
            1.207,  1.324,  1.44 ,  1.788,  1.881])

    Or use a pre-computed onset envelope

    >>> o_env = librosa.onset.onset_strength(y, sr=sr)
    >>> times = librosa.frames_to_time(np.arange(len(o_env)), sr=sr)
    >>> onset_frames = librosa.onset.onset_detect(onset_envelope=o_env, sr=sr)


    >>> import matplotlib.pyplot as plt
    >>> D = np.abs(librosa.stft(y))
    >>> plt.figure()
    >>> ax1 = plt.subplot(2, 1, 1)
    >>> librosa.display.specshow(librosa.amplitude_to_db(D, ref=np.max),
    ...                          x_axis='time', y_axis='log')
    >>> plt.title('Power spectrogram')
    >>> plt.subplot(2, 1, 2, sharex=ax1)
    >>> plt.plot(times, o_env, label='Onset strength')
    >>> plt.vlines(times[onset_frames], 0, o_env.max(), color='r', alpha=0.9,
    ...            linestyle='--', label='Onsets')
    >>> plt.axis('tight')
    >>> plt.legend(frameon=True, framealpha=0.75)