pub struct StemLevels<'a> { /* private fields */ }Expand description
The stem’s level in QUIET_FRAME frames at its own rate, with a
quarter-frame hop, frame m centred at m hops. The quiet-note guard,
the attack split and the split join read the same frames.
Implementations§
Source§impl<'a> StemLevels<'a>
impl<'a> StemLevels<'a>
Sourcepub fn new(mono: &'a [f64], rate: SampleRate) -> Self
pub fn new(mono: &'a [f64], rate: SampleRate) -> Self
Measures the RMS of every frame of mono at rate.
Sourcepub fn envelope(&self, time: Seconds, window: Seconds) -> f64
pub fn envelope(&self, time: Seconds, window: Seconds) -> f64
Returns the RMS about its own mean of the window of samples
centred at time: the envelope with any DC offset removed. Samples
outside the stem count as silence.
Sourcepub fn frames_between(&self, from: Seconds, to: Seconds) -> Range<usize> ⓘ
pub fn frames_between(&self, from: Seconds, to: Seconds) -> Range<usize> ⓘ
Returns the frames centred from from to to, both included.
Sourcepub fn harmonic_level(&self, frame: usize, pitch: MidiPitch) -> f64
pub fn harmonic_level(&self, frame: usize, pitch: MidiPitch) -> f64
Returns the level of frame frame at the first HARMONICS
harmonics of pitch below the Nyquist frequency: the root of the
summed power of each, from a Hann window over the frame with the
frame’s mean removed. Samples outside the stem count as silence.
The window’s main lobe spans 160 Hz, so below about A2 (110 Hz) it cannot tell a note’s fundamental from a tone a fifth or a tritone away.
Sourcepub fn fundamental_level(&self, time: Seconds, pitch: MidiPitch) -> f64
pub fn fundamental_level(&self, time: Seconds, pitch: MidiPitch) -> f64
Returns the level at the fundamental of pitch of the one period of
samples centred at time, with their mean removed: one DFT bin over
the period, unnormalised, so only ratios of two readings mean
anything. The bin’s zeros fall on every harmonic of the note when
the period is a whole number of samples. It is rounded to one, so at
22,050 Hz and at the worst phase a harmonic leaks about -70 dB at
A1, -46 to -50 dB from A2 to A5, -23 dB at A6 and -17 dB at A7. The
bin rejects only the note’s harmonics: a key 1 to 3 semitones up
reads within 1 dB of the note, and a fifth up 2 to 6 dB under it.
Samples outside the stem count as silence.
Trait Implementations§
Source§impl<'a> Clone for StemLevels<'a>
impl<'a> Clone for StemLevels<'a>
Auto Trait Implementations§
impl<'a> Freeze for StemLevels<'a>
impl<'a> RefUnwindSafe for StemLevels<'a>
impl<'a> Send for StemLevels<'a>
impl<'a> Sync for StemLevels<'a>
impl<'a> Unpin for StemLevels<'a>
impl<'a> UnsafeUnpin for StemLevels<'a>
impl<'a> UnwindSafe for StemLevels<'a>
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> 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
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