pub struct NoteEnvelope {Show 14 fields
pub onset: Seconds,
pub end: Seconds,
pub pitch: MidiPitch,
pub peak_db: Decibels,
pub attack: Option<Seconds>,
pub attack_upper_bound: bool,
pub hold: Seconds,
pub decay: Option<Seconds>,
pub sustain: Option<Decibels>,
pub knee: Option<Seconds>,
pub ripple: Option<Decibels>,
pub residual: Option<Decibels>,
pub overlap: bool,
pub tail: Option<TailFit>,
}Expand description
The envelope of one note.
Fields§
§onset: SecondsThe note’s onset.
end: SecondsThe note’s end in the note list, or the stem’s end when that comes first.
pitch: MidiPitchThe note’s pitch.
peak_db: DecibelsThe peak of the amp proxy, in dB of the harmonic’s power.
attack: Option<Seconds>The 10-90 % rise times RAMP_FACTOR; None when the level does
not start below 10 % of its peak.
attack_upper_bound: boolThe rise is shorter than ATTACK_PERIODS_MIN RMS windows, or for
an overlapping note BAND_STEPS_MIN times its band’s rise for an
instant step, so attack is an upper bound.
hold: SecondsThe plateau after the attack; 0 when none lasts HOLD_MIN.
decay: Option<Seconds>The time from the peak to the sustain level, read between 10 % and
90 % of the fall in dB; None when not observable or when the level
holds at the peak.
sustain: Option<Decibels>The sustain level from the peak; None when not observable.
knee: Option<Seconds>The note-off knee; None when no knee shows.
ripple: Option<Decibels>The swing of the level over the sustain window, the 90th minus the
10th percentile after its line; None when the sustain is not
observable.
residual: Option<Decibels>The RMS of the held part, in dB, against the model of the hold, the
decay line and the sustain level; None when not observable.
overlap: boolAnother note sounds during this one, so the attack reads the amp proxy, not the full band.
tail: Option<TailFit>The tail model after the knee; None without a knee or enough frames.
Trait Implementations§
Source§impl Clone for NoteEnvelope
impl Clone for NoteEnvelope
Source§impl Debug for NoteEnvelope
impl Debug for NoteEnvelope
Source§impl PartialEq for NoteEnvelope
impl PartialEq for NoteEnvelope
impl StructuralPartialEq for NoteEnvelope
Auto Trait Implementations§
impl Freeze for NoteEnvelope
impl RefUnwindSafe for NoteEnvelope
impl Send for NoteEnvelope
impl Sync for NoteEnvelope
impl Unpin for NoteEnvelope
impl UnsafeUnpin for NoteEnvelope
impl UnwindSafe for NoteEnvelope
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