Struct rotary::channel::ChannelMut[][src]

pub struct ChannelMut<'a, T> where
    T: Sample
{ /* fields omitted */ }

The mutable buffer of a single channel.

This doesn’t provide direct access to the underlying buffer, but rather allows us to copy data usinga number of utility functions.

Implementations

impl<'a, T> ChannelMut<'a, T> where
    T: Sample
[src]

pub fn linear(buf: &'a mut [T]) -> Self[src]

Construct a linear buffer.

pub fn interleaved(buf: &'a mut [T], channels: usize, channel: usize) -> Self[src]

Construct an interleaved buffer.

pub fn as_mut(&mut self) -> ChannelMut<'_, T>[src]

Construct a new mutable channel that has a lifetime of the current instance.

pub fn iter(&self) -> Iter<'_, T>

Notable traits for Iter<'a, T>

impl<'a, T> Iterator for Iter<'a, T> where
    T: Sample
type Item = T;
[src]

Construct an iterator over the channel.

Examples

use rotary::{Buf as _, BufMut as _};

let mut left = rotary::interleaved![[0.0f32; 4]; 2];
let mut right = rotary::dynamic![[0.0f32; 4]; 2];

for (l, r) in left.channel_mut(0).iter_mut().zip(right.channel_mut(0)) {
    *l = 1.0;
    *r = 1.0;
}

assert!(left.channel(0).iter().eq(right.channel(0).iter()));

assert_eq!(left.as_slice(), &[1.0, 0.0, 1.0, 0.0, 1.0, 0.0, 1.0, 0.0]);
assert_eq!(&right[0], &[1.0, 1.0, 1.0, 1.0]);
assert_eq!(&right[1], &[0.0, 0.0, 0.0, 0.0]);

pub fn iter_mut(&mut self) -> IterMut<'_, T>

Notable traits for IterMut<'a, T>

impl<'a, T> Iterator for IterMut<'a, T> where
    T: Sample
type Item = &'a mut T;
[src]

Construct a mutable iterator over the channel.

Examples

use rotary::{Buf as _, BufMut as _};

let mut left = rotary::interleaved![[0.0f32; 4]; 2];
let mut right = rotary::dynamic![[0.0f32; 4]; 2];

for (l, r) in left.channel_mut(0).iter_mut().zip(right.channel_mut(0)) {
    *l = 1.0;
    *r = 1.0;
}

assert!(left.channel(0).iter().eq(right.channel(0).iter()));

assert_eq!(left.as_slice(), &[1.0, 0.0, 1.0, 0.0, 1.0, 0.0, 1.0, 0.0]);
assert_eq!(&right[0], &[1.0, 1.0, 1.0, 1.0]);
assert_eq!(&right[1], &[0.0, 0.0, 0.0, 0.0]);

pub fn skip(self, n: usize) -> Self[src]

Construct a channel buffer where the first n frames are skipped.

Examples

use rotary::{Buf as _, BufMut as _};

let mut buffer = rotary::Interleaved::with_topology(2, 4);

buffer.channel_mut(0).skip(2).copy_from_slice(&[1.0, 1.0]);

assert_eq!(buffer.as_slice(), &[0.0, 0.0, 0.0, 0.0, 1.0, 0.0, 1.0, 0.0])

pub fn limit(self, limit: usize) -> Self[src]

Limit the channel bufferto limit number of frames.

Examples

use rotary::{Buf as _, BufMut as _};

let from = rotary::interleaved![[1.0f32; 4]; 2];
let mut to = rotary::interleaved![[0.0f32; 4]; 2];

to.channel_mut(0).limit(2).copy_from(from.channel(0));
assert_eq!(to.as_slice(), &[1.0, 0.0, 1.0, 0.0, 0.0, 0.0, 0.0, 0.0]);

pub fn chunk(self, n: usize, len: usize) -> Self[src]

Construct a range of frames corresponds to the chunk with len and position n.

Which is the range n * len .. n * len + len.

Examples

use rotary::{Buf as _, BufMut as _};

let from = rotary::interleaved![[1.0f32; 4]; 2];
let mut to = rotary::interleaved![[0.0f32; 4]; 2];

to.channel_mut(0).chunk(1, 2).copy_from(from.channel(0));
assert_eq!(to.as_slice(), &[0.0, 0.0, 0.0, 0.0, 1.0, 0.0, 1.0, 0.0]);

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

The number of frames in the buffer.

Examples

use rotary::BufMut;

fn test(buf: &dyn BufMut<f32>) {
    let left = buf.channel(0);
    let right = buf.channel(1);

    assert_eq!(left.frames(), 16);
    assert_eq!(right.frames(), 16);
}

test(&rotary::dynamic![[0.0; 16]; 2]);
test(&rotary::sequential![[0.0; 16]; 2]);
test(&rotary::interleaved![[0.0; 16]; 2]);

pub fn chunks(&self, chunk: usize) -> usize[src]

The number of chunks that can fit with the given size.

Examples

use rotary::BufMut;

fn test(buf: &dyn BufMut<f32>) {
    let left = buf.channel(0);
    let right = buf.channel(1);

    assert_eq!(left.chunks(4), 4);
    assert_eq!(right.chunks(4), 4);

    assert_eq!(left.chunks(6), 3);
    assert_eq!(right.chunks(6), 3);
}

test(&rotary::dynamic![[0.0; 16]; 2]);
test(&rotary::sequential![[0.0; 16]; 2]);
test(&rotary::interleaved![[0.0; 16]; 2]);

pub fn set(&mut self, n: usize, value: T)[src]

Set the value at the given frame in the current channel.

Examples

use rotary::BufMut;

fn test(buf: &mut dyn BufMut<f32>) {
    buf.channel_mut(0).set(1, 1.0);
    buf.channel_mut(0).set(7, 1.0);

    let mut out = vec![0.0; 8];
    buf.channel(0).copy_into_slice(&mut out);

    assert_eq!(out, vec![0.0, 1.0, 0.0, 0.0, 0.0, 0.0, 0.0, 1.0]);
}

test(&mut rotary::dynamic![[0.0; 8]; 2]);
test(&mut rotary::sequential![[0.0; 8]; 2]);
test(&mut rotary::interleaved![[0.0; 8]; 2]);

pub fn copy_from_slice(&mut self, buf: &[T]) where
    T: Copy
[src]

Copy from the given slice.

Examples

use rotary::BufMut;

fn test(buf: &mut dyn BufMut<f32>) {
    buf.channel_mut(0).copy_from_slice(&[1.0; 4][..]);

    let mut out = vec![0.0; 8];
    buf.channel(0).copy_into_slice(&mut out);

    assert_eq!(out, vec![1.0, 1.0, 1.0, 1.0, 0.0, 0.0, 0.0, 0.0]);
}

test(&mut rotary::dynamic![[0.0; 8]; 2]);
test(&mut rotary::sequential![[0.0; 8]; 2]);
test(&mut rotary::interleaved![[0.0; 8]; 2]);

pub fn copy_from_iter<I>(&mut self, iter: I) where
    I: IntoIterator<Item = T>, 
[src]

Copy a chunked destination from an iterator.

Examples

use rotary::BufMut;

fn test(buf: &mut dyn BufMut<f32>) {
    buf.channel_mut(0).skip(2).copy_from_iter(vec![1.0; 4]);

    let mut out = vec![0.0; 8];
    buf.channel(0).copy_into_slice(&mut out);

    assert_eq!(out, vec![0.0, 0.0, 1.0, 1.0, 1.0, 1.0, 0.0, 0.0]);
}

test(&mut rotary::dynamic![[0.0; 8]; 2]);
test(&mut rotary::sequential![[0.0; 8]; 2]);
test(&mut rotary::interleaved![[0.0; 8]; 2]);
use rotary::BufMut;

fn test(buf: &mut dyn BufMut<f32>) {
    buf.channel_mut(0).skip(2).chunk(0, 2).copy_from_iter(vec![1.0; 4]);

    let mut out = vec![0.0; 8];
    buf.channel(0).copy_into_slice(&mut out);

    assert_eq!(out, vec![0.0, 0.0, 1.0, 1.0, 0.0, 0.0, 0.0, 0.0]);
}

test(&mut rotary::dynamic![[0.0; 8]; 2]);
test(&mut rotary::sequential![[0.0; 8]; 2]);
test(&mut rotary::interleaved![[0.0; 8]; 2]);

pub fn copy_from(&mut self, from: Channel<'_, T>)[src]

Copy one channel from another.

See utils::copy if you want to copy an entire buffer into another.

Examples

use rotary::{Buf as _, BufMut as _};

let from = rotary::dynamic![[1.0f32; 4]; 2];
let mut to = rotary::interleaved![[0.0f32; 4]; 3];

to.channel_mut(0).copy_from(from.channel(1));
assert_eq!(to.as_slice(), &[1.0, 0.0, 0.0, 1.0, 0.0, 0.0, 1.0, 0.0, 0.0, 1.0, 0.0, 0.0]);

pub fn translate_from<U>(&mut self, from: Channel<'_, U>) where
    U: Sample,
    T: Translate<U>, 
[src]

Translate one channel from another.

This will copy the channel while translating each sample according to its Translate implementation.

This is used for converting one type of sample to another.

See utils::translate if you want to translate an entire buffer.

Examples

use rotary::{Buf as _, BufMut as _};

let from = rotary::dynamic![[u16::MAX; 4]; 2];
let mut to = rotary::interleaved![[0.0f32; 4]; 3];

to.channel_mut(0).translate_from(from.channel(1));
assert_eq!(to.as_slice(), &[1.0, 0.0, 0.0, 1.0, 0.0, 0.0, 1.0, 0.0, 0.0, 1.0, 0.0, 0.0]);

Trait Implementations

impl<'a, T: Debug> Debug for ChannelMut<'a, T> where
    T: Sample
[src]

impl<'a, T> IntoIterator for ChannelMut<'a, T> where
    T: Sample
[src]

type Item = &'a mut T

The type of the elements being iterated over.

type IntoIter = IterMut<'a, T>

Which kind of iterator are we turning this into?

impl<'a, T> IntoIterator for &'a mut ChannelMut<'_, T> where
    T: Sample
[src]

type Item = &'a mut T

The type of the elements being iterated over.

type IntoIter = IterMut<'a, T>

Which kind of iterator are we turning this into?

Auto Trait Implementations

impl<'a, T> RefUnwindSafe for ChannelMut<'a, T> where
    T: RefUnwindSafe

impl<'a, T> Send for ChannelMut<'a, T> where
    T: Send

impl<'a, T> Sync for ChannelMut<'a, T> where
    T: Sync

impl<'a, T> Unpin for ChannelMut<'a, T>

impl<'a, T> !UnwindSafe for ChannelMut<'a, T>

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<T> From<T> for T[src]

impl<T, U> Into<U> for T where
    U: From<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.