[][src]Struct dasp_rms::Rms

pub struct Rms<F, S> where
    F: Frame,
    S: Slice<Element = F::Float>, 
{ /* fields omitted */ }

Iteratively extracts the RMS (root mean square) envelope from a window over a signal of sample Frames.

Implementations

impl<F, S> Rms<F, S> where
    F: Frame,
    S: Slice<Element = F::Float>, 
[src]

pub fn new(ring_buffer: Fixed<S>) -> Self[src]

Construct a new Rms that uses the given ring buffer as its window.

The window size of the Rms is equal to the length of the given ring buffer.

use dasp_ring_buffer as ring_buffer;
use dasp_rms::Rms;

fn main() {
    let window = ring_buffer::Fixed::from([[0.0]; 4]);
    let mut rms = Rms::new(window);
    rms.next([0.5]);
}

pub fn reset(&mut self) where
    S: SliceMut
[src]

Zeroes the square_sum and the buffer of the window.

use dasp_ring_buffer as ring_buffer;
use dasp_rms::Rms;

fn main() {
    let window = ring_buffer::Fixed::from([[0.0]; 4]);
    let mut rms = Rms::new(window);
    rms.next([0.6]);
    rms.next([0.9]);
    rms.reset();
    assert_eq!(rms.current(), [0.0]);
}

pub fn window_frames(&self) -> usize[src]

The length of the window as a number of frames.

use dasp_ring_buffer as ring_buffer;
use dasp_rms::Rms;

fn main() {
    let window = ring_buffer::Fixed::from([[0.0]; 4]);
    let mut rms = Rms::new(window);
    assert_eq!(rms.window_frames(), 4);
    rms.next([0.5]);
    assert_eq!(rms.window_frames(), 4);
}

pub fn next(&mut self, new_frame: F) -> F::Float where
    S: SliceMut
[src]

The next RMS given the new frame in the sequence.

The Rms pops its front frame and adds the new frame to the back.

The yielded RMS is the RMS of all frame squares in the window after the new frame is added.

This method uses Rms::next_squared internally and then calculates the square root.

use dasp_ring_buffer as ring_buffer;
use dasp_rms::Rms;

fn main() {
    let window = ring_buffer::Fixed::from([[0.0]; 4]);
    let mut rms = Rms::new(window);
    assert_eq!(rms.next([1.0]), [0.5]);
    assert_eq!(rms.next([-1.0]), [0.7071067811865476]);
    assert_eq!(rms.next([1.0]), [0.8660254037844386]);
    assert_eq!(rms.next([-1.0]), [1.0]);
}

pub fn next_squared(&mut self, new_frame: F) -> F::Float where
    S: SliceMut
[src]

The same as Rms::next, but does not calculate the final square root required to determine the RMS.

pub fn into_parts(self) -> (Fixed<S>, S::Element)[src]

Consumes the Rms and returns its inner ring buffer of squared frames along with a frame representing the sum of all frame squares contained within the ring buffer.

pub fn current(&self) -> F::Float[src]

Calculates the RMS of all frames currently stored within the inner window.

use dasp_ring_buffer as ring_buffer;
use dasp_rms::Rms;

fn main() {
    let window = ring_buffer::Fixed::from([[0.0]; 4]);
    let mut rms = Rms::new(window);
    assert_eq!(rms.current(), [0.0]);
    rms.next([1.0]);
    rms.next([1.0]);
    rms.next([1.0]);
    rms.next([1.0]);
    assert_eq!(rms.current(), [1.0]);
}

Trait Implementations

impl<F: Clone, S: Clone> Clone for Rms<F, S> where
    F: Frame,
    S: Slice<Element = F::Float>,
    F::Float: Clone
[src]

impl<F, S> Debug for Rms<F, S> where
    F: Frame,
    F::Float: Debug,
    S: Debug + Slice<Element = F::Float>, 
[src]

Auto Trait Implementations

impl<F, S> RefUnwindSafe for Rms<F, S> where
    F: RefUnwindSafe,
    S: RefUnwindSafe,
    <F as Frame>::Float: RefUnwindSafe

impl<F, S> Send for Rms<F, S> where
    F: Send,
    S: Send,
    <F as Frame>::Float: Send

impl<F, S> Sync for Rms<F, S> where
    F: Sync,
    S: Sync,
    <F as Frame>::Float: Sync

impl<F, S> Unpin for Rms<F, S> where
    F: Unpin,
    S: Unpin,
    <F as Frame>::Float: Unpin

impl<F, S> UnwindSafe for Rms<F, S> where
    F: UnwindSafe,
    S: UnwindSafe,
    <F as Frame>::Float: UnwindSafe

Blanket Implementations

impl<T> Any for T where
    T: 'static + ?Sized
[src]

impl<T> Borrow<T> for T where
    T: ?Sized
[src]

impl<T> BorrowMut<T> for T where
    T: ?Sized
[src]

impl<S, T> Duplex<S> for T where
    T: FromSample<S> + ToSample<S>, 
[src]

impl<T> From<T> for T[src]

impl<S> FromSample<S> for S[src]

impl<T, U> Into<U> for T where
    U: From<T>, 
[src]

impl<T> ToOwned for T where
    T: Clone
[src]

type Owned = T

The resulting type after obtaining ownership.

impl<T, U> ToSample<U> for T where
    U: FromSample<T>, 
[src]

impl<T, U> TryFrom<U> for T where
    U: Into<T>, 
[src]

type Error = Infallible

The type returned in the event of a conversion error.

impl<T, U> TryInto<U> for T where
    U: TryFrom<T>, 
[src]

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.