pub enum ReasonCode {
Show 43 variants
ActiveFrames,
TooFewNotes,
OctaveUncertain,
SilentStem,
OneChannel,
NoNoteList,
CyclesInSpan,
HardLimited,
StereoBlindSpot,
BandEdgeDrop,
LineProminence,
TooFewFrames,
NoBandEdge,
TempoPeak,
BeatPeriodicity,
SparsePeriodicity,
OnsetSharpness,
OnsetsPerBeat,
BpmExact,
VoicedFrames,
PolyphonicLine,
MotionSpan,
FitResidual,
PitchJitter,
SineShare,
ContourKurtosis,
AttackTime,
CurveBound,
NoteFrames,
RelativeSpread,
UpperBoundShare,
CountAgreement,
AttackHidesJoin,
NoAttackRead,
LevelKeptAtJoin,
StemEdgeAtJoin,
TailWeight,
TailLight,
TailResidual,
TailSmooth,
TailBand,
TailWobble,
ZeroMedian,
}Expand description
Why an estimator chose its level, or why it made no estimate.
Each code is a stable snake_case identifier in the report. Each
estimator adds the codes of its own signals here.
Variants§
ActiveFrames
The number of analysis frames with signal above the noise floor.
TooFewNotes
Too few notes to fit the value.
OctaveUncertain
The pitch may be an octave off.
SilentStem
The stem is digital silence.
OneChannel
The file has one channel, so no stereo value exists.
NoNoteList
No note list was given, so a value that needs the f0 has none.
CyclesInSpan
The number of full cycles of a rate in the span. Below two, no rate is reported.
HardLimited
The stem is flat-topped at its peak, so its level and crest are capped by a limiter or by clipping.
StereoBlindSpot
The stereo screen cannot see an anti-phase stereo chorus or a light reverb.
BandEdgeDrop
The steepest fall of the smoothed spectrum over one semitone above 2 kHz, in dB. Below the steep-drop threshold the band edge comes from the margin rule.
LineProminence
The strongest line of a modulation scan over the median magnitude of the scan. Below the prominence threshold no rate is reported.
TooFewFrames
Fewer active frames than a statistic over frames needs; the value is the minimum.
NoBandEdge
No bin of the spectrum above 1 kHz rises the band-edge margin above its floor, so the band edge is the Nyquist frequency at low confidence.
TempoPeak
The best score of the tempo search over its median score. Below the trust threshold the given tempo stays; 0 when the stem has no onsets.
BeatPeriodicity
The share of the onset strength that repeats at the refined beat: the best score of the tempo search over its lag count times the zero-lag autocorrelation. Below the trust threshold the given tempo stays.
SparsePeriodicity
The share of the onset strength that repeats every 2 or every 4
refined beats, the better of the two, as Self::BeatPeriodicity
reads it on those lags alone. Onsets on every other beat or once a
bar read near 1. It trusts a sparse part when the beat periodicity
does not; 0 when the stem holds too few beats for it. At most 1.
OnsetSharpness
The share of the energy of the raw onset strength, before its low-pass, within 25 ms of its peaks. Hits and plucks read near 1; a swell, such as a pad under a slow tremolo, reads low. A refined tempo is trusted only with sharp onsets.
OnsetsPerBeat
The peaks of the onset strength per beat of the slowest tempo searched. The sparse periodicity trusts a tempo only for a part this sparse, because a dense grid, such as sixteenth notes, lines up with any spacing that is a whole number of its steps.
BpmExact
--bpm-exact was given, so the tempo was not refined.
VoicedFrames
The number of voiced frames of the f0 track.
PolyphonicLine
The line plays chords, so a method for one voice at a time made no estimate.
MotionSpan
How long a pitch motion moved faster than the glide floor, in seconds. A short motion reads a glide’s time less well.
FitResidual
The RMS residual of a fit: in cents for a glide, as a share of the drop for a pitch drop.
PitchJitter
The RMS deviation of the stable pitches around a glide from their medians, in cents. A unison beats and the track wanders, which skews the glide’s time.
The share of a contour’s power that a fitted sine explains.
ContourKurtosis
The kurtosis of a vibrato’s contour after its line, the fourth moment over the squared second: 1.5 for a sine, 1.0 for a square wave such as a trill between two notes.
AttackTime
The time the band envelope of a strike takes from 10 % to 90 % of its peak, in seconds. A slow attack hides the start of a pitch drop.
CurveBound
A glide’s fitted curve power sits on the upper bound of its range: an exponential approach, read with less certainty.
NoteFrames
The share of the track frames inside the notes that are voiced within 100 cents of a sounding note. Noise or DC under a note list reads near 0.
RelativeSpread
The interquartile range of a value over the notes, divided by the absolute value of its median. Above 0.5 the notes disagree too much for a preset.
The share of the pooled notes whose attack is an upper bound: its rise is shorter than 1.5 RMS windows, or for an overlapping note twice the rise of its band filter on an instant step.
CountAgreement
The share of the held time whose count of voices agrees with the verdict.
AttackHidesJoin
The stem’s attack is long enough to hide a retrigger.
NoAttackRead
No attack was read, so a retrigger it hides cannot be ruled out.
LevelKeptAtJoin
The level holds through a join, which a retrigger with an instant attack does too.
StemEdgeAtJoin
The stem’s edge reaches a level window beside a join, so a level is unread or short.
TailWeight
The tail weighs too much at the note-off for a release to be identified.
TailLight
The tail weighs too little at the note-off to show an RT60: a dry note often leaves a little weight whose RT60 is noise.
TailResidual
The tail model fits too poorly for a release to be identified.
TailSmooth
A heavy tail fits too smoothly for a reverb: it reads as the note’s own exponential release, not as a space.
TailBand
The tail fades faster than the note’s band filter can show.
TailWobble
The level wobbles over the hold and the tail fits poorly, as under a tremolo, so a written release reads low.
ZeroMedian
The interquartile range of a value over the notes whose median is 0, so the range has no ratio to the median. The value reads low.
Trait Implementations§
Source§impl Clone for ReasonCode
impl Clone for ReasonCode
impl Copy for ReasonCode
Source§impl Debug for ReasonCode
impl Debug for ReasonCode
Source§impl<'de> Deserialize<'de> for ReasonCode
impl<'de> Deserialize<'de> for ReasonCode
Source§fn deserialize<__D>(__deserializer: __D) -> Result<Self, __D::Error>where
__D: Deserializer<'de>,
fn deserialize<__D>(__deserializer: __D) -> Result<Self, __D::Error>where
__D: Deserializer<'de>,
impl Eq for ReasonCode
Source§impl Hash for ReasonCode
impl Hash for ReasonCode
Source§impl PartialEq for ReasonCode
impl PartialEq for ReasonCode
Source§impl Serialize for ReasonCode
impl Serialize for ReasonCode
impl StructuralPartialEq for ReasonCode
Auto Trait Implementations§
impl Freeze for ReasonCode
impl RefUnwindSafe for ReasonCode
impl Send for ReasonCode
impl Sync for ReasonCode
impl Unpin for ReasonCode
impl UnsafeUnpin for ReasonCode
impl UnwindSafe for ReasonCode
Blanket Implementations§
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
impl<ST, DT> CastableFrom<ST, Initialized, Initialized> for DT
impl<ST, DT> CastableFrom<ST, Uninit, Uninit> for DT
impl<T> CloneAny for T
Source§impl<T> CloneToUninit for Twhere
T: Clone,
impl<T> CloneToUninit for Twhere
T: Clone,
impl<T> DeserializeOwned for Twhere
T: for<'de> Deserialize<'de>,
§impl<T> Downcast for Twhere
T: Any,
impl<T> Downcast for Twhere
T: Any,
§fn into_any(self: Box<T>) -> Box<dyn Any>
fn into_any(self: Box<T>) -> Box<dyn Any>
Box<dyn Trait> (where Trait: Downcast) to Box<dyn Any>, which can then be
downcast into Box<dyn ConcreteType> where ConcreteType implements Trait.§fn into_any_rc(self: Rc<T>) -> Rc<dyn Any>
fn into_any_rc(self: Rc<T>) -> Rc<dyn Any>
Rc<Trait> (where Trait: Downcast) to Rc<Any>, which can then be further
downcast into Rc<ConcreteType> where ConcreteType implements Trait.§fn as_any(&self) -> &(dyn Any + 'static)
fn as_any(&self) -> &(dyn Any + 'static)
&Trait (where Trait: Downcast) to &Any. This is needed since Rust cannot
generate &Any’s vtable from &Trait’s.§fn as_any_mut(&mut self) -> &mut (dyn Any + 'static)
fn as_any_mut(&mut self) -> &mut (dyn Any + 'static)
&mut Trait (where Trait: Downcast) to &Any. This is needed since Rust cannot
generate &mut Any’s vtable from &mut Trait’s.§impl<T> DowncastSend for T
impl<T> DowncastSend for T
§impl<T> DowncastSync for T
impl<T> DowncastSync for T
§impl<Q, K> Equivalent<K> for Q
impl<Q, K> Equivalent<K> for Q
§fn equivalent(&self, key: &K) -> bool
fn equivalent(&self, key: &K) -> bool
§impl<Q, K> Equivalent<K> for Q
impl<Q, K> Equivalent<K> for Q
§fn equivalent(&self, key: &K) -> bool
fn equivalent(&self, key: &K) -> bool
key and return true if they are equal.§impl<Q, K> Equivalent<K> for Q
impl<Q, K> Equivalent<K> for Q
§fn equivalent(&self, key: &K) -> bool
fn equivalent(&self, key: &K) -> bool
Source§impl<T> IntoEither for T
impl<T> IntoEither for T
Source§fn into_either(self, into_left: bool) -> Either<Self, Self> ⓘ
fn into_either(self, into_left: bool) -> Either<Self, Self> ⓘ
self into a Left variant of Either<Self, Self>
if into_left is true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read moreSource§fn into_either_with<F>(self, into_left: F) -> Either<Self, Self> ⓘ
fn into_either_with<F>(self, into_left: F) -> Either<Self, Self> ⓘ
self into a Left variant of Either<Self, Self>
if into_left(&self) returns true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read more