Skip to main content

BandLayout

Struct BandLayout 

Source
pub struct BandLayout {
    pub bands: NonEmptyVec<Band>,
}
Expand description

A non-empty ordered collection of Bands that together partition the audible spectrum.

Construct using BandLayout::new for custom layouts, or the preset constructors BandLayout::bark and BandLayout::mel for standard perceptual scales (see bands).

Fields§

§bands: NonEmptyVec<Band>

The ordered list of bands.

Implementations§

Source§

impl BandLayout

Source

pub fn bark( n_bands: NonZeroUsize, sample_rate_hz: f32, n_bins: NonZeroUsize, ) -> Self

Creates a Bark-scale band layout.

Divides the spectrum from 0 Hz to Nyquist into n_bands bands spaced evenly on the Bark scale. Bark bands closely model the ear’s critical bands and are used by MPEG psychoacoustic models.

n_bins is the number of spectral bins in the caller’s frequency representation (e.g. MdctParams::n_coefficients() for MDCT, or n_fft / 2 + 1 for a real FFT). Bin indices in the returned bands index into that array.

§Arguments
  • n_bands – Number of bands. 24 covers the full audible range.
  • sample_rate_hz – Sample rate of the audio signal in Hz.
  • n_bins – Total number of spectral bins.
§Returns

A BandLayout with n_bands entries.

§Examples
use audio_samples::BandLayout;
use std::num::NonZeroUsize;

let layout = BandLayout::bark(
    NonZeroUsize::new(24).unwrap(),
    44100.0,
    NonZeroUsize::new(1024).unwrap(),
);
assert_eq!(layout.len().get(), 24);
// All bands fit within the bin range.
for band in layout.as_slice().iter() {
    assert!(band.end_bin <= 1024);
    assert!(band.end_bin > band.start_bin);
}
Source

pub fn mel( n_bands: NonZeroUsize, sample_rate_hz: f32, n_bins: NonZeroUsize, ) -> Self

Creates a Mel-scale band layout.

Divides the spectrum from 0 Hz to Nyquist into n_bands bands spaced evenly on the Mel scale. Mel bands are commonly used for speech and music feature extraction.

n_bins is the number of spectral bins in the caller’s frequency representation. Bin indices in the returned bands index into that array.

§Arguments
  • n_bands – Number of bands. 40–128 is typical for speech / music.
  • sample_rate_hz – Sample rate of the audio signal in Hz.
  • n_bins – Total number of spectral bins.
§Returns

A BandLayout with n_bands entries.

§Examples
use audio_samples::BandLayout;
use std::num::NonZeroUsize;

let layout = BandLayout::mel(
    NonZeroUsize::new(40).unwrap(),
    22050.0,
    NonZeroUsize::new(512).unwrap(),
);
assert_eq!(layout.len().get(), 40);
Source

pub fn erb( n_bands: NonZeroUsize, sample_rate_hz: f32, n_bins: NonZeroUsize, ) -> Self

Creates an ERB-scale band layout.

Divides the spectrum from 0 Hz to Nyquist into n_bands bands spaced evenly on the ERB (Equivalent Rectangular Bandwidth) scale of Glasberg & Moore (1990). ERB bands more accurately model auditory filter widths than Bark bands, particularly at low frequencies, and are used in modern perceptual models (Opus, EVS).

n_bins is the number of spectral bins in the caller’s frequency representation. Bin indices in the returned bands index into that array.

§Arguments
  • n_bands – Number of bands. 32–64 is typical.
  • sample_rate_hz – Sample rate of the audio signal in Hz.
  • n_bins – Total number of spectral bins.
§Returns

A BandLayout with n_bands entries.

§Examples
use audio_samples::BandLayout;
use std::num::NonZeroUsize;

let layout = BandLayout::erb(
    NonZeroUsize::new(32).unwrap(),
    44100.0,
    NonZeroUsize::new(1024).unwrap(),
);
assert_eq!(layout.len().get(), 32);
for band in layout.as_slice().iter() {
    assert!(band.end_bin > band.start_bin);
}
Source

pub fn celt(sample_rate_hz: f32, n_bins: NonZeroUsize) -> Self

Creates a CELT-scale band layout using the RFC 6716 band edges.

Divides the spectrum into up to 21 perceptual bands whose boundaries follow the CELT specification (RFC 6716 §4.3.1, Table 2). Bands that fall entirely above the Nyquist frequency of sample_rate_hz are omitted, so the returned layout may have fewer than 21 entries.

§Arguments
  • sample_rate_hz – Sample rate of the signal in Hz.
  • n_bins – Number of spectral bins (half the FFT size).
§Returns

A BandLayout with up to 21 entries.

§Examples
use audio_samples::BandLayout;
use std::num::NonZeroUsize;

// 20 ms frame at 44.1 kHz → 882 samples → 441 bins
let layout = BandLayout::celt(44100.0, NonZeroUsize::new(441).unwrap());
assert!(layout.len().get() <= 21);
for band in layout.as_slice().iter() {
    assert!(band.end_bin > band.start_bin);
}
Source§

impl BandLayout

Source

pub fn new(bands: &NonEmptySlice<Band>) -> Self

Creates a BandLayout from a non-empty slice of bands.

§Arguments
  • bands – At least one Band. Bands should be ordered by start_bin and cover non-overlapping frequency ranges.
Source

pub fn len(&self) -> NonZeroUsize

Returns the number of bands.

Source

pub fn as_slice(&self) -> &NonEmptySlice<Band>

Returns a view over all bands.

Trait Implementations§

Source§

impl Clone for BandLayout

Source§

fn clone(&self) -> BandLayout

Returns a duplicate of the value. Read more
1.0.0 (const: unstable) · Source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
Source§

impl Debug for BandLayout

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
Source§

impl PartialEq for BandLayout

Source§

fn eq(&self, other: &BandLayout) -> bool

Tests for self and other values to be equal, and is used by ==.
1.0.0 (const: unstable) · Source§

fn ne(&self, other: &Rhs) -> bool

Tests for !=. The default implementation is almost always sufficient, and should not be overridden without very good reason.
Source§

impl StructuralPartialEq for BandLayout

Auto Trait Implementations§

Blanket Implementations§

Source§

impl<T> Any for T
where T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> CloneToUninit for T
where T: Clone,

Source§

unsafe fn clone_to_uninit(&self, dest: *mut u8)

🔬This is a nightly-only experimental API. (clone_to_uninit)
Performs copy-assignment from self to dest. Read more
Source§

impl<Src, Dst> ConvertTo<Dst> for Src
where Dst: ConvertFrom<Src>,

Source§

fn convert_to(self) -> Dst

Converts this sample into Dst using audio-aware scaling. Read more
Source§

impl<T> DynClone for T
where T: Clone,

Source§

fn __clone_box(&self, _: Private) -> *mut ()

Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

Source§

impl<T, U> Into<U> for T
where U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

Source§

impl<T> IntoEither for T

Source§

fn into_either(self, into_left: bool) -> Either<Self, Self>

Converts self into a Left variant of Either<Self, Self> if into_left is true. Converts self into a Right variant of Either<Self, Self> otherwise. Read more
Source§

fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
where F: FnOnce(&Self) -> bool,

Converts self into a Left variant of Either<Self, Self> if into_left(&self) returns true. Converts self into a Right variant of Either<Self, Self> otherwise. Read more
Source§

impl<T> MaybeSerdeAudioSample for T

Source§

impl<T> Pointable for T

Source§

const ALIGN: usize

The alignment of pointer.
Source§

type Init = T

The type for initializers.
Source§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
Source§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
Source§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
Source§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
Source§

impl<T> ToOwned for T
where T: Clone,

Source§

type Owned = T

The resulting type after obtaining ownership.
Source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
Source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
Source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.