pub trait AudioSampleIterators<'a, T>where
T: StandardSample,{
// Required methods
fn frames<'iter>(&'iter self) -> FrameIterator<'iter, 'a, T> ⓘ
where 'a: 'iter;
fn channels<'iter>(&'iter self) -> ChannelIterator<'iter, 'a, T> ⓘ;
fn windows<'iter>(
&'iter self,
window_size: usize,
hop_size: usize,
) -> WindowIterator<'iter, 'a, T> ⓘ
where 'a: 'iter;
}Expand description
Extension trait providing iterator methods for AudioSamples.
Required Methods§
Sourcefn frames<'iter>(&'iter self) -> FrameIterator<'iter, 'a, T> ⓘwhere
'a: 'iter,
fn frames<'iter>(&'iter self) -> FrameIterator<'iter, 'a, T> ⓘwhere
'a: 'iter,
Returns an iterator over frames, where each frame is a snapshot of one sample from each channel at the same point in time.
For mono audio, each frame contains exactly one sample. For multi-channel audio, each frame contains one sample per channel, preserving channel alignment across time.
§Returns
A FrameIterator that yields one AudioSamples view per time index.
The total number of frames equals self.samples_per_channel().
§Panics
Does not panic.
§Examples
use audio_samples::{AudioSamples, sample_rate, iterators::AudioSampleIterators};
use ndarray::array;
let audio = AudioSamples::new_multi_channel(
array![[1.0f32, 2.0], [3.0, 4.0]],
sample_rate!(44100),
).unwrap();
// Each frame has one sample per channel; two time steps → two frames.
let mut count = 0;
for frame in audio.frames() {
assert_eq!(frame.num_channels().get(), 2);
count += 1;
}
assert_eq!(count, 2);Sourcefn channels<'iter>(&'iter self) -> ChannelIterator<'iter, 'a, T> ⓘ
fn channels<'iter>(&'iter self) -> ChannelIterator<'iter, 'a, T> ⓘ
Returns an iterator over complete channels.
Each iteration yields the full temporal sequence of samples belonging to one channel. Channels are yielded in increasing channel-index order.
§Returns
A ChannelIterator that yields one owned AudioSamples per channel.
The total number of items equals self.num_channels().
§Panics
Does not panic.
§Examples
use audio_samples::{AudioSamples, sample_rate, iterators::AudioSampleIterators};
use ndarray::array;
let audio = AudioSamples::new_multi_channel(
array![[1.0f32, 2.0, 3.0], [4.0, 5.0, 6.0]],
sample_rate!(44100),
).unwrap();
let channels: Vec<_> = audio.channels().collect();
assert_eq!(channels.len(), 2);
assert_eq!(channels[0].samples_per_channel().get(), 3);Sourcefn windows<'iter>(
&'iter self,
window_size: usize,
hop_size: usize,
) -> WindowIterator<'iter, 'a, T> ⓘwhere
'a: 'iter,
fn windows<'iter>(
&'iter self,
window_size: usize,
hop_size: usize,
) -> WindowIterator<'iter, 'a, T> ⓘwhere
'a: 'iter,
Returns an iterator over fixed-size, optionally overlapping windows.
Each window covers window_size samples per channel. Successive windows
start hop_size samples apart, so windows overlap when hop_size < window_size.
The default boundary strategy is PaddingMode::Zero. Call
WindowIterator::with_padding_mode on the returned iterator to change it.
§Arguments
– window_size — number of samples per channel in each window. If zero,
no windows are yielded.
– hop_size — number of samples to advance between window starts. If zero,
no windows are yielded.
§Returns
A WindowIterator that yields one owned AudioSamples per window.
§Panics
Does not panic.
§Examples
See AudioSamples::windows for a runnable usage example.
// Conceptual usage via the trait interface (usize arguments):
let windows: Vec<_> = audio.windows(3_usize, 3_usize).collect();