Hiyve Components - v1.0.0
    Preparing search index...
    • Every way of placing one attack, likeliest first.

      The attack is tested against the next event, a few events ahead (skips), the current and previous events (a repeat or a step back) and the starts of the region and of the current and previous measures (jumps). A position is a candidate when at least minSupport of its notes were heard — except the next event, which is a candidate regardless once a tempo is known: a wrong note is still the next note. Each candidate costs its pitch mismatch plus a penalty for the move; leaving the attack unexplained (an extra) costs a gap. Following the performer, that is all: a note is right or wrong by its pitch, and the follower moves on. Under a set tempo a forward move also costs how far the attack fell from its beat, an extra costs up to a second gap when it fell right where the next event was due, and timing settles what pitch cannot. After a pause the timing term is dropped — the performer stopped, and where they resume is a matter of pitch — and jumps and steps back are cheaper. Once lostAfter attacks in a row have matched nothing nearby, the whole region is searched as well — but only once the performer has been found at all; a performer who starts in the middle of a piece should be given that region to follow. Stray attacks are paired with skipped events as wrong notes when a later attack reveals the skip.

      Under a set tempo (fixedFit) the clock replaces the running fit: timing is absolute, lateness is never a pause, there are no jumps back to the start of a bar, and the event whose beat is due is always a candidate, so a performer who stopped is picked up where they rejoin.

      In strict sequence (strictSequence) none of that applies: every attack is the next event, right or wrong — unless it only finishes the chord the performer is on — and the only other reading is a stray that came far too soon.

      The first entry is the follower's best guess; a caller that can wait for the next attack may hold the top few and let that attack choose between them (see LiveSession).

      Parameters

      Returns RankedDecision[]