in basic_pitch/note_creation.py [0:0]
def get_infered_onsets(onsets: np.array, frames: np.array, n_diff: int = 2) -> np.array:
"""Infer onsets from large changes in frame amplitudes.
Args:
onsets: Array of note onset predictions.
frames: Audio frames.
n_diff: Differences used to detect onsets.
Returns:
The maximum between the predicted onsets and its differences.
"""
diffs = []
for n in range(1, n_diff + 1):
frames_appended = np.concatenate([np.zeros((n, frames.shape[1])), frames])
diffs.append(frames_appended[n:, :] - frames_appended[:-n, :])
frame_diff = np.min(diffs, axis=0)
frame_diff[frame_diff < 0] = 0
frame_diff[:n_diff, :] = 0
frame_diff = np.max(onsets) * frame_diff / np.max(frame_diff) # rescale to have the same max as onsets
max_onsets_diff = np.max([onsets, frame_diff], axis=0) # use the max of the predicted onsets and the differences
return max_onsets_diff