Validate and stable-sort note events once, then expose onset and active-note
lookups that cost O(log n + k), where k is how many notes share the onset
the answer comes from. Non-positive-duration notes may be retained for
callers that intentionally filter them later, but never count as sounding.
Validate and stable-sort note events once, then expose onset and active-note lookups that cost
O(log n + k), wherekis how many notes share the onset the answer comes from. Non-positive-duration notes may be retained for callers that intentionally filter them later, but never count as sounding.