Skip to main content

rill_sampler/
buffer.rs

1/// Metadata container for a loaded sample.
2pub struct SampleBuffer<T> {
3    /// Audio data (mono: single channel interleaved; stereo: deinterleaved into two vecs).
4    pub data: Vec<T>,
5    /// Right-channel data (None for mono).
6    pub right: Option<Vec<T>>,
7    /// Original sample rate.
8    pub sample_rate: f32,
9    /// Number of channels (1 or 2).
10    pub channels: u16,
11    /// Display name.
12    pub name: String,
13}
14
15impl<T> SampleBuffer<T> {
16    /// Create a mono sample buffer.
17    pub fn mono(data: Vec<T>, sample_rate: f32, name: impl Into<String>) -> Self {
18        let channels = 1;
19        Self {
20            data,
21            right: None,
22            sample_rate,
23            channels,
24            name: name.into(),
25        }
26    }
27
28    /// Create a stereo sample buffer (deinterleaved).
29    pub fn stereo(left: Vec<T>, right: Vec<T>, sample_rate: f32, name: impl Into<String>) -> Self {
30        let channels = 2;
31        Self {
32            data: left,
33            right: Some(right),
34            sample_rate,
35            channels,
36            name: name.into(),
37        }
38    }
39
40    /// Length in samples (per channel).
41    pub fn len(&self) -> usize {
42        self.data.len()
43    }
44
45    /// Returns `true` if the sample buffer contains no samples.
46    pub fn is_empty(&self) -> bool {
47        self.data.is_empty()
48    }
49}