pub struct AudioBlockSequential<S>where
S: Sample,{ /* private fields */ }Expand description
A sequential audio block that owns its data.
- Layout:
[ch0, ch0, ch0, ch1, ch1, ch1] - Interpretation: All samples from
ch0are stored first, followed by all fromch1, etc. - Terminology: Described as “channels first” in the sense that all data for one channel appears before any data for the next.
- Usage: Used in DSP pipelines where per-channel processing is easier and more efficient.
§Example
use audio_blocks::*;
let block = AudioBlockSequential::new(2, 3);
let mut block = AudioBlockSequential::from_block(&block);
block.channel_mut(0).fill(0.0);
block.channel_mut(1).fill(1.0);
assert_eq!(block.channel(0), &[0.0, 0.0, 0.0]);
assert_eq!(block.channel(1), &[1.0, 1.0, 1.0]);Implementations§
Source§impl<S> AudioBlockSequential<S>where
S: Sample,
impl<S> AudioBlockSequential<S>where
S: Sample,
Sourcepub fn new(num_channels: u16, num_frames: usize) -> AudioBlockSequential<S>
pub fn new(num_channels: u16, num_frames: usize) -> AudioBlockSequential<S>
Creates a new audio block with the specified dimensions.
Allocates memory with exactly the specified number of channels and frames. The block is initialized with zeros.
Do not use in real-time processes!
§Arguments
num_channels- The number of audio channelsnum_frames- The number of frames per channel
§Panics
Panics if the multiplication of num_channels and num_frames would overflow a usize.
Sourcepub fn from_block(block: &impl AudioBlock<S>) -> AudioBlockSequential<S>
pub fn from_block(block: &impl AudioBlock<S>) -> AudioBlockSequential<S>
Creates a new audio block by copying data from another AudioBlock.
Converts any AudioBlock implementation to a sequential format by iterating
through each channel of the source block and copying its samples. The new block
will have the same dimensions as the source block.
§Warning
This function allocates memory and should not be used in real-time audio processing contexts.
§Arguments
block- The source audio block to copy data from
Sourcepub fn channel_mut(&mut self, channel: u16) -> &mut [S]
pub fn channel_mut(&mut self, channel: u16) -> &mut [S]
Sourcepub fn channels(&self) -> impl Iterator<Item = &[S]>
pub fn channels(&self) -> impl Iterator<Item = &[S]>
Returns an iterator over all channels in the block.
Each channel is represented as a slice of samples.
Sourcepub fn channels_mut(&mut self) -> impl Iterator<Item = &mut [S]>
pub fn channels_mut(&mut self) -> impl Iterator<Item = &mut [S]>
Returns a mutable iterator over all channels in the block.
Each channel is represented as a mutable slice of samples.
Sourcepub fn raw_data(&self) -> &[S]
pub fn raw_data(&self) -> &[S]
Provides direct access to the underlying memory as an interleaved slice.
This function gives access to all allocated data, including any reserved capacity beyond the active range.
Sourcepub fn raw_data_mut(&mut self) -> &mut [S]
pub fn raw_data_mut(&mut self) -> &mut [S]
Provides direct mutable access to the underlying memory as an interleaved slice.
This function gives mutable access to all allocated data, including any reserved capacity beyond the active range.
pub fn view(&self) -> AudioBlockSequentialView<'_, S>
pub fn view_mut(&mut self) -> AudioBlockSequentialViewMut<'_, S>
Trait Implementations§
Source§impl<S> AudioBlock<S> for AudioBlockSequential<S>where
S: Sample,
impl<S> AudioBlock<S> for AudioBlockSequential<S>where
S: Sample,
type PlanarView = [S; 0]
Source§fn num_channels(&self) -> u16
fn num_channels(&self) -> u16
Source§fn num_frames(&self) -> usize
fn num_frames(&self) -> usize
Source§fn num_channels_allocated(&self) -> u16
fn num_channels_allocated(&self) -> u16
Source§fn num_frames_allocated(&self) -> usize
fn num_frames_allocated(&self) -> usize
Source§fn layout(&self) -> BlockLayout
fn layout(&self) -> BlockLayout
Source§fn sample(&self, channel: u16, frame: usize) -> S
fn sample(&self, channel: u16, frame: usize) -> S
Source§fn channel_iter(&self, channel: u16) -> impl Iterator<Item = &S>
fn channel_iter(&self, channel: u16) -> impl Iterator<Item = &S>
Source§fn channels_iter(&self) -> impl Iterator<Item = impl Iterator<Item = &S>>
fn channels_iter(&self) -> impl Iterator<Item = impl Iterator<Item = &S>>
Source§fn frame_iter(&self, frame: usize) -> impl Iterator<Item = &S>
fn frame_iter(&self, frame: usize) -> impl Iterator<Item = &S>
Source§fn frame_iters(&self) -> impl Iterator<Item = impl Iterator<Item = &S>>
fn frame_iters(&self) -> impl Iterator<Item = impl Iterator<Item = &S>>
Source§fn as_view(&self) -> impl AudioBlock<S>
fn as_view(&self) -> impl AudioBlock<S>
Source§fn as_sequential_view(&self) -> Option<AudioBlockSequentialView<'_, S>>
fn as_sequential_view(&self) -> Option<AudioBlockSequentialView<'_, S>>
Source§fn as_interleaved_view(&self) -> Option<AudioBlockInterleavedView<'_, S>>
fn as_interleaved_view(&self) -> Option<AudioBlockInterleavedView<'_, S>>
Source§fn as_planar_view(
&self,
) -> Option<AudioBlockPlanarView<'_, S, Self::PlanarView>>
fn as_planar_view( &self, ) -> Option<AudioBlockPlanarView<'_, S, Self::PlanarView>>
Source§impl<S> AudioBlockMut<S> for AudioBlockSequential<S>where
S: Sample,
impl<S> AudioBlockMut<S> for AudioBlockSequential<S>where
S: Sample,
type PlanarViewMut = [S; 0]
Source§fn set_active_num_channels(&mut self, num_channels: u16)
fn set_active_num_channels(&mut self, num_channels: u16)
Source§fn set_active_num_frames(&mut self, num_frames: usize)
fn set_active_num_frames(&mut self, num_frames: usize)
Source§fn sample_mut(&mut self, channel: u16, frame: usize) -> &mut S
fn sample_mut(&mut self, channel: u16, frame: usize) -> &mut S
Source§fn channel_iter_mut(&mut self, channel: u16) -> impl Iterator<Item = &mut S>
fn channel_iter_mut(&mut self, channel: u16) -> impl Iterator<Item = &mut S>
Source§fn channels_iter_mut(
&mut self,
) -> impl Iterator<Item = impl Iterator<Item = &mut S>>
fn channels_iter_mut( &mut self, ) -> impl Iterator<Item = impl Iterator<Item = &mut S>>
Source§fn frame_iter_mut(&mut self, frame: usize) -> impl Iterator<Item = &mut S>
fn frame_iter_mut(&mut self, frame: usize) -> impl Iterator<Item = &mut S>
Source§fn frames_iter_mut(
&mut self,
) -> impl Iterator<Item = impl Iterator<Item = &mut S>>
fn frames_iter_mut( &mut self, ) -> impl Iterator<Item = impl Iterator<Item = &mut S>>
Source§fn as_view_mut(&mut self) -> impl AudioBlockMut<S>
fn as_view_mut(&mut self) -> impl AudioBlockMut<S>
Source§fn as_sequential_view_mut(
&mut self,
) -> Option<AudioBlockSequentialViewMut<'_, S>>
fn as_sequential_view_mut( &mut self, ) -> Option<AudioBlockSequentialViewMut<'_, S>>
Source§fn set_active_size(&mut self, num_channels: u16, num_frames: usize)
fn set_active_size(&mut self, num_channels: u16, num_frames: usize)
Source§fn as_interleaved_view_mut(
&mut self,
) -> Option<AudioBlockInterleavedViewMut<'_, S>>
fn as_interleaved_view_mut( &mut self, ) -> Option<AudioBlockInterleavedViewMut<'_, S>>
Source§fn as_planar_view_mut(
&mut self,
) -> Option<AudioBlockPlanarViewMut<'_, S, Self::PlanarViewMut>>
fn as_planar_view_mut( &mut self, ) -> Option<AudioBlockPlanarViewMut<'_, S, Self::PlanarViewMut>>
Auto Trait Implementations§
impl<S> Freeze for AudioBlockSequential<S>
impl<S> RefUnwindSafe for AudioBlockSequential<S>where
S: RefUnwindSafe,
impl<S> Send for AudioBlockSequential<S>where
S: Send,
impl<S> Sync for AudioBlockSequential<S>where
S: Sync,
impl<S> Unpin for AudioBlockSequential<S>
impl<S> UnwindSafe for AudioBlockSequential<S>where
S: UnwindSafe,
Blanket Implementations§
Source§impl<S, B> AudioBlockOps<S> for Bwhere
S: Sample,
B: AudioBlockMut<S>,
impl<S, B> AudioBlockOps<S> for Bwhere
S: Sample,
B: AudioBlockMut<S>,
Source§fn copy_from_block(&mut self, block: &impl AudioBlock<S>)
fn copy_from_block(&mut self, block: &impl AudioBlock<S>)
Source§fn copy_from_block_resize(&mut self, block: &impl AudioBlock<S>)
fn copy_from_block_resize(&mut self, block: &impl AudioBlock<S>)
Source§fn for_each_including_non_visible(&mut self, f: impl FnMut(&mut S))
fn for_each_including_non_visible(&mut self, f: impl FnMut(&mut S))
for_each by not checking bounds of the block.
It can be used if your algorithm does not change if wrong samples are accessed.
For example this is the case for gain, clear, etc.