Keyboard shortcuts

Press ← or → to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

Pitch layer

analyze reads the pitch layer of a monophonic line after the notes step: the glides between notes, the pitch drop at the strike of a low note, and vibrato. The layer writes the pitch group of layers.json; the layer report page lists its fields. The tags are those of the pipeline page.

The glides and the vibrato read the f0 track. The drops read the sub-band line, because the track averages over a 93 ms frame and smears a drop that settles in 20 ms [fact]. With --notes the model does not run, but the f0 track still reads the stem, unless the notes play chords or are empty and the layer is skipped [fact].

Every figure below comes from generated signals at 22,050 Hz, unless it names another rate, through the transcriber’s notes and the f0 track of the release build [synthetic]. A real stem adds filters, reverb and separation artefacts.

What the layer reads

  • The voicing of the line. A line that plays chords gets values: null with the reason polyphonic_line and the flag chord_skipped: no method here separates the voices [fact]. The voicing comes from the notes step, or with --notes from the same chord rule applied to the given notes [fact]. That rule calls a part chords from a chord share of 0.68 [fact]. Real stems split into shares of 0.41 or less and 0.52 to 0.67, so a part at 0.52 to 0.67 runs this layer as a line; on those stems the layer read 1 false drop, 1 false glide and 4 glides an independent f0 confirmed [fact].
  • A stem without notes gets values: null with the reason no_note_list and the flag no_notes [fact].
  • Every time in the group is audio time from the start of the stem [fact].

The track’s lag

The tracker compares the first half of each centred frame with the samples one period later. A frame therefore reads the audio from a quarter frame before its centre to one period after it, so the track lags the audio by a quarter frame, 23.2 ms, less half a period [fact]. That is 18.7 ms at 110 Hz and 14.1 ms at 55 Hz [fact]. The layer subtracts the lag at the pitch it reads; a mono glide’s start then lands within 4 ms of the truth at 110 Hz [synthetic].

The sub-band line

  • A fourth-order Butterworth high-pass at 20 Hz and low-pass at 200 Hz keep the fundamental of a low note, each run forward and backward with the odd reflection of the analytic signal stage [fact].
  • The analytic signal of the band, zero-padded by its own length, gives the frequency between consecutive samples, [fact].
  • A centred median of samples, made odd, removes the phase spikes: 31 samples at 22,050 Hz, 63 at 44,100 Hz and 67 at 48,000 Hz [fact]. Near an end the window shrinks to the samples that exist, so the end is not pulled towards a padding value [fact].
  • The line matches SciPy’s sosfiltfilt, hilbert and a shrinking median on the same 808 tone within 3.2e-4 Hz, a relative 1e-5 [synthetic].
  • The analytic signal of a segment ripples at twice the tone near each cut end, by an amount that falls as one over the distance from the end [fact]. A steady 41.2 Hz sine reads its frequency within 0.01 Hz on average and within 0.5 Hz everywhere from 0.23 s inside each end [synthetic]. The layer keeps 0.1 s before the onset search and 0.5 s after the fit span [fact].
  • A tone switched on from silence overshoots the line too: by about 11 Hz at 3 ms after the onset, 1 to 4 Hz at 7 ms, and within 1 Hz by 30 ms, at 30 to 150 Hz [synthetic]. A plain 41.2 Hz tone reads 9.4 Hz high at 3 ms and 0.9 Hz high at 7 ms [synthetic].
  • The band keeps the fundamental only. When the second harmonic is stronger the line follows it; the drop then fails the weak-fundamental check below [fact].

Pitch drops

A drop is the fast fall of an 808 or a pluck from a higher start into its settled pitch.

  • Candidates. Each note whose pitch lies in 20 to 200 Hz is a candidate strike [fact, proposal for the rule].
  • Onset. The transcriber places the onset of a falling note late, by up to 230 ms on the rows below [synthetic]. The layer looks for the onset from 0.5 s before the note, or from where the previous note’s search ended, to 0.1 s after it [proposal]. The band envelope is averaged over a centred 10 ms; the onset is the first sample after its lowest point in that span where it reaches half the peak that follows [proposal]. When the lowest point already stands above half that peak, no attack lies inside the span and the note is no candidate [fact]. The average keeps a held saw from reading as a strike: its partials beat inside the band, so the raw envelope dips every period [synthetic]. A centred average leaves the midpoint of a step in place [fact]. A note that the transcriber splits off a held note, as under vibrato, has no attack and no candidate [fact].
  • Strike. The rise is the full-band RMS over the 20 ms after the onset against the RMS from 45 to 25 ms before it [fact]. A drop needs a rise of 6 dB when its is under 10 ms, when its fall starts at 200 Hz or above, or when the band envelope takes over 30 ms from 10 to 90 % of its peak; otherwise it needs no rise [proposal]. A drop with under 10 ms also needs an attack of 30 ms or less: the fall ends inside a slower attack, where the line wanders on the rising level [proposal]. On a real stem a fall with = 5.8 ms in the noise floor read an attack of 208 ms; of the generated drops, only a false one at a soft retrigger had both [fact, synthetic].
    • A saw falling from 220 Hz into the band raises the band envelope with no strike; without the rule its 4-semitone glide also read as a drop of 4.6 semitones [synthetic]. A 7-voice unison falling the same way reads an attack of 191 ms [synthetic].
    • Where a ringing tone restarts its phase, the line swings and fits a fast fall: a plain retriggered 808 read 32 semitones with of 4 ms [synthetic].
    • An 808 note struck while the one before still rings rises only by that note’s decay. With 0.4 s notes the rise is 9 to 10 dB at a decay of 0.3 s, 4 to 5 dB at 0.6 s, 2 to 3 dB at 1 s and under 1.5 dB at 2 s [synthetic]. Its drop starts near 100 Hz with an attack of 9 to 13 ms, so it needs no rise [synthetic].
    • The span before ends 25 ms early, since the band onset of white noise lags the start of the noise by 14 ms [synthetic].
  • Level. A strike whose RMS over the 20 ms after the onset lies more than 40 dB below the loudest 25 ms frame of the stem is no candidate, the gate of active frames [proposal]. On a real stem a fast fall settling on a note two octaves under the line read as a drop at -60 dB, where an independent f0 found no voice [fact]. A generated drop 60 dB below a loud passage reads none, 30 dB below it reads [synthetic]. A strike whose 20 to 200 Hz RMS over those 20 ms lies more than 18 dB below the loudest 25 ms frame of that band is no candidate either [proposal]. Checked against an independent IF on real stems, the drops of a line’s own low notes read 3 to 12 dB below the loudest passage of the band; two quiet falls under a louder line in the band read 22 and 28.5 dB below it, and the fall in the noise floor 33 dB [fact]. A generated drop 24 dB under an 87 Hz line reads none, 10 dB under it reads [synthetic].
  • Fit. is fitted by least squares to the line from 7 ms to 400 ms after the onset, or to the end of the note [fact]. For each the fit is linear in and ; a log grid of 240 points and a golden-section search find from 3.04 ms, where a tenth of the fall is left at 7 ms, , to 1 s [fact, proposal for the floor]. The fit matches SciPy’s least_squares with the same bounds within a relative 1.5e-6 [synthetic].
  • Fit start. From 3 ms the onset overshoot of the line reads as a fast fall: a plain 41.2 Hz tone with a 4 Hz drop fitted a drop of 9.9 semitones with = 3 ms [synthetic]. The fit starts at 7 ms [proposal].
  • Refit. A fit with under 10 ms, or after a strike that rises 20 dB, is fitted again on a line whose high-pass sits at 10 Hz, and the refit decides [proposal]. Where a tone below 40 Hz starts from silence or rises, the 20 Hz high-pass raises the line for about 10 ms, which fits as a fast fall; how far depends on the tone’s start phase [synthetic]. On first notes at 32.7 and 36.7 Hz, 6 of 162 random start phases read falls of 10 to 14 semitones with of 3 to 5 ms; on the 10 Hz line none does [synthetic]. The 10 Hz line everywhere loses 3 of 18 drops on ringing 808 lines, so slow fits keep the 20 Hz line [synthetic].
  • Residual. For a fit with of 10 ms or more, the error is averaged over half a period of before its RMS [proposal]. The third harmonic of a driven note beats with the fundamental and swings the line at twice the note; the average removes that swing and keeps a slower error, from a wrong model [fact]. A driven 808 drop left a raw residual of 23 % and fitted and within 1 % [synthetic]. Over a full period the average also hid the swing where a retrigger restarts the phase: two same-pitch retriggers read falls of 4 and 11 semitones with of 12 ms [synthetic]. A fall faster than 10 ms ends inside one period, and the average would spread its misfit, so it keeps the raw RMS [fact]. A fall whose spans 1.5 periods of or more changes little within one, so its error is averaged over a full period, which removes the swing of a second harmonic too [proposal]. A sweep into 32.7 Hz with = 90 ms and a second harmonic at half the fundamental failed on the residual with half a period and reads with a full one [synthetic].
  • Note line. A fit after a 6 dB strike that is no drop, by any test of the rule or because it settles on no note, is fitted again on a line whose low-pass sits at 1.5 times the note’s pitch, when that edge lies under 200 Hz, so the note sits under 133 Hz [proposal]. Below 66 Hz the second and third harmonics of a note lie inside the band [fact]. On a real sweep into 32.7 Hz the second to fourth harmonics sat 5 to 14 dB under the fundamental, the 20 to 200 Hz line swung from -144 to +83 Hz while the spectral peak fell smoothly from 69 Hz, and the fit’s residual was 2.5, against 0.15 [fact]. At 1.5 times the note the second harmonic falls 10 dB more, while a fall that starts higher stays the strongest component on its way down [fact]. A generated sweep of that shape with harmonics 3 to 8 dB under the fundamental settles near 62 Hz on the 20 to 200 Hz line, a fall of the wrong sign, and reads on the note line with within 1 Hz and within 20 % [synthetic]. Octave falls into 82.4 and 103.8 Hz whose second harmonic is as strong as the fundamental or 5.6 dB stronger settle 120 and 130 cents sharp on the 20 to 200 Hz line and read on the note line [synthetic]. Falls with = 12 ms into A1 and C2 fit on the bound of the search on both band lines and read on the note line [synthetic]. At 1.2 times the note a generated sweep into C1 with strong overtones read 24 % long and one struck again inside its note read none; at 3 times both read none [synthetic].
  • Note line span. The refit’s span ends one period of the note before the first point where the note line’s frequency falls to 0 Hz or below [proposal]. The phase of a line that holds one tone never runs backwards; it does where that tone breaks off and a second sound starts inside the same note, and the low-pass smears the break over about a period [fact]. A real sweep into 32.7 Hz was struck again 390 ms later inside the same note: the note line’s frequency fell to -39 Hz there, the fit over the whole 400 ms span missed on a residual of 0.24, and fits ending 200 to 300 ms after the onset read 32 Hz, a fall of 30.5 Hz and of 26 to 28 ms with a residual of 0.05 [fact]. A generated restrike of that shape reads within 1 Hz of the note; ending the span at the break itself read 30.1 Hz, outside the note [synthetic].
  • Note line tests. The refit counts when it passes every test of the rule, when its is 10 ms or more, and when its RMS envelope over the fall, from 7 ms to 5 , lies at most 6 dB below the line the first fit read [proposal]. A line low-passed under 70 Hz cannot follow a fall that ends within a period: generated kicks from 255 into 55 Hz with = 3 ms read a fifth of their fall with of 5 ms, and sub kicks over a held note read falls of 3 to 4 ms [synthetic]. Over the fall of four true drops on real stems the note line lay 2.2 to 3.8 dB below the band, and generated sweeps 2.2 to 3.6 dB [fact]. A tone at 127 Hz over a note at 61.7 Hz, with the note’s own tone entering 80 ms after the strike, lay 10.8 dB below: the note line held the upper tone 18 dB down and fell from it to the lower one as that entered, a step between two tones [fact]. Generated tones of that shape lie 4.8 to 7.6 dB under; the two in the tests, 6.6 and 7.3 dB, read as drops without the cap, so the margins are 2.2 dB under it and 0.6 dB over it [synthetic]. Without a strike the note line smooths the swing where a retriggered tone restarts its phase into a fall: three generated retriggers that rose 0.6 to 1.6 dB read one [synthetic].
  • Same strike. Each note’s onset search starts where the one before ended, and a strike on that border rises across it: the next search finds it again and reads it as a second drop [synthetic]. A search that starts inside that rise is lowest at its first sample, and a new strike dips inside the search first [fact]. So a search that starts on that border, before the drop read last has settled, five time constants after its onset, holds the same strike when its band envelope, averaged over two periods of the note, is lowest at its first sample [proposal].
    • The average. A second harmonic in the band beats with the fundamental and dips a 10 ms average by up to 12 dB [synthetic]. The test set is 456 generated sweeps into C1 [synthetic]. They have attacks of 3, 30 and 80 ms, of 30 and 60 ms and second harmonics of 0 to 1. The border lies 20 ms before to 70 ms into the strike. Over 10 ms, 21 of them read a second drop; over one period 5, over 1.5 periods 1 and over two none [synthetic]. Eight read no drop under every rule. Over three periods, 90 runs of 808 hits struck every 115 ms lost 2 of their 270 drops [synthetic].
    • Against a fixed span. An onset within 20 ms of the border read 47 of the 456 sweeps as two drops: an 80 ms attack crosses half its peak 22 to 35 ms after a border 5 to 15 ms in [synthetic]. 808 hits struck every 115 ms land 15 ms after their border. That span skipped 59 of their onsets and lost 15 of the 270 drops [synthetic]. Hits struck every 250 ms with drops of = 60 ms read three drops either way, where skipping every onset inside the settling read two [synthetic].
  • Rule. A drop counts when in semitones, , is above 2, when the fitted fall from 7 ms on, , is above 2 semitones too, and when the RMS residual is below 15 % of that fall [fact]. Both tests read the fall the fit span shows, not the one extrapolated to the onset [fact]. Against the extrapolated the residual misleads: on a 55 Hz tone with five harmonics, three of them inside the band, the line swings at the onset and the fit found = 0.7 ms with an extrapolated of 776 kHz, a residual of 0.003 % of it but 48 % of the fall from 7 ms on [synthetic].
  • Bounds. must lie above the floor of the search, and at most 36 semitones, three octaves [proposal]. A fit on the floor means the best fit lies below it [fact]. Retriggered 808 hits restart the sine’s phase and the line swings at each join: with the floor at 0.5 ms and no cap, five abutting hits at 43.65 Hz read falls of 141 and 152 semitones with of 0.7 ms [synthetic]. The line reads up to 200 Hz, so a fall from more than three octaves above a low note starts far outside the band and is extrapolated from its tail [fact].
  • Weak fundamental. After the fit, the medians of the half-octave bands around the note’s pitch and twice it are read from 50 ms after the onset or the note’s start, whichever is later, to 400 ms after the onset or the note’s end, whichever is earlier [fact, proposal for the window]. The window starts no earlier than the time the fitted pitch falls inside the band around : a slow sweep from 80 Hz into 32.7 Hz crosses the band around twice the note, and without that start a pure sine read as a weak fundamental [synthetic]. When the upper band exceeds the lower by a factor of 2, 6 dB, the line would follow the second harmonic: the layer fits nothing for that note and sets the flag weak_fundamental [proposal]. White noise reads the upper band 1.41 times the lower, since it is twice as wide [fact]. Below the factor a fit that reads the harmonic settles 1200 cents off the note and fails the settling rule [fact].
  • Settling. A drop also settles on a note. One note sounds at some point while the drop is settled, from five time constants after the onset to the end of the fit span. Its pitch lies within 100 cents of , and it starts 150 ms or less before the onset [proposal]. A note that started earlier belongs to a sound before the strike: on real stems a fit on the lead-in to a step settled on the note that had sounded for 790 ms, and a fit inside a chord on a note an octave below that had started 210 ms before [fact]. A generated fall into C1, found in the search of a higher note struck with it, settles on a C1 note that started 100 ms before the strike and on none that started 200 ms before [synthetic]. A C1 note that ends 46 ms after such a fall has settled takes the drop, and one that ends 34 ms before it does not [synthetic]. A slow fall not settled by the end of the span needs the note at its end: with = 90 ms on a 350 ms note, five time constants end after the note, and the sweep read as a glide from silence [synthetic]. At a saw’s onset several partials share the band and the line swings; on a generated 55 Hz saw that swing fitted a fall of 62 semitones with = 2 ms settling at 49.7 Hz, which this rule rejects [synthetic].
  • Skips. The summary line drop skips counts the low notes the search read no drop at, by the first gate that stopped each: no onset, settling, quiet, no strike, weak fundamental, no fall, tau on bound, residual and off note [fact].
  • Confidence. Low when the attack exceeds 30 ms: a slow swell is no strike [proposal]. High needs a residual below 5 %, of 10 ms or more and an attack of 12 ms or less, else medium [proposal]. The reasons are fit_residual and attack_time [fact].
    • The fit sees of the fall, a quarter at = 5 ms: kick drops with of 3 to 8 ms read from -31 to +25 % [synthetic].
    • During a slower attack the pitch falls before the onset, and reads low: by up to 30 % with a 10 ms ramp, 46 % with 20 ms and 73 % with 40 ms [synthetic]. The 10 ms average spreads a sharp strike to an attack of 9 to 11 ms, a 20 ms ramp to about 17.5 ms [synthetic].
    • On the generated sets, high-confidence drops read within 17 %, with one at -30 % (a 10 ms ramp on a 15 ms fall), within 8.3 % and within 0.1 Hz [synthetic].

Drops on an 808 tone, a sine times a 0.5 s amplitude decay, through the transcriber’s notes [synthetic]:

True / / Read Read Read
41.2 Hz / 41.2 Hz / 20 ms41.17 Hz37.57 Hz (-8.8 %)21.6 ms (+8.0 %)
41.2 Hz / 41.2 Hz / 50 ms41.15 Hz40.34 Hz (-2.1 %)51.3 ms (+2.6 %)
55 Hz / 165 Hz / 30 ms54.99 Hz156.34 Hz (-5.2 %)30.0 ms (0.0 %)
41.2 Hz / 13.8 Hz / 100 ms40.67 Hz13.20 Hz (-4.3 %)118.8 ms (+18.8 %)

The acceptance bounds are 1.5 Hz on , 25 % on , and 25 % on up to 50 ms, 40 % at 100 ms [fact]. White noise 30 dB below the tone’s peak keeps within 1 Hz and the drop accepted [synthetic].

The pYIN columns that #67 quotes are re-run in 67-drop-pyin.json: librosa 1.0.0 pYIN at frames 2048 and 4096, hop 128, on the same tones, and the same fit from 3 to 400 ms after the onset [synthetic]. Two of the eight rows reproduce within 0.1 Hz and 5 %, the 50 ms and the 100 ms rows at frame 2048 [synthetic]. At frame 2048 the 20 ms row reads 55 % high and 24 % short of the issue, and the 30 ms row 8.7 % low [synthetic]. At frame 4096 no row reproduces, but no field lies more than 5.7 % or 0.31 Hz off the issue [synthetic]. The smear shows in kind, not within the tolerance: the 20 ms drop reads 29.5 ms at frame 2048 and 76.0 ms at frame 4096, against the issue’s 72.3 ms there and 21.6 ms from the sub-band line [synthetic]. The Hilbert column, checked in sub-band-line.json, reproduces 1 of its 4 rows [fact].

Limits:

  • Drive and harmonics. tanh(4 x) puts the third harmonic, 124 Hz, inside the band, and a saw below 100 Hz its second and third. With the average, the drop of the 41.2 Hz row through tanh(4 x) reads 14 % low and 13 % long [synthetic]. A 12-semitone drop with = 30 ms on a driven sine at 41.2, 55 and 82.4 Hz reads within 0.7 semitones and 7 % on , at high confidence [synthetic]. On a saw the second harmonic swings the line at the note itself, which half a period does not average out, and no drop with under 1.5 periods is read [synthetic]. A second harmonic stronger than the fundamental takes the line: of 36 generated sweeps from silence with one 3.5 dB above it, none read [synthetic].
  • A fall under a louder line in the band, or under a louder passage of the same line, is not read 18 dB or more below it, so a soft note after loud ones loses its drop [fact].
  • A note above 200 Hz is not read: the band stops there [fact].
  • The note line helps only notes under 133 Hz, where 1.5 times the note lies under the top of the band [fact]. It runs only after a strike of 6 dB, so a fall that the band fit misses under a note still ringing at nearly its level stays lost [fact].
  • A tone an octave above the note, with the note’s own tone entering soon after it, can still read as a drop on the note line: generated tones of that shape whose note line lay 4.8 to 6 dB below the band read falls from the upper tone into the note [synthetic].
  • A true drop whose note started more than 150 ms before its onset, as when the transcriber merges a restrike into the note before it, is rejected [fact].
  • A kick at 55 Hz that decays over a quieter held sub at 43.6 Hz can read as a fall from the kick into the sub on the 20 to 200 Hz line, with of 17 to 40 ms [synthetic].
  • A kick with no pitch drop and a noise click, over a sub, reads a fast drop of 9 to 27 semitones at medium when it starts from silence, like a kick whose pitch drops [synthetic]. Inside the first period of the note the click and a fall of under 10 ms look alike; rejecting fast falls from silence would lose 26 true kick drops of the generated sets [synthetic].
  • A soft retrigger or an envelope dip on a low note mid-line can still read a false fast drop at medium: of 82 generated lines of that kind, one does with the transcriber’s notes, another with the given notes, 15 to 16 semitones with under 4 ms [synthetic].
  • A legato note, which follows the previous run with no fall of the band envelope, has no onset and no drop [fact].
  • A struck note whose band envelope does not dip first has no onset and no drop: with no release before it and a decay of 1 s or more, the dip of an 808’s 3 ms attack is lost in the 10 ms average [synthetic]. Of 18 drops on generated 808 lines with given notes, 14 read; the misses are those notes and a soft note after a loud one [synthetic]. Through the transcriber’s notes fewer read, since its onsets move the search [synthetic].
  • A fast drop, under 10 ms, after a ringing note needs a 6 dB strike, and a drop with a slow attack needs one too [fact].
  • Retriggered 808 hits at one pitch, with and without gaps, ringing or not, and 808 lines stepping up to 7 semitones report no drop with of 10 ms or more [synthetic]. A false fast drop, under 10 ms, needs a 6 dB strike and survives the refit on the 10 Hz line only where the limits above say [synthetic].

Glides

A glide is pitch moving from one stable pitch to another.

  • The track’s voiced frames, in cents, split into runs of consecutive voiced frames [fact].
  • Gaps. A run that starts within 100 ms of the one before joins it when the full-band RMS does not rise 6 dB in the gap, and the pitch keeps moving after the gap the way it jumped across it: by 20 cents or more over the jump and over the next two frames [proposal]. A unison whose voices start in phase beats hard enough to leave the track unvoiced for 75 ms inside a glide; read apart, the rest read as a glide from silence of 3.9 semitones for 7 [synthetic]. At a step between two notes the track goes unvoiced too, but lands on the new pitch and holds it, or swings back; at an 808 step the new strike raises the level [synthetic]. The jump across the gap must be 30 cents per millisecond or slower [proposal]: a 50 ms glide of 7 semitones jumps 20 across two unvoiced frames, the unison above 3.6 [synthetic]. On a real stem a note struck again 10 semitones lower, across three unvoiced frames, read as a glide; that is about 40 cents per millisecond [fact]. Nor is a gap bridged where the full-band RMS, over 10 ms, falls 20 dB below the 20 ms before or after it, or 40 dB below the loudest frame of the stem [proposal]: on real stems steps read as glides across a dip of 41 dB and at a noise floor of -60 dB [fact].
  • Steps across a gap. Two stable pitches with a bridged gap between them join no glide when the pitch jumps across the gap against the interval by 20 cents or more, or by more than 60 % of it [proposal]. A step and the settle after it keep moving the way the step jumped, at 5 to 17 cents per millisecond, so neither the slope limit nor the motion test tells them from a glide [fact]. On real stems steps of 3 to 10.5 semitones read so [fact]. A 2.1-semitone fall near 44 Hz on a real stem jumped 200 of its 210 cents across a gap while the level rose 17.5 dB, and reads none [fact]. Unison glides whose voices leave the track unvoiced for 75 ms jump 0.53 and 0.54 of the interval across the gap; a step between 808 notes jumped 0.72 [synthetic].
  • A stable pitch is a span of 50 ms or more whose smoothed pitch stays within 30 cents of its running mean and whose least-squares slope stays at 86 cents per second or less [proposal]. 86 cents per second is the floor of a published portamento detector, untuned [fact].
  • A glide joins two consecutive stable pitches 100 cents or more apart that each match a note within 50 cents, with the two notes of different pitch [proposal]. The note test keeps vibrato out, which the transcriber gives as notes of one pitch at ±35 cents [synthetic]. No glide is read on any vibrato signal below, ±35 or ±60 cents [synthetic].
  • The motion is the span between the middles of the two stable pitches where the slope of the 5-frame moving average, 29 ms, stays at 86 cents per second or more in the direction of the motion [fact]. Under 35 ms it is a step between notes [fact, proposal for 35 ms].
  • Then the fitted time decides with the same bounds: under 35 ms a step, from 35 to 90 ms a glide too short to read, counted and flagged glide_too_short, from 90 ms on a glide [proposal]. A fit off the curve bound that passes every test of a glide over a detected span of 35 to 90 ms reads as a glide at low confidence, and a motion whose fit fails over such a span is too short [proposal]. The 90 ms is the shortest transition of a published portamento detector, cited and untuned [fact]. On real stems a slide of a semitone over about 60 ms, clear in the spectrum, fell under it [fact]. Reading such fits changes no record of the generated sets [synthetic]. The track smears a step between two 808 notes over a detected span of 100 to 450 ms, while the fit finds the motion short [synthetic].
  • Fit. between the two stable pitches is fitted by least squares over the motion and 50 ms of each stable pitch, with the start, the full time and free [fact]. starts fast, starts slow, is linear in pitch [fact]. A grid of 9 powers, 8 times and 13 starts seeds a Nelder-Mead simplex; stays within 0.2 to 5 [fact].
  • Shape. A fit of 90 ms or more with within 5 % of 0.2, or with an RMS residual above 40 cents, does not follow the curve and is no glide [proposal]. The glides of the generated signals fit within 22 cents; the false glides at 808 steps sat on a bound of or fitted under 90 ms [synthetic].
  • Curve bound. An exponential (RC) portamento, , approaches its target slower than any power of the curve, so its sits on the upper bound of 5 [fact]. A fit within 5 % of that bound counts when its residual is 20 cents or less, its detected span lasts 90 ms or more, and it does not come from silence; it reads low with the reason curve_bound [proposal]. Without those conditions a melody step on a sine and two driven drops read as glides on the bound [synthetic].
  • Span ratio. A glide on the bound also needs a detected span of at most 2.5 times its fitted time [proposal]. The track smears a step into a fast curve on the bound and keeps drifting after it, so the slope stays up long after the fitted motion ends: 6.2 times its fitted time at the semitone step on one 808 oscillator that keeps its phase [synthetic], 2.9 and 9.1 at two steps on real stems that an independent f0 read as a step and as no slide [fact]. The RC slides of the tests read 0.77, 0.80 and 2.27 [synthetic]; 26 small slides of 1 to 2.1 semitones on real stems that the independent f0 confirmed in full or in part read 0.44 to 2.28 [fact]. The cut sits 10 % above the highest slide and 14 % below the lowest step, so the margin is thin on both sides [fact]. The level does not tell the two apart: at those real slides the full-band RMS over one period jumped 2.1 to 19 dB [fact]. An RC slide of 1.2 semitones at 110 Hz reads on the bound [synthetic]; one of a semitone reads 90 cents on the grid, under the 100-cent interval, and is not read [synthetic].
  • time_s is the full 0 to 100 % time [fact]. start_s is the fitted start less the track’s lag at the start pitch [fact].
  • From silence. When a voiced run starts above or below its first stable pitch by 100 cents or more, and the motion into it lasts 90 ms or more, the glide carries from_silence: true [fact]. A shorter motion from silence is neither read nor counted toward glide_too_short, which names a motion between two notes [fact]. The run must settle on that stable pitch [proposal]. Its median level lies within 40 dB of the loudest frame, the gate of active frames [fact]. And within half a period of 3 Hz, the slowest vibrato, the smoothed pitch does not swing back half the lead [proposal]. The motion after the first stable pitch is a step, and the window holds nothing, when the next stable pitch lies 100 cents or more away and matches another note, and the pitch, once past half the way to it, stays there up to that stable pitch and to the window’s end [proposal]. A wobble’s crest can match a neighbouring note, but the pitch comes back from it [synthetic]. When two notes match a stable pitch, the nearest one counts [proposal]. The end of the transcribed note does not cut the window: on real stems the transcriber ended a wobbling note inside its first trough [fact]. A step to a pitch that no transcribed note matches counts as a swing back, since a wobble’s crest matches none either [proposal]. On real stems a wobble of ±60 cents at 6 to 7 Hz read its first half-cycle as a fall from silence, coming back 82 % of its lead [fact]. A quiet onset after digital silence read one into a stable pitch at -41.9 dB, 1.9 dB past the gate [fact]. True falls there came back 0 and 24 % and settled at -16 and -9 dB [fact]. Generated falls that swing back or settle at -42 dB read none [synthetic]. So does a wobble whose note ends inside its first stable pitch, and one at 6 to 7 Hz with a neighbouring note at its crest [synthetic]. One that rebounds a quarter or 45 % of its lead reads [synthetic]. So does one that steps to the next note 30 ms after the stable pitch, with the first note ending at the step’s start, 20 ms into it or after it, and one that slides there over 80 to 400 ms [synthetic]. A generated fall from 150 Hz into 50 Hz with = 40 ms under a 300 ms attack fails the strike rule as a drop [synthetic]. It reads as a fall from silence at medium, 14.6 of its 19.0 semitones: it starts near 116 Hz, where the fall stands 17 ms after the onset [synthetic]. The sound must start up to 100 ms before the run: the full-band RMS over 30 ms rises 20 dB above the RMS from 60 to 30 ms before, searched in 5 ms steps [proposal]. The track voices a run some frames after the sound starts, and a beating unison dips without falling silent [synthetic]. The run’s first frame fixes the start and the fit also finds the start pitch [fact]. A run that starts within 0.2 s of an accepted drop is the drop, not a glide [proposal].
  • Confidence. The reasons are the motion span, the RMS residual of the fit in cents and the jitter: the RMS deviation of the two stable pitches from their medians, and curve_bound [fact]. High needs a residual of 15 cents or less, a jitter of 3 cents or less, a motion of 150 ms or more and of 3 or less; low comes with a jitter above 3.4 cents, a curve on the bound or a detected span under 90 ms [proposal].
    • A faster start reads its rise less well: on the generated sets, up to 11 % off at 4.4, while high-confidence glides read their rise within 7.1 % [synthetic].
    • A unison beats and the track wanders on the stable pitches, but the jitter tells a unison only roughly. On a larger generated set the unison glides jitter 3.77 to 7.07 cents at 22.05 kHz and 3.45 to 6.93 at 44.1 kHz, the mono ones 0.66 to 8.03 at both rates; one unison sets the 3.45, 0.05 cents over the cut [synthetic]. In the committed fixtures the unison glides jitter 3.54 cents or more, 0.14 over the cut, and no glide falls from 3 to 3.4 cents [synthetic]. All unison glides read low; from 3 to 3.4 cents only mono glides fall, and they read medium, and a mono glide above 3.4 cents reads low too [synthetic]. One threshold would raise those mono glides to high on no measured gain, so the two stay [proposal].

Glides of 7 semitones up from 110 Hz on a band-limited saw, 0.5 s holds [synthetic]. The rise is the 10 to 90 % time derived from the fitted time and , with ; its error is against the true rise:

GlideVoicesRead timeRead Rise errorConfidence
150 ms, 11151 ms1.02+0.3 %high
150 ms, 2.51156 ms2.53+3.6 %high
400 ms, 11396 ms1.01-1.3 %high
400 ms, 2.51387 ms2.41-1.2 %high
150 ms, 17, ±25 ct158 ms1.05+4.2 %low
150 ms, 2.57, ±25 ct133 ms1.83+4.4 %low
400 ms, 17, ±25 ct405 ms1.02+1.0 %low
400 ms, 2.57, ±25 ct411 ms2.45+3.8 %low
200 ms, 17, ±25 ct202 ms1.00+1.0 %low
200 ms, 17 in phase206 ms0.93+4.4 %low
300 ms, 17 in phase304 ms1.00+1.3 %low
300 ms, 2.57 in phase375 ms3.32+4.5 %low
200 ms, 2.57 in phasenone
50 ms, 1 or 2.51none, too short
step1none, no flag

The #66 table measured the 10 to 90 % span straight off a librosa pYIN track. 66-glide.json re-runs it on these signals with librosa 1.0.0 at frame 2048, hop 128, fmin 30 Hz and fmax 400 Hz [synthetic]. Every true span reproduces within 0.5 ms, the issue’s rounding [synthetic]. Five of the 6 mono figures reproduce within one hop, 5.80 ms; two of them pass only just, 5.78 and 5.54 ms off [synthetic]. The 50 ms fast-start glide is lost: its first frame at or above 10 % already stands at 90 %, where the issue read 6 ms [synthetic]. Of the unison figures only two reproduce: the 50 ms fast start, lost, and the 400 ms fast start [synthetic]. On this unison librosa reads the linear glides like the mono ones, 116 and 319 ms against the issue’s 134 and 331 ms, the 50 ms linear glide at 29 ms against lost, and the 150 ms fast start at 11.6 ms against 58 ms [synthetic]. The unison’s start phases decide it: over 20 seeds the 150 ms linear glide reads 104.5 to 133.5 ms, the 150 ms fast start 11.6 to 98.7 ms and the 400 ms linear glide 307.7 to 336.7 ms, and the 50 ms glides are lost on 6 and 17 of the seeds [synthetic]. Every unison figure of the issue lies within one hop of some seed’s reading [synthetic]. #66 gives no unison phases, so its unison figures hold for its own signal only [fact]. This track fits the curve instead: it reads the rise of every 150 and 400 ms glide within 4.4 %, that 150 ms fast-start unison included, and no glide at 50 ms [synthetic].

The acceptance bound is 5 % on the rise from 150 ms on, mono [fact]. The mono interval reads 6.9 semitones for 7: the track’s 10-cent bins round the start 5 cents up and the end 5 cents down [synthetic]. The fast-start unison at 150 ms reads its rise within 4.4 % but its at 1.83, and its time 11 % short; the low confidence says so [synthetic]. “In phase” voices start at phase 0, so the unison beats hardest [fact].

Other glides, mono [synthetic]:

GlideRead
220 Hz down 4 semitones, 200 ms, 2.5-4.00 st, 184 ms, 2.26, rise -2.3 %, high; no drop
82.4 Hz up 5 semitones, 50 msnone, too short (fitted 61 ms)
220 Hz down 4 semitones, 50 msnone, too short (fitted 43 ms), no drop
From silence into 82.4 Hz, up 5 semitones, 150 ms, 1+4.70 st, 150 ms, 0.85, rise +1.9 %, low
From silence into 82.4 Hz, up 5 semitones, 300 ms, 2.5+4.48 st, 252 ms, 1.74, rise +1.0 %, low
808 lines stepping up to 7 semitones, legato, driven or staccatonone
RC portamento from 110 Hz up 7 semitones, 50 ms+6.9 st, 5.00, low, curve_bound
RC portamento from 196 Hz down 5 semitones, 80 ms-5.0 st, 5.00, low, curve_bound

The track’s first frames of a tone read low, so a glide from silence reads its interval up to 0.6 semitones short [synthetic]. Of 16 generated RC glides, 30 to 120 ms at 110 to 247 Hz, all read, at low confidence [synthetic].

Limits:

  • A fall from silence whose stable pitch sits just past the 40 dB gate is not read: on real stems a fall of about 1.4 semitones over 200 ms, in which the first three partials all fall, settled at -40.9 dB and was lost [fact].
  • A glide that the transcriber merges into one note, with its two ends in one note, is not read [fact].
  • A fall from silence followed within 167 ms by a step back toward its start, to a pitch that no transcribed note matches, reads as a swing back and is lost [synthetic]. So is one whose portamento to the next note stalls under half the way for 100 ms: the stall forms its own stable pitch, which no note matches; a stall of 60 ms reads [synthetic]. So is one followed by a move back toward its start of under 100 cents to another note, past half the lead [synthetic]. A wobble at 3 to 4 Hz whose crest matches a neighbouring note still reads as a fall from silence: the crest comes at the window’s end, and the pitch returns after it [synthetic]. Of 49 generated wobbles of ±40 to ±70 cents at 3 to 8 Hz with the neighbour sounding, 10 read, all at 3 or 4 Hz [synthetic].
  • A step between two 808 notes can raise glide_too_short when the fit finds 35 to 90 ms: one of three generated 808 lines does [synthetic].
  • A vibrato of ±100 cents at 3 Hz holds each extreme long enough to read as a stable pitch, and its swings read as glides of 1.9 semitones, each at low confidence [synthetic].
  • An 808 slide reads low: its stable pitches jitter like a unison’s [synthetic].
  • A falling slide of 7 semitones from 49 Hz is not read [synthetic].
  • A glide inside chords has no method here [fact].
  • Short glides of 1 to 3 semitones on real stems mostly read low, yet an independent f0 confirmed most of them: their confidence is pessimistic [fact].
  • A slide on the bound whose track keeps drifting for over 2.5 times its fitted time is not read: a 2-semitone slide near 69 Hz on a real stem, which an independent f0 confirmed, drifted for 4.3 times its fitted time [fact].
  • Where the tracker reads a tone’s second harmonic, a glide still reads its interval: on a real stem a tone rose 2.2 semitones from 921 Hz, the track followed its second harmonic from 1845 to 2100 Hz, and the glide read +2.0 semitones [fact]. An independent f0 that jumped to another source there read a step [fact].
  • A glide that moves more than 60 % of its interval inside an unvoiced gap is not read: a 7-voice unison with a fast start jumped 0.76 of it across 75 ms [synthetic].

Vibrato

  • Spans. The voiced runs of the track split where two stable pitches lie 150 cents or more apart, so a step between notes never reads as a vibrato, while a vibrato of ±60 cents, whose stable pitches lie 120 cents apart, stays whole [proposal]. Each span loses 50 ms at each end and the frames where a glide moves [fact]. A drop inside a span splits it: the part before ends 50 ms before the onset, and the part after starts once the drop has settled, five time constants, at least 100 ms [fact]. A generated vibrato on A1, restruck mid-span with a fast drop the track does not show, reads before the drop; starting the whole span after the settling left 0.38 s, under the 0.5 s the search reads [synthetic]. A generated octave drop into A1 with = 60 ms, then a vibrato, reads that vibrato; skipping only 100 ms left a fifth of the fall in the span, and the search read none [synthetic].
  • A glide moves where its fitted curve lies more than 10 cents, the smallest extent of a vibrato, from both its pitches [proposal]. A curve on the upper bound of comes within 3 % of its interval of its end halfway through its time [fact]. On a real stem a vibrato of 3.1 cycles at 5.9 Hz began where a 1.8-semitone glide on that bound ended; held for the glide’s full fitted time of 122 ms, its span after the trim fell from 0.53 to 0.47 s, under the 0.5 s the search reads [fact]. A generated glide and vibrato of that shape keep the vibrato [synthetic].
  • A span of 0.5 s or more is searched [fact]. A least-squares line and sine are fitted together at each rate from 1 Hz, or 1.5 cycles over the span, to 20 Hz in 0.01 Hz steps; the rate whose sine explains the most power beyond the line wins, refined by golden-section search [fact]. Fitting the line and the sine together keeps a sine over a fraction of a cycle from leaking into the line [fact].
  • extent_raw_ct is the sine’s amplitude, half the peak-to-peak swing [fact]. share is the power the sine explains over the power left after the line alone [fact]. The power it explains is the line’s residual less that of the line and sine fitted together [fact]. The sine term alone can share power with the line: a 20-cent sine over three cycles under 20.6 cents of noise read a share of 0.524 that way and 0.490 by the residuals [synthetic]. On the generated sets the residuals drop 4 false vibratos of 26 and keep every true one [synthetic].
  • Rule. A vibrato counts at 3 to 12 Hz with 1 % slack, an extent of 10 cents or more after the correction, a share of 0.5 or more and 2.5 cycles or more over the span [fact, proposal for the share and the cycles]. Checked against an independent f0 on real stems, every vibrato of 2.5 cycles or more matched it; the shorter ones, 1.6 to 2.4 cycles at 3 to 4.7 Hz over spans of 0.5 to 0.8 s, did not, or matched under 2 cycles [fact]. Through the track the rates below read within 0.8 % of the truth, so the slack keeps a vibrato at either edge [synthetic].
  • Correction. The track’s 93 ms frame smooths a fast swing, so the raw extent falls with the rate [synthetic]. extent_factor is one over the share of the true extent the track reads, interpolated linearly between the measured rates and held at the ends [fact]. extent_ct is extent_raw_ct times extent_factor [fact].
  • Confidence. Low when the kurtosis of the contour after the line, its fourth moment over the squared second, is below 1.25: a sine reads 1.5, a square wave 1.0 [fact, proposal for 1.25]. Low too on a pitch below 100 Hz [proposal]. Else high with 4 cycles or more in the span, else medium [proposal]. The generated vibratos read a kurtosis of 1.36 to 1.66, a semitone trill at 6 Hz 1.06 [synthetic].
    • On real stems every vibrato above 100 Hz with 4 cycles or more matched an independent f0 [fact]. The 23 vibratos the independent f0 found plausible read a share of 0.502 to 0.838: the 12 of them at high 0.502 to 0.630, the 10 at medium 0.519 to 0.838 and the one at low 0.575. The 12 vibratos it did not find plausible read 0.501 to 0.734, so the share does not tell the two groups apart [fact]. None read under 0.5: the lowest, 0.501, sits at the threshold, so the margin there is nil [fact].
    • Below 100 Hz few matched, and the extent read up to 5 times too wide [fact]. A generated low saw with amplitude modulation, two beating voices or none reads no vibrato, and one with a ±30-cent vibrato reads it within 2 cents down to 41 Hz, so the cause is not known [synthetic].

The share of the true extent the track reads, on one 1 s mono saw at 220 Hz with ±35 cents per rate [synthetic]:

Rate (Hz)3455.56781012
Share1.0030.9730.9440.9390.9090.8120.8170.8000.732

Each share comes from one signal, so the table carries that signal’s quantisation to the track’s 10-cent bins: 7 Hz reads lower than 8 Hz [synthetic]. The share belongs to this track: another pYIN implementation at another frequency ceiling reads another share [fact].

The #67 figures are re-run in 67-vibrato.json: librosa 1.0.0 pYIN at frame 2048, hop 128, fmin 30 Hz and fmax 400 Hz on the signals below, and the FFT peak of the detrended cents over the tone less 50 ms at each end, 0.9 s [synthetic]. The table reads the extent as the amplitude of the sine at that peak [fact]. #67 defines the extent as half the peak-to-peak span, which equals that amplitude only for a clean sine [fact]. With the amplitude, the ±35-cent mono saw reproduces the issue: 5.50 Hz and 23.98 cents, a share of 0.685 against 0.69 [synthetic]. Half its peak-to-peak span reads 20.40 cents, a share of 0.58, which does not [synthetic]. This track reads the same saw at a share of 0.939 [synthetic]. The unison and ±60-cent rates read 5.47 and 5.49 Hz against the issue’s 5.49 and 5.53 Hz, 0.3 % and 0.7 % low [synthetic]. Over windows of 0.5 to 1 s they read 5.43 to 5.48 Hz and 5.46 to 5.49 Hz, so neither figure lies in its range [synthetic]. The librosa share moves with depth and voices: 0.621 on the unison, 0.782 at ±60 cents [synthetic]. On the unison half the peak-to-peak span reads 29.63 cents against an amplitude of 21.73 [synthetic].

This track reads:

CaseRead rateRead extent
5.5 Hz, ±35 ct, mono5.51 Hz35.0 ct
5.5 Hz, ±35 ct, 7 voices over ±25 ct5.49 Hz33.5 ct
5.5 Hz, ±60 ct, mono5.51 Hz60.8 ct
2 Hz, 15 Hz, or 5 ctnone

The acceptance bounds are 0.1 Hz on the rate and 15 % on the extent after the correction [fact]. The correction is measured at ±35 cents only; the ±60 case reads 1.4 % high with it, and ±25 cents at 9 Hz reads 11 to 14 % low [synthetic].

Limits:

  • A trill between two notes a semitone apart at a vibrato rate reads as a vibrato, since its stable pitches lie 100 cents apart, but at low confidence: its contour jumps between two levels [fact].
  • From 4.5 Hz the transcriber gives a ±100-cent vibrato as overlapping notes, the line reads as chords, and the layer is skipped [synthetic].
  • A vibrato whose depth ramps in over the span reads its extent 9 to 51 % low, since the sine averages the ramp [synthetic].
  • A vibrato of 3.5 Hz over 0.7 s holds 2.2 cycles and is not read [synthetic].
  • A triangle LFO reads its extent 20 to 26 % low at high confidence: the fitted sine holds of a triangle’s amplitude, and the extent is the sine’s [fact, synthetic for the range].
  • A vibrato whose rate sweeps from 4 to 6 Hz reads no vibrato [synthetic].
  • A vibrato that starts late in a note is diluted by the steady part before it [fact].

Sources