pub struct AudioBlockPlanarViewMut<'a, S, V>{ /* private fields */ }Expand description
A mutable view of planar / separate-channel audio data.
- Layout:
[[ch0, ch0, ch0], [ch1, ch1, ch1]] - Interpretation: Each channel has its own separate buffer or array.
- Terminology: Also described as “planar” or “channels first” though more specifically it’s channel-isolated buffers.
- Usage: Very common in real-time DSP, as it simplifies memory access and can improve SIMD/vectorization efficiency.
§Example
use audio_blocks::*;
let mut data = vec![[0.0, 0.0, 0.0], [1.0, 1.0, 1.0]];
let block = AudioBlockPlanarViewMut::from_slice(&mut data);
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<'a, S, V> AudioBlockPlanarViewMut<'a, S, V>
impl<'a, S, V> AudioBlockPlanarViewMut<'a, S, V>
Sourcepub fn from_slice(data: &'a mut [V]) -> AudioBlockPlanarViewMut<'a, S, V>
pub fn from_slice(data: &'a mut [V]) -> AudioBlockPlanarViewMut<'a, S, V>
Sourcepub fn from_slice_limited(
data: &'a mut [V],
num_channels_visible: u16,
num_frames_visible: usize,
) -> AudioBlockPlanarViewMut<'a, S, V>
pub fn from_slice_limited( data: &'a mut [V], num_channels_visible: u16, num_frames_visible: usize, ) -> AudioBlockPlanarViewMut<'a, S, V>
Creates a new audio block from a mutable slice with limited visibility.
This function allows creating a view that exposes only a subset of the allocated channels and frames, which is useful for working with a logical section of a larger buffer.
§Parameters
data- The mutable slice containing planar audio samples (one slice per channel)num_channels_visible- Number of audio channels to expose in the viewnum_frames_visible- Number of audio frames to expose in the view
§Panics
- Panics if
num_channels_visibleexceeds the number of channels indata - Panics if
num_frames_visibleexceeds the length of any channel buffer - Panics if channel slices have different lengths
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) -> &[V]
pub fn raw_data(&self) -> &[V]
Provides direct access to the underlying memory.
This function gives access to all allocated data, including any reserved capacity beyond the active range.
Sourcepub fn raw_data_mut(&mut self) -> &mut [V]
pub fn raw_data_mut(&mut self) -> &mut [V]
Provides direct access to the underlying memory.
This function gives access to all allocated data, including any reserved capacity beyond the active range.
pub fn view(&self) -> AudioBlockPlanarView<'_, S, V>
pub fn view_mut(&mut self) -> AudioBlockPlanarViewMut<'_, S, V>
Trait Implementations§
Source§impl<S, V> AudioBlock<S> for AudioBlockPlanarViewMut<'_, S, V>
impl<S, V> AudioBlock<S> for AudioBlockPlanarViewMut<'_, S, V>
type PlanarView = V
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_planar_view(
&self,
) -> Option<AudioBlockPlanarView<'_, S, <AudioBlockPlanarViewMut<'_, S, V> as AudioBlock<S>>::PlanarView>>
fn as_planar_view( &self, ) -> Option<AudioBlockPlanarView<'_, S, <AudioBlockPlanarViewMut<'_, S, V> as AudioBlock<S>>::PlanarView>>
Source§fn as_interleaved_view(&self) -> Option<AudioBlockInterleavedView<'_, S>>
fn as_interleaved_view(&self) -> Option<AudioBlockInterleavedView<'_, S>>
Source§fn as_sequential_view(&self) -> Option<AudioBlockSequentialView<'_, S>>
fn as_sequential_view(&self) -> Option<AudioBlockSequentialView<'_, S>>
Source§impl<S, V> AudioBlockMut<S> for AudioBlockPlanarViewMut<'_, S, V>
impl<S, V> AudioBlockMut<S> for AudioBlockPlanarViewMut<'_, S, V>
type PlanarViewMut = V
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_planar_view_mut(
&mut self,
) -> Option<AudioBlockPlanarViewMut<'_, S, <AudioBlockPlanarViewMut<'_, S, V> as AudioBlockMut<S>>::PlanarViewMut>>
fn as_planar_view_mut( &mut self, ) -> Option<AudioBlockPlanarViewMut<'_, S, <AudioBlockPlanarViewMut<'_, S, V> as AudioBlockMut<S>>::PlanarViewMut>>
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_sequential_view_mut(
&mut self,
) -> Option<AudioBlockSequentialViewMut<'_, S>>
fn as_sequential_view_mut( &mut self, ) -> Option<AudioBlockSequentialViewMut<'_, S>>
Auto Trait Implementations§
impl<'a, S, V> Freeze for AudioBlockPlanarViewMut<'a, S, V>
impl<'a, S, V> RefUnwindSafe for AudioBlockPlanarViewMut<'a, S, V>where
S: RefUnwindSafe,
V: RefUnwindSafe,
impl<'a, S, V> Send for AudioBlockPlanarViewMut<'a, S, V>
impl<'a, S, V> Sync for AudioBlockPlanarViewMut<'a, S, V>
impl<'a, S, V> Unpin for AudioBlockPlanarViewMut<'a, S, V>where
S: Unpin,
impl<'a, S, V> !UnwindSafe for AudioBlockPlanarViewMut<'a, S, V>
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.